Skip to content

Commit 583e734

Browse files
committed
improvements for verify_transition() and added verify_restore()
Currently storage class is checked for this function without checking whether request is completed or not. Also fixed bug in test_read_through() Signed-off-by: Jiffin Tony Thottan <[email protected]>
1 parent f1f5538 commit 583e734

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

s3tests_boto3/functional/test_s3.py

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9661,12 +9661,38 @@ def verify_object(client, bucket, key, content=None, sc=None):
96619661
assert body == content
96629662

96639663
def verify_transition(client, bucket, key, sc=None, version=None):
9664-
if (version != None):
9665-
response = client.head_object(Bucket=bucket, Key=key, VersionId=version)
9666-
else:
9667-
response = client.head_object(Bucket=bucket, Key=key)
9664+
transition_not_completed = True
9665+
retry = 0
9666+
while (transition_not_completed and retry < 4):
9667+
if (version != None):
9668+
response = client.head_object(Bucket=bucket, Key=key, VersionId=version)
9669+
else:
9670+
response = client.head_object(Bucket=bucket, Key=key)
9671+
if response['ContentLength'] == 0:
9672+
transition_not_completed = False
9673+
time.sleep(2)
9674+
retry = retry + 1
96689675

96699676
# Iterate over the contents to find the StorageClass
9677+
assert response['StorageClass'] == sc
9678+
9679+
def verify_restore(client, bucket, key, sc=None, version=None):
9680+
restore_not_completed = True
9681+
retry = 0
9682+
while (restore_not_completed and retry < 4):
9683+
if (version != None):
9684+
response = client.head_object(Bucket=bucket, Key=key, VersionId=version)
9685+
else:
9686+
response = client.head_object(Bucket=bucket, Key=key)
9687+
# checks for temporary restore
9688+
if 'Restore' in response:
9689+
restore_complete_string = "ongoing-request=\"false\""
9690+
if restore_complete_string in response['Restore']:
9691+
restore_not_completed = False
9692+
# checks for permanent restore
9693+
elif response['ContentLength'] != 0:
9694+
restore_not_completed = False
9695+
# Iterate over the contents to find the StorageClass
96709696
if 'StorageClass' in response:
96719697
assert response['StorageClass'] == sc
96729698
else: # storage class should be STANDARD
@@ -9700,7 +9726,6 @@ def test_lifecycle_cloud_transition():
97009726
assert len(init_keys) == 4
97019727

97029728
lc_interval = get_lc_debug_interval()
9703-
97049729
# Wait for first expiration (plus fudge to handle the timer window)
97059730
time.sleep(10*lc_interval)
97069731
expire1_keys = list_bucket_storage_class(client, bucket_name)
@@ -9719,7 +9744,7 @@ def test_lifecycle_cloud_transition():
97199744

97209745
cloud_client = get_cloud_client()
97219746

9722-
time.sleep(12*lc_interval)
9747+
time.sleep(2*lc_interval)
97239748
expire1_key1_str = prefix + keys[0]
97249749
verify_object(cloud_client, target_path, expire1_key1_str, keys[0], target_sc)
97259750

@@ -9995,7 +10020,7 @@ def test_restore_object_temporary():
999510020

999610021
lc_interval = get_lc_debug_interval()
999710022
restore_interval = get_restore_debug_interval()
9998-
time.sleep(10 * lc_interval)
10023+
time.sleep(2 * lc_interval)
999910024

1000010025
# Verify object is transitioned
1000110026
verify_transition(client, bucket, key, cloud_sc)
@@ -10005,7 +10030,7 @@ def test_restore_object_temporary():
1000510030
time.sleep(5)
1000610031

1000710032
# Verify object is restored temporarily
10008-
verify_transition(client, bucket, key, cloud_sc)
10033+
verify_restore(client, bucket, key, cloud_sc)
1000910034
response = client.head_object(Bucket=bucket, Key=key)
1001010035
assert response['ContentLength'] == len(data)
1001110036
time.sleep(2 * (restore_interval + lc_interval))
@@ -10037,7 +10062,7 @@ def test_restore_object_permanent():
1003710062
client.put_bucket_lifecycle_configuration(Bucket=bucket, LifecycleConfiguration=lifecycle)
1003810063

1003910064
lc_interval = get_lc_debug_interval()
10040-
time.sleep(10 * lc_interval)
10065+
time.sleep(2 * lc_interval)
1004110066

1004210067
# Verify object is transitioned
1004310068
verify_transition(client, bucket, key, cloud_sc)
@@ -10046,7 +10071,7 @@ def test_restore_object_permanent():
1004610071
client.restore_object(Bucket=bucket, Key=key, RestoreRequest={})
1004710072
time.sleep(5)
1004810073
# Verify object is restored permanently
10049-
verify_transition(client, bucket, key, 'STANDARD')
10074+
verify_restore(client, bucket, key, 'STANDARD')
1005010075
response = client.head_object(Bucket=bucket, Key=key)
1005110076
assert response['ContentLength'] == len(data)
1005210077

@@ -10073,15 +10098,15 @@ def test_read_through():
1007310098
client.put_bucket_lifecycle_configuration(Bucket=bucket, LifecycleConfiguration=lifecycle)
1007410099

1007510100
lc_interval = get_lc_debug_interval()
10076-
restore_interval = get_read_through_days()
10077-
time.sleep(10 * lc_interval)
10101+
restore_interval = get_restore_debug_interval()
10102+
time.sleep(2 * lc_interval)
1007810103

1007910104
# Check the storage class after transitioning
1008010105
verify_transition(client, bucket, key, cloud_sc)
1008110106

1008210107
# Restore the object using read_through request
1008310108
allow_readthrough = get_allow_read_through()
10084-
if (allow_readthrough != None and allow_readthrough == "true"):
10109+
if (allow_readthrough != None and allow_readthrough):
1008510110
response = client.get_object(Bucket=bucket, Key=key)
1008610111
time.sleep(2)
1008710112
assert response['ContentLength'] == len(data)

0 commit comments

Comments
 (0)