14
14
15
15
import pytest
16
16
from botocore .exceptions import ClientError
17
- from mock import MagicMock
17
+ from mock import MagicMock , patch
18
18
import sagemaker
19
19
20
20
ACCOUNT_ID = "123"
@@ -32,6 +32,11 @@ def sagemaker_session():
32
32
33
33
34
34
def test_default_bucket_s3_create_call (sagemaker_session ):
35
+ error = ClientError (
36
+ error_response = {"Error" : {"Code" : "404" , "Message" : "Not Found" }},
37
+ operation_name = "foo" ,
38
+ )
39
+ sagemaker_session .boto_session .resource ("s3" ).meta .client .head_bucket .side_effect = error
35
40
bucket_name = sagemaker_session .default_bucket ()
36
41
37
42
create_calls = sagemaker_session .boto_session .resource ().create_bucket .mock_calls
@@ -45,6 +50,25 @@ def test_default_bucket_s3_create_call(sagemaker_session):
45
50
assert sagemaker_session ._default_bucket == bucket_name
46
51
47
52
53
+ def test_default_bucket_s3_needs_access (sagemaker_session ):
54
+ with patch ("logging.Logger.error" ) as mocked_error_log :
55
+ with pytest .raises (ClientError ):
56
+ error = ClientError (
57
+ error_response = {"Error" : {"Code" : "403" , "Message" : "Forbidden" }},
58
+ operation_name = "foo" ,
59
+ )
60
+ sagemaker_session .boto_session .resource (
61
+ "s3"
62
+ ).meta .client .head_bucket .side_effect = error
63
+ sagemaker_session .default_bucket ()
64
+ mocked_error_log .assert_called_once_with (
65
+ "Bucket %s exists, but access is forbidden. Please try again after "
66
+ "adding appropriate access." ,
67
+ DEFAULT_BUCKET_NAME ,
68
+ )
69
+ assert sagemaker_session ._default_bucket is None
70
+
71
+
48
72
def test_default_already_cached (sagemaker_session ):
49
73
existing_default = "mydefaultbucket"
50
74
sagemaker_session ._default_bucket = existing_default
@@ -57,11 +81,9 @@ def test_default_already_cached(sagemaker_session):
57
81
58
82
59
83
def test_default_bucket_exists (sagemaker_session ):
60
- error = ClientError (
61
- error_response = {"Error" : {"Code" : "BucketAlreadyOwnedByYou" , "Message" : "message" }},
62
- operation_name = "foo" ,
63
- )
64
- sagemaker_session .boto_session .resource ().create_bucket .side_effect = error
84
+ sagemaker_session .boto_session .resource ("s3" ).meta .client .head_bucket .return_value = {
85
+ "ResponseMetadata" : {"RequestId" : "xxx" , "HTTPStatusCode" : 200 , "RetryAttempts" : 0 }
86
+ }
65
87
66
88
bucket_name = sagemaker_session .default_bucket ()
67
89
assert bucket_name == DEFAULT_BUCKET_NAME
@@ -70,7 +92,7 @@ def test_default_bucket_exists(sagemaker_session):
70
92
def test_concurrent_bucket_modification (sagemaker_session ):
71
93
message = "A conflicting conditional operation is currently in progress against this resource. Please try again"
72
94
error = ClientError (
73
- error_response = {"Error" : {"Code" : "BucketAlreadyOwnedByYou " , "Message" : message }},
95
+ error_response = {"Error" : {"Code" : "OperationAborted " , "Message" : message }},
74
96
operation_name = "foo" ,
75
97
)
76
98
sagemaker_session .boto_session .resource ().create_bucket .side_effect = error
@@ -80,6 +102,11 @@ def test_concurrent_bucket_modification(sagemaker_session):
80
102
81
103
82
104
def test_bucket_creation_client_error (sagemaker_session ):
105
+ error = ClientError (
106
+ error_response = {"Error" : {"Code" : "404" , "Message" : "Not Found" }},
107
+ operation_name = "foo" ,
108
+ )
109
+ sagemaker_session .boto_session .resource ("s3" ).meta .client .head_bucket .side_effect = error
83
110
with pytest .raises (ClientError ):
84
111
error = ClientError (
85
112
error_response = {"Error" : {"Code" : "SomethingWrong" , "Message" : "message" }},
@@ -92,6 +119,11 @@ def test_bucket_creation_client_error(sagemaker_session):
92
119
93
120
94
121
def test_bucket_creation_other_error (sagemaker_session ):
122
+ error = ClientError (
123
+ error_response = {"Error" : {"Code" : "404" , "Message" : "Not Found" }},
124
+ operation_name = "foo" ,
125
+ )
126
+ sagemaker_session .boto_session .resource ("s3" ).meta .client .head_bucket .side_effect = error
95
127
with pytest .raises (RuntimeError ):
96
128
error = RuntimeError ()
97
129
sagemaker_session .boto_session .resource ().create_bucket .side_effect = error
0 commit comments