10000 fix S3 enabling versioning with a ObjectLockEnabledForBucket bucket (… · localstack/localstack@a33c120 · GitHub
[go: up one dir, main page]

Skip to content

Commit a33c120

Browse files
authored
fix S3 enabling versioning with a ObjectLockEnabledForBucket bucket (#11768)
1 parent 241bfbb commit a33c120

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

localstack-core/localstack/services/s3/provider.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2680,14 +2680,14 @@ def put_bucket_versioning(
26802680
message="The Versioning element must be specified",
26812681
)
26822682

2683-
if s3_bucket.object_lock_enabled:
2683+
if versioning_status not in ("Enabled", "Suspended"):
2684+
raise MalformedXML()
2685+
2686+
if s3_bucket.object_lock_enabled and versioning_status == "Suspended":
26842687
raise InvalidBucketState(
26852688
"An Object Lock configuration is present on this bucket, so the versioning state cannot be changed."
26862689
)
26872690

2688-
if versioning_status not in ("Enabled", "Suspended"):
2689-
raise MalformedXML()
2690-
26912691
if not s3_bucket.versioning_status:
26922692
s3_bucket.objects = VersionedKeyStore.from_key_store(s3_bucket.objects)
26932693

tests/aws/services/s3/test_s3_api.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,16 +1572,24 @@ def test_get_object_lock_configuration_exc(self, s3_bucket, aws_client, snapshot
15721572
reason="Moto implementation does not raise exceptions",
15731573
)
15741574
def test_disable_versioning_on_locked_bucket(self, s3_create_bucket, aws_client, snapshot):
1575-
s3_bucket = s3_create_bucket(ObjectLockEnabledForBucket=True)
1575+
bucket_name = s3_create_bucket(ObjectLockEnabledForBucket=True)
15761576
with pytest.raises(ClientError) as e:
15771577
aws_client.s3.put_bucket_versioning(
1578-
Bucket=s3_bucket,
1578+
Bucket=bucket_name,
15791579
VersioningConfiguration={
15801580
"Status": "Suspended",
15811581
},
15821582
)
15831583
snapshot.match("disable-versioning-on-locked-bucket", e.value.response)
15841584

1585+
put_bucket_versioning_again = aws_client.s3.put_bucket_versioning(
1586+
Bucket=bucket_name,
1587+
VersioningConfiguration={
1588+
"Status": "Enabled",
1589+
},
1590+
)
1591+
snapshot.match("enable-versioning-again-on-locked-bucket", put_bucket_versioning_again)
1592+
15851593
@markers.aws.validated
15861594
def test_delete_object_with_no_locking(self, s3_bucket, aws_client, snapshot):
15871595
key = "test-delete-no-lock"

tests/aws/services/s3/test_s3_api.snapshot.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2407,7 +2407,7 @@
24072407
}
24082408
},
24092409
"tests/aws/services/s3/test_s3_api.py::TestS3ObjectLock::test_disable_versioning_on_locked_bucket": {
2410-
"recorded-date": "09-08-2023, 03:49:49",
2410+
"recorded-date": "31-10-2024, 12:29:03",
24112411
"recorded-content": {
24122412
"disable-versioning-on-locked-bucket": {
24132413
"Error": {
@@ -2418,6 +2418,12 @@
24182418
"HTTPHeaders": {},
24192419
"HTTPStatusCode": 409
24202420
}
2421+
},
2422+
"enable-versioning-again-on-locked-bucket": {
2423+
"ResponseMetadata": {
2424+
"HTTPHeaders": {},
2425+
"HTTPStatusCode": 200
2426+
}
24212427
}
24222428
}
24232429
},

tests/aws/services/s3/test_s3_api.validation.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105
"last_validated_date": "2023-09-08T16:29:03+00:00"
106106
},
107107
"tests/aws/services/s3/test_s3_api.py::TestS3ObjectLock::test_disable_versioning_on_locked_bucket": {
108-
"last_validated_date": "2023-08-09T01:49:49+00:00"
108+
"last_validated_date": "2024-10-31T12:29:03+00:00"
109109
},
110110
"tests/aws/services/s3/test_s3_api.py::TestS3ObjectLock::test_get_object_lock_configuration_exc": {
111111
"last_validated_date": "2023-08-08T23:41:42+00:00"

0 commit comments

Comments
 (0)
0