@@ -39,6 +39,19 @@ def sagemaker_session():
3939 return sagemaker_session
4040
4141
42+ @pytest .fixture ()
43+ def sagemaker_session_with_bucket_name_and_prefix ():
44+ boto_mock = MagicMock (name = "boto_session" , region_name = REGION )
45+ boto_mock .client ("sts" ).get_caller_identity .return_value = {"Account" : ACCOUNT_ID }
46+ sagemaker_session = sagemaker .Session (
47+ boto_session = boto_mock ,
48+ default_bucket = "XXXXXXXXXXXXX" ,
49+ default_bucket_prefix = "sample-prefix" ,
50+ )
51+ sagemaker_session .boto_session .resource ("s3" ).Bucket ().creation_date = None
52+ return sagemaker_session
53+
54+
4255def test_default_bucket_s3_create_call (sagemaker_session ):
4356 error = ClientError (
4457 error_response = {"Error" : {"Code" : "404" , "Message" : "Not Found" }},
@@ -96,6 +109,30 @@ def test_default_bucket_s3_needs_bucket_owner_access(sagemaker_session, datetime
96109 assert sagemaker_session ._default_bucket is None
97110
98111
112+ def test_default_bucket_with_prefix_s3_needs_bucket_owner_access (
113+ sagemaker_session_with_bucket_name_and_prefix , datetime_obj , caplog
114+ ):
115+ with pytest .raises (ClientError ):
116+ error = ClientError (
117+ error_response = {"Error" : {"Code" : "403" , "Message" : "Forbidden" }},
118+ operation_name = "foo" ,
119+ )
120+ sagemaker_session_with_bucket_name_and_prefix .boto_session .resource (
121+ "s3"
122+ ).meta .client .list_objects_v2 .side_effect = error
123+ sagemaker_session_with_bucket_name_and_prefix .boto_session .resource ("s3" ).Bucket (
124+ name = DEFAULT_BUCKET_NAME
125+ ).creation_date = None
126+ sagemaker_session_with_bucket_name_and_prefix .default_bucket ()
127+
128+ error_message = "Please try again after adding appropriate access."
129+ assert error_message in caplog .text
130+ assert sagemaker_session_with_bucket_name_and_prefix ._default_bucket is None
131+ sagemaker_session_with_bucket_name_and_prefix .boto_session .resource (
132+ "s3"
133+ ).meta .client .list_objects_v2 .assert_called_once ()
134+
135+
99136def test_default_bucket_s3_custom_bucket_input (sagemaker_session , datetime_obj , caplog ):
100137 sagemaker_session ._default_bucket_name_override = "custom-bucket-override"
101138 error = ClientError (
0 commit comments