@@ -226,10 +226,33 @@ def mock_tes_server_request_function(
226226 return httpx .Response (status_code = status_code , json = out , text = text )
227227
228228
229+ def mock_aws_s3_request_function (url : str ):
230+ """
231+ Mock responses from AWS S3
232+ """
233+ resp_xml = MOCKED_S3_RESPONSE_XML
234+ headers = {"content-type" : "application/xml" }
235+
236+ # multipart upload special case:
237+ if "test_s3_upload_file_multipart.txt" in url :
238+ upload_id = "test-upload-id"
239+ # "InitiateMultipartUploadResult" with "UploadId"
240+ resp_xml = f"""<?xml version="1.0" encoding="UTF-8"?>\n <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Bucket>gen3wf-{ config ['HOSTNAME' ]} -{ TEST_USER_ID } </Bucket><Key>test_s3_chunk_upload.txt</Key><UploadId>{ upload_id } </UploadId></InitiateMultipartUploadResult>"""
241+ if f"?uploadId={ upload_id } &partNumber=" in url :
242+ headers ["etag" ] = "test-etag"
243+
244+ return httpx .Response (
245+ status_code = 200 ,
246+ text = resp_xml ,
247+ headers = headers ,
248+ )
249+
250+
229251# making these functions into mocks allows tests to check the requests that were made, for
230252# example: `mock_tes_server_request.assert_called_with(...)`
231253mock_tes_server_request = MagicMock (side_effect = mock_tes_server_request_function )
232254mock_arborist_request = MagicMock (side_effect = mock_arborist_request_function )
255+ mock_aws_s3_request = MagicMock (side_effect = mock_aws_s3_request_function )
233256
234257
235258@pytest_asyncio .fixture (scope = "function" , autouse = True )
@@ -316,20 +339,7 @@ async def handle_request(request: Request):
316339 f"https://gen3wf-{ config ['HOSTNAME' ]} -{ TEST_USER_ID } .s3.{ config ['USER_BUCKETS_REGION' ]} .amazonaws.com"
317340 ):
318341 # mock calls to AWS S3
319- resp_xml = MOCKED_S3_RESPONSE_XML
320- headers = {"content-type" : "application/xml" }
321- # multipart upload special case:
322- if "test_s3_upload_file_multipart.txt" in url :
323- upload_id = "test-upload-id"
324- # "InitiateMultipartUploadResult" with "UploadId"
325- resp_xml = f"""<?xml version="1.0" encoding="UTF-8"?>\n <InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Bucket>gen3wf-{ config ['HOSTNAME' ]} -{ TEST_USER_ID } </Bucket><Key>test_s3_chunk_upload.txt</Key><UploadId>{ upload_id } </UploadId></InitiateMultipartUploadResult>"""
326- if f"?uploadId={ upload_id } &partNumber=" in url :
327- headers ["etag" ] = "test-etag"
328- mocked_response = httpx .Response (
329- status_code = 200 ,
330- text = resp_xml ,
331- headers = headers ,
332- )
342+ mocked_response = mock_aws_s3_request (url )
333343
334344 if mocked_response is not None :
335345 print (f"Mocking request '{ request .method } { url } '" )
0 commit comments