1414
1515import pytest
1616from botocore .exceptions import ClientError
17- from mock import MagicMock
17+ from mock import MagicMock , patch
1818import sagemaker
1919
2020ACCOUNT_ID = "123"
@@ -32,6 +32,11 @@ def sagemaker_session():
3232
3333
3434def 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
3540 bucket_name = sagemaker_session .default_bucket ()
3641
3742 create_calls = sagemaker_session .boto_session .resource ().create_bucket .mock_calls
@@ -45,6 +50,25 @@ def test_default_bucket_s3_create_call(sagemaker_session):
4550 assert sagemaker_session ._default_bucket == bucket_name
4651
4752
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+
4872def test_default_already_cached (sagemaker_session ):
4973 existing_default = "mydefaultbucket"
5074 sagemaker_session ._default_bucket = existing_default
@@ -57,11 +81,9 @@ def test_default_already_cached(sagemaker_session):
5781
5882
5983def 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+ }
6587
6688 bucket_name = sagemaker_session .default_bucket ()
6789 assert bucket_name == DEFAULT_BUCKET_NAME
@@ -70,7 +92,7 @@ def test_default_bucket_exists(sagemaker_session):
7092def test_concurrent_bucket_modification (sagemaker_session ):
7193 message = "A conflicting conditional operation is currently in progress against this resource. Please try again"
7294 error = ClientError (
73- error_response = {"Error" : {"Code" : "BucketAlreadyOwnedByYou " , "Message" : message }},
95+ error_response = {"Error" : {"Code" : "OperationAborted " , "Message" : message }},
7496 operation_name = "foo" ,
7597 )
7698 sagemaker_session .boto_session .resource ().create_bucket .side_effect = error
@@ -80,6 +102,11 @@ def test_concurrent_bucket_modification(sagemaker_session):
80102
81103
82104def 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
83110 with pytest .raises (ClientError ):
84111 error = ClientError (
85112 error_response = {"Error" : {"Code" : "SomethingWrong" , "Message" : "message" }},
@@ -92,6 +119,11 @@ def test_bucket_creation_client_error(sagemaker_session):
92119
93120
94121def 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
95127 with pytest .raises (RuntimeError ):
96128 error = RuntimeError ()
97129 sagemaker_session .boto_session .resource ().create_bucket .side_effect = error
0 commit comments