Skip to content

Commit

Permalink
Add put object delay for some tests (#949)
Browse files Browse the repository at this point in the history
  • Loading branch information
roman-khimov authored Feb 10, 2025
2 parents fa763bb + df74b1d commit fa97a79
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 0 deletions.
2 changes: 2 additions & 0 deletions pytest_tests/tests/s3/test_s3.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging
import os
import time
from random import choice, choices

import allure
Expand Down Expand Up @@ -166,6 +167,7 @@ def test_s3_api_versioning(self, bucket, simple_object_size):

with allure.step("Put several versions of object into bucket"):
version_id_1 = s3_object.put_object_s3(self.s3_client, bucket, file_name_simple)
time.sleep(1)
generate_file_with_content(simple_object_size, file_path=file_name_simple, content=version_2_content)
version_id_2 = s3_object.put_object_s3(self.s3_client, bucket, file_name_simple)

Expand Down
6 changes: 6 additions & 0 deletions pytest_tests/tests/s3/test_s3_locking.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ def test_s3_object_locking(self, version_id, simple_object_size):

with allure.step("Put several versions of object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket, file_path)
time.sleep(1)
file_name_1 = generate_file_with_content(simple_object_size, file_path=file_path)
version_id_2 = s3_object.put_object_s3(self.s3_client, bucket, file_name_1)
time.sleep(1)
check_objects_in_bucket(self.s3_client, bucket, [file_name])
if version_id:
version_id = version_id_2
Expand All @@ -45,10 +47,12 @@ def test_s3_object_locking(self, version_id, simple_object_size):
"RetainUntilDate": date_obj,
}
s3_object.put_object_retention(self.s3_client, bucket, file_name, retention, version_id)
time.sleep(1)
assert_object_lock_mode(self.s3_client, bucket, file_name, "COMPLIANCE", date_obj, "OFF")

with allure.step(f"Put legal hold to object {file_name}"):
s3_object.put_object_legal_hold(self.s3_client, bucket, file_name, "ON", version_id)
time.sleep(1)
assert_object_lock_mode(self.s3_client, bucket, file_name, "COMPLIANCE", date_obj, "ON")

with allure.step("Fail with deleting object with legal hold and retention period"):
Expand All @@ -59,9 +63,11 @@ def test_s3_object_locking(self, version_id, simple_object_size):

with allure.step("Check retention period is no longer set on the uploaded object"):
time.sleep((retention_period + 1) * 60)
time.sleep(1)
assert_object_lock_mode(self.s3_client, bucket, file_name, "COMPLIANCE", date_obj, "ON")

with allure.step("Fail with deleting object with legal hold and retention period"):
time.sleep(1)
if version_id:
with pytest.raises(Exception):
# An error occurred (AccessDenied) when calling the DeleteObject operation (reached max retries: 0): Access Denied.
Expand Down
19 changes: 19 additions & 0 deletions pytest_tests/tests/s3/test_s3_object.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os
import string
import time
import uuid
from datetime import UTC, datetime, timedelta
from random import choices, sample
Expand Down Expand Up @@ -90,17 +91,20 @@ def test_s3_copy_version_object(self, two_buckets, simple_object_size):

with allure.step("Put object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket_1, file_name_simple)
time.sleep(1)
bucket_1_objects = [obj_key]
check_objects_in_bucket(self.s3_client, bucket_1, [obj_key])

with allure.step("Copy one object into the same bucket"):
copy_obj_path = s3_object.copy_object_s3(self.s3_client, bucket_1, obj_key)
time.sleep(1)
bucket_1_objects.append(copy_obj_path)
check_objects_in_bucket(self.s3_client, bucket_1, bucket_1_objects)

set_bucket_versioning(self.s3_client, bucket_2, s3_bucket.VersioningStatus.ENABLED)
with allure.step("Copy object from first bucket into second"):
copy_obj_path_b2 = s3_object.copy_object_s3(self.s3_client, bucket_1, obj_key, bucket_dst=bucket_2)
time.sleep(1)
check_objects_in_bucket(self.s3_client, bucket_1, expected_objects=bucket_1_objects)
check_objects_in_bucket(self.s3_client, bucket_2, expected_objects=[copy_obj_path_b2])

Expand All @@ -111,6 +115,7 @@ def test_s3_copy_version_object(self, two_buckets, simple_object_size):

with allure.step("Copy one object into the same bucket"):
with pytest.raises(Exception):
time.sleep(1)
s3_object.copy_object_s3(self.s3_client, bucket_1, obj_key)

@allure.title("Test S3: Checking copy with acl")
Expand All @@ -123,6 +128,7 @@ def test_s3_copy_acl(self, bucket, simple_object_size):

with allure.step("Put several versions of object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket, file_name_simple)
time.sleep(1)
check_objects_in_bucket(self.s3_client, bucket, [obj_key])

with allure.step("Copy object and check acl attribute"):
Expand All @@ -142,18 +148,21 @@ def test_s3_copy_metadate(self, bucket, simple_object_size):

with allure.step("Put object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket, file_path, Metadata=object_metadata)
time.sleep(1)
bucket_1_objects = [file_name]
check_objects_in_bucket(self.s3_client, bucket, bucket_1_objects)

with allure.step("Copy one object"):
copy_obj_path = s3_object.copy_object_s3(self.s3_client, bucket, file_name)
time.sleep(1)
bucket_1_objects.append(copy_obj_path)
check_objects_in_bucket(self.s3_client, bucket, bucket_1_objects)
obj_head = s3_object.head_object_s3(self.s3_client, bucket, copy_obj_path)
assert obj_head.get("Metadata") == object_metadata, f"Metadata must be {object_metadata}"

with allure.step("Copy one object with metadata"):
copy_obj_path = s3_object.copy_object_s3(self.s3_client, bucket, file_name, metadata_directive="COPY")
time.sleep(1)
bucket_1_objects.append(copy_obj_path)
obj_head = s3_object.head_object_s3(self.s3_client, bucket, copy_obj_path)
assert obj_head.get("Metadata") == object_metadata, f"Metadata must be {object_metadata}"
Expand All @@ -167,6 +176,7 @@ def test_s3_copy_metadate(self, bucket, simple_object_size):
metadata_directive="REPLACE",
metadata=object_metadata_1,
)
time.sleep(1)
bucket_1_objects.append(copy_obj_path)
obj_head = s3_object.head_object_s3(self.s3_client, bucket, copy_obj_path)
assert obj_head.get("Metadata") == object_metadata_1, f"Metadata must be {object_metadata_1}"
Expand All @@ -182,12 +192,15 @@ def test_s3_copy_tagging(self, bucket, simple_object_size):

with allure.step("Put several versions of object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket, file_path)
time.sleep(1)
s3_object.put_object_tagging(self.s3_client, bucket, file_name_simple, tags=object_tagging)
time.sleep(1)
bucket_1_objects = [file_name_simple]
check_objects_in_bucket(self.s3_client, bucket, bucket_1_objects)

with allure.step("Copy one object without tag"):
copy_obj_path = s3_object.copy_object_s3(self.s3_client, bucket, file_name_simple)
time.sleep(1)
got_tags = s3_object.get_object_tagging(self.s3_client, bucket, copy_obj_path)
assert got_tags, f"Expected tags, got {got_tags}"
expected_tags = [{"Key": key, "Value": value} for key, value in object_tagging]
Expand All @@ -198,6 +211,7 @@ def test_s3_copy_tagging(self, bucket, simple_object_size):
copy_obj_path_1 = s3_object.copy_object_s3(
self.s3_client, bucket, file_name_simple, tagging_directive="COPY"
)
time.sleep(1)
got_tags = s3_object.get_object_tagging(self.s3_client, bucket, copy_obj_path_1)
assert got_tags, f"Expected tags, got {got_tags}"
expected_tags = [{"Key": key, "Value": value} for key, value in object_tagging]
Expand All @@ -215,6 +229,7 @@ def test_s3_copy_tagging(self, bucket, simple_object_size):
tagging_directive="REPLACE",
tagging=new_tag,
)
time.sleep(1)
got_tags = s3_object.get_object_tagging(self.s3_client, bucket, copy_obj_path)
assert got_tags, f"Expected tags, got {got_tags}"
expected_tags = [{"Key": tag_key, "Value": str(tag_value)}]
Expand Down Expand Up @@ -498,6 +513,7 @@ def test_s3_put_object(self, bucket, complex_object_size, simple_object_size):

with allure.step("Put first object into bucket"):
s3_object.put_object_s3(self.s3_client, bucket, file_path_1, Metadata=object_1_metadata, Tagging=tag_1)
time.sleep(1)
obj_head = s3_object.head_object_s3(self.s3_client, bucket, file_name)
assert obj_head.get("Metadata") == object_1_metadata, "Matadata must be the same"
got_tags = s3_object.get_object_tagging(self.s3_client, bucket, file_name)
Expand All @@ -507,6 +523,7 @@ def test_s3_put_object(self, bucket, complex_object_size, simple_object_size):
with allure.step("Rewrite file into bucket"):
file_path_2 = generate_file_with_content(simple_object_size, file_path=file_path_1)
s3_object.put_object_s3(self.s3_client, bucket, file_path_2, Metadata=object_2_metadata, Tagging=tag_2)
time.sleep(1)
obj_head = s3_object.head_object_s3(self.s3_client, bucket, file_name)
assert obj_head.get("Metadata") == object_2_metadata, "Matadata must be the same"
got_tags_1 = s3_object.get_object_tagging(self.s3_client, bucket, file_name)
Expand All @@ -527,6 +544,7 @@ def test_s3_put_object(self, bucket, complex_object_size, simple_object_size):
version_id_1 = s3_object.put_object_s3(
self.s3_client, bucket, file_path_3, Metadata=object_3_metadata, Tagging=tag_3
)
time.sleep(1)
obj_head_3 = s3_object.head_object_s3(self.s3_client, bucket, file_name_3)
assert obj_head_3.get("Metadata") == object_3_metadata, "Matadata must be the same"
got_tags_3 = s3_object.get_object_tagging(self.s3_client, bucket, file_name_3)
Expand All @@ -536,6 +554,7 @@ def test_s3_put_object(self, bucket, complex_object_size, simple_object_size):
with allure.step("Put new version of file into bucket"):
file_path_4 = generate_file_with_content(simple_object_size, file_path=file_path_3)
version_id_2 = s3_object.put_object_s3(self.s3_client, bucket, file_path_4)
time.sleep(1)
versions = s3_object.list_objects_versions_s3(self.s3_client, bucket)
obj_versions = {version.get("VersionId") for version in versions if version.get("Key") == file_name_3}
assert obj_versions == {
Expand Down
8 changes: 8 additions & 0 deletions pytest_tests/tests/s3/test_s3_tagging.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from random import choice
from string import ascii_letters
from typing import Tuple
import time

import allure
import pytest
Expand Down Expand Up @@ -38,22 +39,26 @@ def test_s3_object_tagging(self, bucket, simple_object_size):
with allure.step("Put with 3 tags object into bucket"):
tag_1 = "Tag1=Value1"
s3_object.put_object_s3(self.s3_client, bucket, file_path, Tagging=tag_1)
time.sleep(1)
got_tags = s3_object.get_object_tagging(self.s3_client, bucket, file_name)
assert got_tags, f"Expected tags, got {got_tags}"
assert got_tags == [{"Key": "Tag1", "Value": "Value1"}], "Tags must be the same"

with allure.step("Put 10 new tags for object"):
tags_2 = self.create_tags(10)
s3_object.put_object_tagging(self.s3_client, bucket, file_name, tags=tags_2)
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, file_name, tags_2, [("Tag1", "Value1")])

with allure.step("Put 10 extra new tags for object"):
tags_3 = self.create_tags(10)
s3_object.put_object_tagging(self.s3_client, bucket, file_name, tags=tags_3)
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, file_name, tags_3, tags_2)

with allure.step("Copy one object with tag"):
copy_obj_path_1 = s3_object.copy_object_s3(self.s3_client, bucket, file_name, tagging_directive="COPY")
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, copy_obj_path_1, tags_3, tags_2)

with allure.step("Put 11 new tags to object and expect an error"):
Expand All @@ -65,15 +70,18 @@ def test_s3_object_tagging(self, bucket, simple_object_size):
with allure.step("Put empty tag"):
tags_5 = []
s3_object.put_object_tagging(self.s3_client, bucket, file_name, tags=tags_5)
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, file_name, [])

with allure.step("Put 10 object tags"):
tags_6 = self.create_tags(10)
s3_object.put_object_tagging(self.s3_client, bucket, file_name, tags=tags_6)
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, file_name, tags_6)

with allure.step("Delete tags by delete-object-tagging"):
s3_object.delete_object_tagging(self.s3_client, bucket, file_name)
time.sleep(1)
check_tags_by_object(self.s3_client, bucket, file_name, [])

@allure.title("Test S3: bucket tagging")
Expand Down

0 comments on commit fa97a79

Please sign in to comment.