13
13
from __future__ import absolute_import
14
14
15
15
import pytest
16
- from mock import Mock , MagicMock
16
+ from mock import Mock , MagicMock , DEFAULT
17
17
import sagemaker
18
+ import time
18
19
19
20
EXPANDED_ROLE = "arn:aws:iam::111111111111:role/ExpandedRole"
20
21
REGION = "us-west-2"
23
24
ENDPOINT_NAME = "the_point_of_end"
24
25
25
26
26
- def get_sagemaker_session (returns_status ):
27
+ def get_sagemaker_session_mock_endpoint_status (returns_status , block_seconds = None ):
27
28
boto_mock = MagicMock (name = "boto_session" , region_name = REGION )
28
29
client_mock = MagicMock ()
29
30
client_mock .describe_model_package = MagicMock (
30
31
return_value = {"ModelPackageStatus" : returns_status }
31
32
)
32
- client_mock .describe_endpoint = MagicMock (return_value = {"EndpointStatus" : returns_status })
33
+ side_effect = None
34
+
35
+ def side_effect_fn (* args , ** kwargs ):
36
+ time .sleep (block_seconds )
37
+ return DEFAULT
38
+
39
+ if block_seconds :
40
+ side_effect = side_effect_fn
41
+ client_mock .describe_endpoint = MagicMock (
42
+ return_value = {"EndpointStatus" : returns_status }, side_effect = side_effect
43
+ )
33
44
ims = sagemaker .Session (boto_session = boto_mock , sagemaker_client = client_mock )
34
45
ims .expand_role = Mock (return_value = EXPANDED_ROLE )
35
46
return ims
36
47
37
48
38
49
def test_does_not_raise_when_successfully_created_package ():
39
50
try :
40
- sagemaker_session = get_sagemaker_session (returns_status = "Completed" )
51
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "Completed" )
41
52
sagemaker_session .wait_for_model_package (MODEL_PACKAGE_NAME )
42
53
except sagemaker .exceptions .UnexpectedStatusException :
43
54
pytest .fail ("UnexpectedStatusException was thrown while it should not" )
44
55
45
56
46
57
def test_raise_when_failed_created_package ():
47
58
try :
48
- sagemaker_session = get_sagemaker_session (returns_status = "EnRoute" )
59
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "EnRoute" )
49
60
sagemaker_session .wait_for_model_package (MODEL_PACKAGE_NAME )
50
61
assert (
51
62
False
@@ -59,7 +70,7 @@ def test_raise_when_failed_created_package():
59
70
def test_does_not_raise_when_correct_job_status ():
60
71
try :
61
72
job = Mock ()
62
- sagemaker_session = get_sagemaker_session (returns_status = "Stopped" )
73
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "Stopped" )
63
74
sagemaker_session ._check_job_status (
64
75
job , {"TransformationJobStatus" : "Stopped" }, "TransformationJobStatus"
65
76
)
@@ -70,7 +81,7 @@ def test_does_not_raise_when_correct_job_status():
70
81
def test_does_raise_when_incorrect_job_status ():
71
82
try :
72
83
job = Mock ()
73
- sagemaker_session = get_sagemaker_session (returns_status = "Failed" )
84
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "Failed" )
74
85
sagemaker_session ._check_job_status (
75
86
job , {"TransformationJobStatus" : "Failed" }, "TransformationJobStatus"
76
87
)
@@ -86,15 +97,15 @@ def test_does_raise_when_incorrect_job_status():
86
97
87
98
def test_does_not_raise_when_successfully_deployed_endpoint ():
88
99
try :
89
- sagemaker_session = get_sagemaker_session (returns_status = "InService" )
100
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "InService" )
90
101
sagemaker_session .wait_for_endpoint (ENDPOINT_NAME )
91
102
except sagemaker .exceptions .UnexpectedStatusException :
92
103
pytest .fail ("UnexpectedStatusException was thrown while it should not" )
93
104
94
105
95
106
def test_raise_when_failed_to_deploy_endpoint ():
96
107
try :
97
- sagemaker_session = get_sagemaker_session (returns_status = "Failed" )
108
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (returns_status = "Failed" )
98
109
assert sagemaker_session .wait_for_endpoint (ENDPOINT_NAME )
99
110
assert (
100
111
False
@@ -103,3 +114,15 @@ def test_raise_when_failed_to_deploy_endpoint():
103
114
assert type (e ) == sagemaker .exceptions .UnexpectedStatusException
104
115
assert e .actual_status == "Failed"
105
116
assert "InService" in e .allowed_statuses
117
+
118
+
119
+ def test_wait_for_endpoint_timeout ():
120
+ timeout_seconds = 2
121
+ block_seconds = timeout_seconds + 3
122
+ sagemaker_session = get_sagemaker_session_mock_endpoint_status (
123
+ returns_status = "InService" , block_seconds = block_seconds
124
+ )
125
+ start_time = time .time ()
126
+ sagemaker_session .wait_for_endpoint (ENDPOINT_NAME , 0.1 , timeout_seconds )
127
+ elapsed_time = time .time () - start_time
128
+ assert elapsed_time >= timeout_seconds
0 commit comments