From 3a1e67863bc492db9ab46a3abf8183ce1aac3ca1 Mon Sep 17 00:00:00 2001 From: "a.berezin" Date: Tue, 18 Jun 2024 13:00:56 +0300 Subject: [PATCH] [#253] Use TestFiles which automatically deletes itself Signed-off-by: a.berezin --- pytest_tests/testsuites/failovers/conftest.py | 7 ++- .../services/s3_gate/test_s3_gate.py | 15 +++--- .../services/s3_gate/test_s3_object.py | 48 +++++++++---------- 3 files changed, 34 insertions(+), 36 deletions(-) diff --git a/pytest_tests/testsuites/failovers/conftest.py b/pytest_tests/testsuites/failovers/conftest.py index 9f96568..8f2e733 100644 --- a/pytest_tests/testsuites/failovers/conftest.py +++ b/pytest_tests/testsuites/failovers/conftest.py @@ -6,7 +6,7 @@ import pytest from frostfs_testlib.storage.cluster import ClusterNode from frostfs_testlib.storage.controllers import ShardsWatcher from frostfs_testlib.storage.dataclasses.object_size import ObjectSize -from frostfs_testlib.utils.file_utils import generate_file +from frostfs_testlib.utils.file_utils import TestFile, generate_file @pytest.fixture() @@ -25,7 +25,6 @@ def test_start_time() -> datetime: @pytest.fixture() @allure.title("Generate simple size file") -def simple_file(simple_object_size: ObjectSize) -> str: +def simple_file(simple_object_size: ObjectSize) -> TestFile: path_file = generate_file(size=simple_object_size.value) - yield path_file - os.remove(path_file) + return path_file diff --git a/pytest_tests/testsuites/services/s3_gate/test_s3_gate.py b/pytest_tests/testsuites/services/s3_gate/test_s3_gate.py index ff30fef..16c0b24 100644 --- a/pytest_tests/testsuites/services/s3_gate/test_s3_gate.py +++ b/pytest_tests/testsuites/services/s3_gate/test_s3_gate.py @@ -6,13 +6,14 @@ import allure import pytest from frostfs_testlib import reporter from frostfs_testlib.resources.common import ASSETS_DIR -from frostfs_testlib.s3 import AwsCliClient, Boto3ClientWrapper, S3ClientWrapper, VersioningStatus +from frostfs_testlib.s3 import AwsCliClient, S3ClientWrapper, VersioningStatus from frostfs_testlib.shell import Shell from frostfs_testlib.steps.epoch import tick_epoch from frostfs_testlib.steps.s3 import s3_helper from frostfs_testlib.storage.cluster import Cluster from frostfs_testlib.storage.dataclasses.object_size import ObjectSize from frostfs_testlib.utils.file_utils import ( + TestFile, generate_file, generate_file_with_content, get_file_content, @@ -140,14 +141,14 @@ class TestS3Gate: """ Test checks sync directory with AWS CLI utility. """ - file_path_1 = os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_1") - file_path_2 = os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_2") - key_to_path = {"test_file_1": file_path_1, "test_file_2": file_path_2} + test_file_1 = TestFile(os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_1")) + test_file_2 = TestFile(os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_2")) + key_to_path = {"test_file_1": test_file_1.path, "test_file_2": test_file_2.path} - generate_file_with_content(simple_object_size.value, file_path=file_path_1) - generate_file_with_content(simple_object_size.value, file_path=file_path_2) + generate_file_with_content(simple_object_size.value, test_file_1) + generate_file_with_content(simple_object_size.value, test_file_2) - s3_client.sync(bucket=bucket, dir_path=os.path.dirname(file_path_1)) + s3_client.sync(bucket, os.path.dirname(test_file_1)) with reporter.step("Check objects are synced"): objects = s3_client.list_objects(bucket) diff --git a/pytest_tests/testsuites/services/s3_gate/test_s3_object.py b/pytest_tests/testsuites/services/s3_gate/test_s3_object.py index 3a51f1c..104dc2a 100644 --- a/pytest_tests/testsuites/services/s3_gate/test_s3_object.py +++ b/pytest_tests/testsuites/services/s3_gate/test_s3_object.py @@ -16,7 +16,13 @@ from frostfs_testlib.steps.s3 import s3_helper from frostfs_testlib.storage.dataclasses.object_size import ObjectSize from frostfs_testlib.testing.test_control import expect_not_raises from frostfs_testlib.utils import wallet_utils -from frostfs_testlib.utils.file_utils import concat_files, generate_file, generate_file_with_content, get_file_hash +from frostfs_testlib.utils.file_utils import ( + TestFile, + concat_files, + generate_file, + generate_file_with_content, + get_file_hash, +) @pytest.mark.s3_gate @@ -237,9 +243,7 @@ class TestS3GateObject: with reporter.step("Put several versions of object into bucket"): version_id_1 = s3_client.put_object(bucket, file_name_simple) - file_name_1 = generate_file_with_content( - simple_object_size.value, file_path=file_name_simple, content=version_2_content - ) + file_name_1 = generate_file_with_content(simple_object_size.value, file_name_simple, version_2_content) version_id_2 = s3_client.put_object(bucket, file_name_1) with reporter.step("Check bucket shows all versions"): @@ -258,16 +262,16 @@ class TestS3GateObject: assert "DeleteMarker" not in delete_obj.keys(), "Delete markers should not be created" with reporter.step("Delete second version of object"): - delete_obj = s3_client.delete_object(bucket, obj_key, version_id=version_id_2) + delete_obj = s3_client.delete_object(bucket, obj_key, version_id_2) versions = s3_client.list_objects_versions(bucket) obj_versions = {version.get("VersionId") for version in versions if version.get("Key") == obj_key} assert not obj_versions, "Expected object not found" assert "DeleteMarker" not in delete_obj.keys(), "Delete markers should not be created" with reporter.step("Put new object into bucket"): - file_name_simple = generate_file(complex_object_size.value) - obj_key = os.path.basename(file_name_simple) - s3_client.put_object(bucket, file_name_simple) + file_name_complex = generate_file(complex_object_size.value) + obj_key = os.path.basename(file_name_complex) + s3_client.put_object(bucket, file_name_complex) with reporter.step("Delete last object"): delete_obj = s3_client.delete_object(bucket, obj_key) @@ -288,17 +292,11 @@ class TestS3GateObject: with reporter.step("Put several versions of object into bucket"): version_id_1 = s3_client.put_object(bucket, file_name_1) - file_name_2 = generate_file_with_content( - simple_object_size.value, file_path=file_name_1, content=version_2_content - ) + file_name_2 = generate_file_with_content(simple_object_size.value, file_name_1, version_2_content) version_id_2 = s3_client.put_object(bucket, file_name_2) - file_name_3 = generate_file_with_content( - simple_object_size.value, file_path=file_name_1, content=version_3_content - ) + file_name_3 = generate_file_with_content(simple_object_size.value, file_name_1, version_3_content) version_id_3 = s3_client.put_object(bucket, file_name_3) - file_name_4 = generate_file_with_content( - simple_object_size.value, file_path=file_name_1, content=version_4_content - ) + file_name_4 = generate_file_with_content(simple_object_size.value, file_name_1, version_4_content) version_id_4 = s3_client.put_object(bucket, file_name_4) version_ids = {version_id_1, version_id_2, version_id_3, version_id_4} @@ -758,19 +756,19 @@ class TestS3GateObject: bucket: str, simple_object_size: ObjectSize, ): - file_path_1 = os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_1") - file_path_2 = os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_2") + test_file_1 = TestFile(os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_1")) + test_file_2 = TestFile(os.path.join(os.getcwd(), ASSETS_DIR, "test_sync", "test_file_2")) object_metadata = {f"{uuid.uuid4()}": f"{uuid.uuid4()}"} - key_to_path = {"test_file_1": file_path_1, "test_file_2": file_path_2} + key_to_path = {"test_file_1": test_file_1.path, "test_file_2": test_file_2.path} - generate_file_with_content(simple_object_size.value, file_path=file_path_1) - generate_file_with_content(simple_object_size.value, file_path=file_path_2) + generate_file_with_content(simple_object_size.value, test_file_1) + generate_file_with_content(simple_object_size.value, test_file_2) s3_helper.set_bucket_versioning(s3_client, bucket, VersioningStatus.ENABLED) if sync_type == "sync": - s3_client.sync(bucket=bucket, dir_path=os.path.dirname(file_path_1), metadata=object_metadata) + s3_client.sync(bucket, os.path.dirname(test_file_1), metadata=object_metadata) elif sync_type == "cp": - s3_client.cp(bucket=bucket, dir_path=os.path.dirname(file_path_1), metadata=object_metadata) + s3_client.cp(bucket, os.path.dirname(test_file_1), metadata=object_metadata) with reporter.step("Check objects are synced"): objects = s3_client.list_objects(bucket) @@ -796,7 +794,7 @@ class TestS3GateObject: simple_object_size: ObjectSize, ): path = "/".join(["".join(choices(string.ascii_letters, k=3)) for _ in range(10)]) - file_path_1 = os.path.join(temp_directory, path, "test_file_1") + file_path_1 = TestFile(os.path.join(temp_directory, path, "test_file_1")) generate_file_with_content(simple_object_size.value, file_path=file_path_1) file_name = s3_helper.object_key_from_file_path(file_path_1) objects_list = s3_client.list_objects(bucket)