[#254] Use TestFiles which automatically deletes itself #254
3 changed files with 34 additions and 36 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue