From cefa09856657135ae6b208904b469106b8303962 Mon Sep 17 00:00:00 2001 From: c-bata Date: Fri, 2 Jun 2023 12:17:44 +0900 Subject: [PATCH] Add a test case for non file-like object in Boto3Backend --- python_tests/test_boto3_artifact.py | 31 ++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/python_tests/test_boto3_artifact.py b/python_tests/test_boto3_artifact.py index 0030c07a..617c11e3 100644 --- a/python_tests/test_boto3_artifact.py +++ b/python_tests/test_boto3_artifact.py @@ -1,5 +1,7 @@ import io from unittest import TestCase +from unittest.mock import MagicMock +from unittest.mock import patch import boto3 from moto import mock_s3 @@ -16,10 +18,10 @@ class Boto3BackendTestCase(TestCase): def tearDown(self) -> None: objects = self.s3_client.list_objects(Bucket=self.bucket_name).get("Contents", []) if objects: - self.s3_client.delete_objects(Bucket=self.bucket_name, Delete={ - "Objects": [{"Key": obj["Key"] for obj in objects}], - "Quiet": True - }) + self.s3_client.delete_objects( + Bucket=self.bucket_name, + Delete={"Objects": [{"Key": obj["Key"] for obj in objects}], "Quiet": True}, + ) self.s3_client.delete_bucket(Bucket=self.bucket_name) def test_upload_download(self) -> None: @@ -28,7 +30,7 @@ class Boto3BackendTestCase(TestCase): backend = Boto3Backend(self.bucket_name) backend.write(artifact_id, io.BytesIO(dummy_content)) - assert len(self.s3_client.list_objects(Bucket=self.bucket_name)['Contents']) == 1 + assert len(self.s3_client.list_objects(Bucket=self.bucket_name)["Contents"]) == 1 obj = self.s3_client.get_object(Bucket=self.bucket_name, Key=artifact_id) assert obj["Body"].read() == dummy_content @@ -36,13 +38,28 @@ class Boto3BackendTestCase(TestCase): actual = f.read() self.assertEqual(actual, dummy_content) + @patch("optuna_dashboard.artifact.boto3._is_file_like_obj") + def test_upload_download_non_file_like(self, mock_is_file_like_obj: MagicMock) -> None: + mock_is_file_like_obj.side_effect = lambda o: False + + artifact_id = "dummy-uuid" + dummy_content = b"Hello World" + backend = Boto3Backend(self.bucket_name) + backend.write(artifact_id, io.BytesIO(dummy_content)) + assert len(self.s3_client.list_objects(Bucket=self.bucket_name)["Contents"]) == 1 + obj = self.s3_client.get_object(Bucket=self.bucket_name, Key=artifact_id) + assert obj["Body"].read() == dummy_content + with backend.open(artifact_id) as f: + actual = f.read() + self.assertEqual(actual, dummy_content) + def test_remove(self) -> None: artifact_id = "dummy-uuid" backend = Boto3Backend(self.bucket_name) backend.write(artifact_id, io.BytesIO(b"Hello")) - objects = self.s3_client.list_objects(Bucket=self.bucket_name)['Contents'] + objects = self.s3_client.list_objects(Bucket=self.bucket_name)["Contents"] assert len([obj for obj in objects if obj["Key"] == artifact_id]) == 1 backend.remove(artifact_id) - objects = self.s3_client.list_objects(Bucket=self.bucket_name).get('Contents', []) + objects = self.s3_client.list_objects(Bucket=self.bucket_name).get("Contents", []) assert len([obj for obj in objects if obj["Key"] == artifact_id]) == 0