{ "$schema": "../schema/vector.schema.json", "vectors": [ { "id": "lifecycle-config-0001", "group": "lifecycle-config", "kind": "api", "title": "DeleteBucketLifecycle returns 204 with or without a configuration and removes it", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L8462", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 404, "error": "NoSuchLifecycleConfiguration" } } }, { "$operation": { "name": "DeleteBucketLifecycle", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 204 } } }, { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "test1/", "Expiration": { "Days": 31 }, "Prefix": "test1/", "Status": "Enabled" }, { "ID": "test2/", "Expiration": { "Days": 120 }, "Prefix": "test2/", "Status": "Enabled" } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" } } }, { "$operation": { "name": "DeleteBucketLifecycle", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 204 } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 404, "error": "NoSuchLifecycleConfiguration" } } }, { "$operation": { "name": "DeleteBucketLifecycle", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 204 } } } ] }, { "id": "lifecycle-config-0002", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle expiration rule with Days of 0 is rejected with InvalidArgument", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9111", "prerequisites": [ { "$bucket": { "handle": "b1" } }, { "$object": { "handle": "o1", "bucket": "b1", "key": "days0/foo", "body": "days0/foo" } }, { "$object": { "handle": "o2", "bucket": "b1", "key": "days0/bar", "body": "days0/bar" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "Expiration": { "Days": 0 }, "ID": "rule1", "Prefix": "days0/", "Status": "Enabled" } ] } }, "expect": { "error": "InvalidArgument" } } } ] }, { "id": "lifecycle-config-0003", "group": "lifecycle-config", "kind": "api", "title": "No x-amz-expiration header when object tags do not match an And tag-filtered rule", "tags": [ "tier-3", "lifecycle-config", "tagging", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9248", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "Filter": { "And": { "Tags": [ { "Key": "key1", "Value": "tag1" }, { "Key": "key5", "Value": "tag6" } ] } }, "Status": "Enabled", "Expiration": { "Days": 1 }, "ID": "rule1" } ] } } } }, { "$operation": { "name": "PutObject", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1", "Body": "obj_key1_body" } } }, { "$operation": { "name": "PutObjectTagging", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1", "Tagging": { "TagSet": [ { "Key": "key1", "Value": "tag1" }, { "Key": "key5", "Value": "tag5" } ] } } } }, { "$operation": { "name": "HeadObject", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1" }, "expect": { "status": 200, "headers": { "x-amz-expiration": { "$absent": true } } } } } ] }, { "id": "lifecycle-config-0004", "group": "lifecycle-config", "kind": "api", "title": "HeadObject response carries x-amz-expiration header for a matching lifecycle rule", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9174", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 1 }, "Prefix": "days1/", "Status": "Enabled" } ] } }, "expect": { "status": 200 } } }, { "$operation": { "name": "PutObject", "params": { "Bucket": "${res.b1.name}", "Key": "days1/foo", "Body": "bar" }, "expect": { "status": 200 } } }, { "$operation": { "name": "HeadObject", "params": { "Bucket": "${res.b1.name}", "Key": "days1/foo" }, "expect": { "status": 200, "headers": { "x-amz-expiration": { "$matches": "expiry-date=\".+\", rule-id=\"rule1\"" } } } } } ] }, { "id": "lifecycle-config-0005", "group": "lifecycle-config", "kind": "api", "title": "PutObject response carries x-amz-expiration header for a matching lifecycle rule", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9162", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 1 }, "Prefix": "days1/", "Status": "Enabled" } ] } }, "expect": { "status": 200 } } }, { "$operation": { "name": "PutObject", "params": { "Bucket": "${res.b1.name}", "Key": "days1/foo", "Body": "bar" }, "expect": { "status": 200, "headers": { "x-amz-expiration": { "$matches": "expiry-date=\".+\", rule-id=\"rule1\"" } } } } } ] }, { "id": "lifecycle-config-0006", "group": "lifecycle-config", "kind": "api", "title": "x-amz-expiration header follows tag-filtered lifecycle rule matches on HeadObject", "tags": [ "tier-3", "lifecycle-config", "tagging", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9192", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "Filter": { "Tag": { "Key": "key1", "Value": "tag1" } }, "Status": "Enabled", "Expiration": { "Days": 1 }, "ID": "rule1" } ] } } } }, { "$operation": { "name": "PutObject", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1", "Body": "obj_key1_body" } } }, { "$operation": { "name": "PutObjectTagging", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1", "Tagging": { "TagSet": [ { "Key": "key1", "Value": "tag1" }, { "Key": "key5", "Value": "tag5" } ] } } } }, { "$operation": { "name": "HeadObject", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1" }, "expect": { "status": 200, "headers": { "x-amz-expiration": { "$matches": "expiry-date=\".+\", rule-id=\"rule1\"" } } } } }, { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "Filter": { "Tag": { "Key": "key2", "Value": "tag1" } }, "Status": "Enabled", "Expiration": { "Days": 1 }, "ID": "rule1" } ] } } } }, { "$operation": { "name": "HeadObject", "params": { "Bucket": "${res.b1.name}", "Key": "obj_key1" }, "expect": { "status": 200, "headers": { "x-amz-expiration": { "$absent": true } } } } } ] }, { "id": "lifecycle-config-0007", "group": "lifecycle-config", "kind": "api", "title": "GetBucketLifecycleConfiguration returns the rules that were put", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L8451", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "test1/", "Expiration": { "Days": 31 }, "Prefix": "test1/", "Status": "Enabled" }, { "ID": "test2/", "Expiration": { "Days": 120 }, "Prefix": "test2/", "Status": "Enabled" } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "ID": "test1/", "Expiration": { "Days": 31 }, "Prefix": "test1/", "Status": "Enabled" }, { "ID": "test2/", "Expiration": { "Days": 120 }, "Prefix": "test2/", "Status": "Enabled" } ] } } } } ] }, { "id": "lifecycle-config-0008", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rules stored without an ID are returned with a generated ID", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L8494", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "Expiration": { "Days": 31 }, "Prefix": "test1/", "Status": "Enabled" }, { "Expiration": { "Days": 120 }, "Prefix": "test2/", "Status": "Enabled" } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "Expiration": { "Days": 31 }, "Prefix": "test1/", "Status": "Enabled", "ID": { "$exists": true } }, { "Expiration": { "Days": 120 }, "Prefix": "test2/", "Status": "Enabled", "ID": { "$exists": true } } ] } } } } ] }, { "id": "lifecycle-config-0009", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule ID longer than 255 characters is rejected with InvalidArgument", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9012", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "Expiration": { "Days": 2 }, "Prefix": "test1/", "Status": "Enabled" } ] } }, "expect": { "status": 400, "error": "InvalidArgument" } } } ] }, { "id": "lifecycle-config-0010", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with invalid Status casing or value is rejected with MalformedXML", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9037", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 2 }, "Prefix": "test1/", "Status": "enabled" } ] } }, "expect": { "status": 400, "error": "MalformedXML" } } }, { "$operation": { "name": "PutBucketLifecycle", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 2 }, "Prefix": "test1/", "Status": "disabled" } ] } }, "expect": { "status": 400, "error": "MalformedXML" } } }, { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 2 }, "Prefix": "test1/", "Status": "invalid" } ] } }, "expect": { "status": 400, "error": "MalformedXML" } } } ] }, { "id": "lifecycle-config-0011", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle configuration with duplicate rule IDs is rejected with InvalidArgument", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9024", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 1 }, "Prefix": "test1/", "Status": "Enabled" }, { "ID": "rule1", "Expiration": { "Days": 2 }, "Prefix": "test2/", "Status": "Enabled" } ] } }, "expect": { "status": 400, "error": "InvalidArgument" } } } ] }, { "id": "lifecycle-config-0012", "group": "lifecycle-config", "kind": "api", "title": "PutBucketLifecycleConfiguration with two prefix rules succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L8441", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Days": 1 }, "Prefix": "test1/", "Status": "Enabled" }, { "ID": "rule2", "Expiration": { "Days": 2 }, "Prefix": "test2/", "Status": "Disabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0013", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle expiration rule with an absolute Date succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9065", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Date": "2017-09-27T00:00:00Z" }, "Prefix": "test1/", "Status": "Enabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0014", "group": "lifecycle-config", "kind": "api", "title": "PutBucketLifecycleConfiguration with ExpiredObjectDeleteMarker rule succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9331", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "ExpiredObjectDeleteMarker": true }, "Prefix": "test1/", "Status": "Enabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0015", "group": "lifecycle-config", "kind": "api", "title": "PutBucketLifecycleConfiguration with an empty Filter succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9349", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "ExpiredObjectDeleteMarker": true }, "Filter": {}, "Status": "Enabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0016", "group": "lifecycle-config", "kind": "api", "title": "PutBucketLifecycleConfiguration with a Filter Prefix succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9340", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "ExpiredObjectDeleteMarker": true }, "Filter": { "Prefix": "foo" }, "Status": "Enabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0017", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle expiration Date not in ISO 8601 extended format is rejected", "tags": [ "tier-3", "lifecycle-config", "errors", "wire-headers", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9075", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$http": { "method": "PUT", "path": "/${res.b1.name}", "query": { "lifecycle": "" }, "headers": { "content-md5": "OQ1AgGgxCsub+Ba834kCMw==", "content-type": "application/xml" }, "body": "rule1test1/Enabled20200101", "expect": { "status": 400 } } } ] }, { "id": "lifecycle-config-0018", "group": "lifecycle-config", "kind": "api", "title": "PutBucketLifecycleConfiguration with NoncurrentVersionExpiration rules succeeds", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9292", "prerequisites": [ { "$bucket": { "handle": "b1" } }, { "$object": { "handle": "o1", "bucket": "b1", "key": "past/foo", "body": "past/foo" } }, { "$object": { "handle": "o2", "bucket": "b1", "key": "future/bar", "body": "future/bar" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "NoncurrentVersionExpiration": { "NoncurrentDays": 2 }, "Prefix": "past/", "Status": "Enabled" }, { "ID": "rule2", "NoncurrentVersionExpiration": { "NoncurrentDays": 3 }, "Prefix": "future/", "Status": "Enabled" } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0019", "group": "lifecycle-config", "kind": "api", "title": "Set lifecycle configuration with AbortIncompleteMultipartUpload rules", "tags": [ "tier-3", "lifecycle-config", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9427", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Prefix": "test1/", "Status": "Enabled", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 2 } }, { "ID": "rule2", "Prefix": "test2/", "Status": "Disabled", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 3 } } ] } }, "expect": { "status": 200 } } } ] }, { "id": "lifecycle-config-0020", "group": "lifecycle-config", "kind": "api", "title": "Set lifecycle transition with a malformed date is rejected with 400", "tags": [ "tier-3", "lifecycle-config", "errors", "source:ceph-s3-tests" ], "source": "https://github.com/ceph/s3-tests/blob/5522d1c351f75bc00ae0f64f742f3f095f5939d9/s3tests/functional/test_s3.py#L9476", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule1", "Expiration": { "Date": "2023-09-27" }, "Transitions": [ { "Date": "20220927", "StorageClass": "GLACIER" } ], "Prefix": "test1/", "Status": "Enabled" } ] } }, "expect": { "status": 400 } } } ] }, { "id": "lifecycle-config-0021", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle configuration: put, replace with multiple rules, disabled rules, and delete", "tags": [ "tier-3", "lifecycle-config", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/basic/10.py#L16", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "expire-old-logs", "Status": "Enabled", "Filter": { "Prefix": "logs/" }, "Expiration": { "Days": 30 } } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "ID": "expire-old-logs", "Status": "Enabled" } ] } } } }, { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "expire-temp-files", "Status": "Enabled", "Filter": { "Prefix": "temp/" }, "Expiration": { "Days": 7 } }, { "ID": "expire-old-data", "Status": "Enabled", "Filter": { "Prefix": "data/" }, "Expiration": { "Days": 365 } }, { "ID": "expire-archived", "Status": "Enabled", "Filter": { "Prefix": "archive/" }, "Expiration": { "Days": 180 } } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "ID": "expire-temp-files" }, { "ID": "expire-old-data" }, { "ID": "expire-archived" } ] } } } }, { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "disabled-rule", "Status": "Disabled", "Filter": { "Prefix": "disabled/" }, "Expiration": { "Days": 1 } }, { "ID": "enabled-rule", "Status": "Enabled", "Filter": { "Prefix": "enabled/" }, "Expiration": { "Days": 1 } } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "ID": "disabled-rule", "Status": "Disabled" }, { "ID": "enabled-rule", "Status": "Enabled" } ] } } } }, { "$operation": { "name": "DeleteBucketLifecycle", "params": { "Bucket": "${res.b1.name}" } } } ] }, { "id": "lifecycle-config-0022", "group": "lifecycle-config", "kind": "api", "title": "Basic lifecycle configuration with prefix filter, expiration and transition round-trips", "tags": [ "tier-3", "lifecycle-config", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L16", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "basic-rule", "Status": "Enabled", "Filter": { "Prefix": "logs/" }, "Expiration": { "Days": 30 }, "Transitions": [ { "Days": 7, "StorageClass": "GLACIER" } ] } ] } } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "response": { "Rules": [ { "ID": "basic-rule" } ] } } } } ] }, { "id": "lifecycle-config-0023", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with multiple correctly ordered storage-class transitions is accepted", "tags": [ "tier-3", "lifecycle-config", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L61", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "multi-transition", "Status": "Enabled", "Filter": {}, "Transitions": [ { "Days": 30, "StorageClass": "STANDARD_IA" }, { "Days": 60, "StorageClass": "GLACIER" }, { "Days": 180, "StorageClass": "DEEP_ARCHIVE" } ] } ] } } } } ] }, { "id": "lifecycle-config-0024", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with out-of-order transition days is rejected", "tags": [ "tier-3", "lifecycle-config", "errors", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L88", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "invalid-order", "Status": "Enabled", "Filter": {}, "Transitions": [ { "Days": 60, "StorageClass": "GLACIER" }, { "Days": 30, "StorageClass": "STANDARD_IA" } ] } ] } }, "expect": { "status": 400 } } } ] }, { "id": "lifecycle-config-0025", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with And filter combining prefix and tags is accepted", "tags": [ "tier-3", "lifecycle-config", "tagging", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L152", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "tag-based", "Status": "Enabled", "Filter": { "And": { "Prefix": "tagged/", "Tags": [ { "Key": "Environment", "Value": "Production" }, { "Key": "Archive", "Value": "true" } ] } }, "Expiration": { "Days": 90 } } ] } } } } ] }, { "id": "lifecycle-config-0026", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with AbortIncompleteMultipartUpload is accepted", "tags": [ "tier-3", "lifecycle-config", "multipart", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L183", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "abort-incomplete", "Status": "Enabled", "Filter": {}, "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } } ] } } } } ] }, { "id": "lifecycle-config-0027", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle rule with date-based expiration is accepted", "description": "The source computed now+30 days; a fixed far-future midnight-UTC date preserves the assertion (a Date expiration is accepted) without time dependence.", "tags": [ "tier-3", "lifecycle-config", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L208", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "date-expiration", "Status": "Enabled", "Filter": { "Prefix": "expire/" }, "Expiration": { "Date": "2099-01-01T00:00:00Z" } } ] } } } } ] }, { "id": "lifecycle-config-0028", "group": "lifecycle-config", "kind": "api", "title": "Lifecycle configuration with 100 rules is accepted", "tags": [ "tier-3", "lifecycle-config", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L232", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "rule-0000", "Status": "Enabled", "Filter": { "Prefix": "prefix0000/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0001", "Status": "Enabled", "Filter": { "Prefix": "prefix0001/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0002", "Status": "Enabled", "Filter": { "Prefix": "prefix0002/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0003", "Status": "Enabled", "Filter": { "Prefix": "prefix0003/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0004", "Status": "Enabled", "Filter": { "Prefix": "prefix0004/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0005", "Status": "Enabled", "Filter": { "Prefix": "prefix0005/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0006", "Status": "Enabled", "Filter": { "Prefix": "prefix0006/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0007", "Status": "Enabled", "Filter": { "Prefix": "prefix0007/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0008", "Status": "Enabled", "Filter": { "Prefix": "prefix0008/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0009", "Status": "Enabled", "Filter": { "Prefix": "prefix0009/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0010", "Status": "Enabled", "Filter": { "Prefix": "prefix0010/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0011", "Status": "Enabled", "Filter": { "Prefix": "prefix0011/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0012", "Status": "Enabled", "Filter": { "Prefix": "prefix0012/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0013", "Status": "Enabled", "Filter": { "Prefix": "prefix0013/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0014", "Status": "Enabled", "Filter": { "Prefix": "prefix0014/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0015", "Status": "Enabled", "Filter": { "Prefix": "prefix0015/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0016", "Status": "Enabled", "Filter": { "Prefix": "prefix0016/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0017", "Status": "Enabled", "Filter": { "Prefix": "prefix0017/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0018", "Status": "Enabled", "Filter": { "Prefix": "prefix0018/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0019", "Status": "Enabled", "Filter": { "Prefix": "prefix0019/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0020", "Status": "Enabled", "Filter": { "Prefix": "prefix0020/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0021", "Status": "Enabled", "Filter": { "Prefix": "prefix0021/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0022", "Status": "Enabled", "Filter": { "Prefix": "prefix0022/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0023", "Status": "Enabled", "Filter": { "Prefix": "prefix0023/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0024", "Status": "Enabled", "Filter": { "Prefix": "prefix0024/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0025", "Status": "Enabled", "Filter": { "Prefix": "prefix0025/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0026", "Status": "Enabled", "Filter": { "Prefix": "prefix0026/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0027", "Status": "Enabled", "Filter": { "Prefix": "prefix0027/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0028", "Status": "Enabled", "Filter": { "Prefix": "prefix0028/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0029", "Status": "Enabled", "Filter": { "Prefix": "prefix0029/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0030", "Status": "Enabled", "Filter": { "Prefix": "prefix0030/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0031", "Status": "Enabled", "Filter": { "Prefix": "prefix0031/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0032", "Status": "Enabled", "Filter": { "Prefix": "prefix0032/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0033", "Status": "Enabled", "Filter": { "Prefix": "prefix0033/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0034", "Status": "Enabled", "Filter": { "Prefix": "prefix0034/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0035", "Status": "Enabled", "Filter": { "Prefix": "prefix0035/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0036", "Status": "Enabled", "Filter": { "Prefix": "prefix0036/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0037", "Status": "Enabled", "Filter": { "Prefix": "prefix0037/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0038", "Status": "Enabled", "Filter": { "Prefix": "prefix0038/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0039", "Status": "Enabled", "Filter": { "Prefix": "prefix0039/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0040", "Status": "Enabled", "Filter": { "Prefix": "prefix0040/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0041", "Status": "Enabled", "Filter": { "Prefix": "prefix0041/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0042", "Status": "Enabled", "Filter": { "Prefix": "prefix0042/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0043", "Status": "Enabled", "Filter": { "Prefix": "prefix0043/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0044", "Status": "Enabled", "Filter": { "Prefix": "prefix0044/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0045", "Status": "Enabled", "Filter": { "Prefix": "prefix0045/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0046", "Status": "Enabled", "Filter": { "Prefix": "prefix0046/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0047", "Status": "Enabled", "Filter": { "Prefix": "prefix0047/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0048", "Status": "Enabled", "Filter": { "Prefix": "prefix0048/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0049", "Status": "Enabled", "Filter": { "Prefix": "prefix0049/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0050", "Status": "Enabled", "Filter": { "Prefix": "prefix0050/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0051", "Status": "Enabled", "Filter": { "Prefix": "prefix0051/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0052", "Status": "Enabled", "Filter": { "Prefix": "prefix0052/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0053", "Status": "Enabled", "Filter": { "Prefix": "prefix0053/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0054", "Status": "Enabled", "Filter": { "Prefix": "prefix0054/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0055", "Status": "Enabled", "Filter": { "Prefix": "prefix0055/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0056", "Status": "Enabled", "Filter": { "Prefix": "prefix0056/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0057", "Status": "Enabled", "Filter": { "Prefix": "prefix0057/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0058", "Status": "Enabled", "Filter": { "Prefix": "prefix0058/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0059", "Status": "Enabled", "Filter": { "Prefix": "prefix0059/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0060", "Status": "Enabled", "Filter": { "Prefix": "prefix0060/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0061", "Status": "Enabled", "Filter": { "Prefix": "prefix0061/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0062", "Status": "Enabled", "Filter": { "Prefix": "prefix0062/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0063", "Status": "Enabled", "Filter": { "Prefix": "prefix0063/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0064", "Status": "Enabled", "Filter": { "Prefix": "prefix0064/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0065", "Status": "Enabled", "Filter": { "Prefix": "prefix0065/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0066", "Status": "Enabled", "Filter": { "Prefix": "prefix0066/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0067", "Status": "Enabled", "Filter": { "Prefix": "prefix0067/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0068", "Status": "Enabled", "Filter": { "Prefix": "prefix0068/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0069", "Status": "Enabled", "Filter": { "Prefix": "prefix0069/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0070", "Status": "Enabled", "Filter": { "Prefix": "prefix0070/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0071", "Status": "Enabled", "Filter": { "Prefix": "prefix0071/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0072", "Status": "Enabled", "Filter": { "Prefix": "prefix0072/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0073", "Status": "Enabled", "Filter": { "Prefix": "prefix0073/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0074", "Status": "Enabled", "Filter": { "Prefix": "prefix0074/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0075", "Status": "Enabled", "Filter": { "Prefix": "prefix0075/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0076", "Status": "Enabled", "Filter": { "Prefix": "prefix0076/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0077", "Status": "Enabled", "Filter": { "Prefix": "prefix0077/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0078", "Status": "Enabled", "Filter": { "Prefix": "prefix0078/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0079", "Status": "Enabled", "Filter": { "Prefix": "prefix0079/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0080", "Status": "Enabled", "Filter": { "Prefix": "prefix0080/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0081", "Status": "Enabled", "Filter": { "Prefix": "prefix0081/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0082", "Status": "Enabled", "Filter": { "Prefix": "prefix0082/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0083", "Status": "Enabled", "Filter": { "Prefix": "prefix0083/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0084", "Status": "Enabled", "Filter": { "Prefix": "prefix0084/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0085", "Status": "Enabled", "Filter": { "Prefix": "prefix0085/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0086", "Status": "Enabled", "Filter": { "Prefix": "prefix0086/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0087", "Status": "Enabled", "Filter": { "Prefix": "prefix0087/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0088", "Status": "Enabled", "Filter": { "Prefix": "prefix0088/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0089", "Status": "Enabled", "Filter": { "Prefix": "prefix0089/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0090", "Status": "Enabled", "Filter": { "Prefix": "prefix0090/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0091", "Status": "Enabled", "Filter": { "Prefix": "prefix0091/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0092", "Status": "Enabled", "Filter": { "Prefix": "prefix0092/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0093", "Status": "Enabled", "Filter": { "Prefix": "prefix0093/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0094", "Status": "Enabled", "Filter": { "Prefix": "prefix0094/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0095", "Status": "Enabled", "Filter": { "Prefix": "prefix0095/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0096", "Status": "Enabled", "Filter": { "Prefix": "prefix0096/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0097", "Status": "Enabled", "Filter": { "Prefix": "prefix0097/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0098", "Status": "Enabled", "Filter": { "Prefix": "prefix0098/" }, "Expiration": { "Days": 365 } }, { "ID": "rule-0099", "Status": "Enabled", "Filter": { "Prefix": "prefix0099/" }, "Expiration": { "Days": 365 } } ] } } } } ] }, { "id": "lifecycle-config-0029", "group": "lifecycle-config", "kind": "api", "title": "DeleteBucketLifecycle removes configuration; subsequent get returns NoSuchLifecycleConfiguration", "tags": [ "tier-3", "lifecycle-config", "errors", "source:msst-s3" ], "source": "https://github.com/linux-kdevops/msst-s3/blob/b84a323cca5ee862e87677043f672f156c46b448/tests/lifecycle/test_lifecycle_transitions.py#L256", "prerequisites": [ { "$bucket": { "handle": "b1" } } ], "steps": [ { "$operation": { "name": "PutBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}", "LifecycleConfiguration": { "Rules": [ { "ID": "to-delete", "Status": "Enabled", "Filter": { "Prefix": "data/" }, "Expiration": { "Days": 30 } } ] } } } }, { "$operation": { "name": "DeleteBucketLifecycle", "params": { "Bucket": "${res.b1.name}" } } }, { "$operation": { "name": "GetBucketLifecycleConfiguration", "params": { "Bucket": "${res.b1.name}" }, "expect": { "status": 404, "error": "NoSuchLifecycleConfiguration" } } } ] } ] }