diff --git a/README.md b/README.md
index f724c0a..f50bf7d 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ There are also a few live tests that are just to see if you can actually make a
| `vectors.json` | Digests and signatures |
| `live.json` | Probes against a live service |
+The Azure cases authorize with Microsoft Entra ID only. The suite does not aim to test shared access signatures (SAS) or Shared Key, and has no cases or vectors for them.
+
[REFERENCE.md](REFERENCE.md) describes the adapter protocol.
## Example test of `borink-object-storage`
diff --git a/REFERENCE.md b/REFERENCE.md
index 094c194..132d437 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -27,12 +27,18 @@ Use `endpoint` with dummy credentials, and `endpoint.proxy_url` as the HTTP prox
- `refused`: the client refused it before sending.
- `unsupported`: the client cannot make it. Naming a `parameter` declines that parameter, which some cases permit.
-An error names a `kind`. `not_found` means the object is absent, `container_not_found` the bucket or container, and `missing` that the answer cannot say which. The others are `precondition`, `not_modified`, `permission_denied` and `other`.
+An error names a `kind`. `not_found` means the object is absent, `container_not_found` the bucket or container, and `missing` that the answer cannot say which. The others are `precondition`, `not_modified`, `permission_denied` and `other`. `checksum_mismatch` means the body did not match the checksum the answer named; the status is the answer's.
Leave out a result property the client does not expose, and name it in `unsupported_fields`, as `[{"at":"/value/content_md5_base64","reason":"..."}]`.
Keys are unescaped, bodies base64, ranges an offset and an exclusive end. A `checksum` without `value_base64` is for the client to compute. Tags are an object, or a list of `{"key", "value"}` pairs where a key may repeat. `content_range` reports a served range as `bytes FIRST-LAST/SIZE`.
+An `s3.sign` header given as a list is sent once per value, in order. Its `payload_hash`, such as `UNSIGNED-PAYLOAD`, is signed in place of the body's SHA-256. A signer may report its canonical request as `canonical_request`, which a vector then checks.
+
+A read asks for a checksum with `checksum_mode` on S3, or `range_checksum` on an Azure range. It reports the checksum it checked as `checksum`: `{"algorithm", "value_base64"}`, with S3's `type`, such as `full_object`.
+
+`source_account_url` names another Azure storage account that holds a copy source, by its blob service URL. The source is in the container of the endpoint's name, unless `source_container` names another.
+
A `delete_many` key is a name or `{"key", "version"}`, on Azure also `{"key", "snapshot"}`. A result reports each key as the call named it. Where an S3 answer names a version or a delete marker, the key is an object with `version`, `delete_marker` and `delete_marker_version`. A version listing pages by `continuation_token` and `version_marker`, and returns `next_version_marker`. A `restore` reports `state` `started` for a 202 and `readable` for a 200, and a read reports `x-amz-restore` or `x-ms-archive-status` as `restore_status`.
## Cases
diff --git a/adapters/borink/Cargo.lock b/adapters/borink/Cargo.lock
index 2b90395..b9cf57a 100644
--- a/adapters/borink/Cargo.lock
+++ b/adapters/borink/Cargo.lock
@@ -33,7 +33,7 @@ dependencies = [
[[package]]
name = "borink-object-storage-crypto"
version = "0.0.3"
-source = "git+https://github.com/borink-org/object-storage.git?rev=a231d3b10ac7ac983813efc052a1ac60a966a1b3#a231d3b10ac7ac983813efc052a1ac60a966a1b3"
+source = "git+https://github.com/borink-org/object-storage.git?rev=3439c0d7eafbea8d0a54d8e0e2104baa9201d172#3439c0d7eafbea8d0a54d8e0e2104baa9201d172"
dependencies = [
"borink-object-storage-proto",
"hmac",
@@ -45,12 +45,12 @@ dependencies = [
[[package]]
name = "borink-object-storage-proto"
version = "0.0.3"
-source = "git+https://github.com/borink-org/object-storage.git?rev=a231d3b10ac7ac983813efc052a1ac60a966a1b3#a231d3b10ac7ac983813efc052a1ac60a966a1b3"
+source = "git+https://github.com/borink-org/object-storage.git?rev=3439c0d7eafbea8d0a54d8e0e2104baa9201d172#3439c0d7eafbea8d0a54d8e0e2104baa9201d172"
[[package]]
name = "borink-object-tests-adapter"
version = "0.0.0"
-source = "git+https://github.com/borink-org/object-storage.git?rev=a231d3b10ac7ac983813efc052a1ac60a966a1b3#a231d3b10ac7ac983813efc052a1ac60a966a1b3"
+source = "git+https://github.com/borink-org/object-storage.git?rev=3439c0d7eafbea8d0a54d8e0e2104baa9201d172#3439c0d7eafbea8d0a54d8e0e2104baa9201d172"
dependencies = [
"base64 0.22.1",
"borink-object-storage-crypto",
diff --git a/adapters/borink/Cargo.toml b/adapters/borink/Cargo.toml
index fd02335..a20d888 100644
--- a/adapters/borink/Cargo.toml
+++ b/adapters/borink/Cargo.toml
@@ -11,7 +11,7 @@ publish = false
[dependencies]
# The adapter itself lives in borink-org/object-storage, beside the crates whose
# API it calls. This is the commit whose adapter speaks this revision's protocol.
-borink-object-tests-adapter = { git = "https://github.com/borink-org/object-storage.git", rev = "a231d3b10ac7ac983813efc052a1ac60a966a1b3" }
+borink-object-tests-adapter = { git = "https://github.com/borink-org/object-storage.git", rev = "3439c0d7eafbea8d0a54d8e0e2104baa9201d172" }
[features]
# HTTPS, which only the live probes need. Offline grading uses plain HTTP on loopback.
diff --git a/cases/live.json b/cases/live.json
index 1ee52f5..91bd282 100644
--- a/cases/live.json
+++ b/cases/live.json
@@ -21,7 +21,7 @@
"lane": "live",
"purpose": "Service acceptance of a fresh signed request using credentials supplied by the caller.",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-azure-active-directory"
],
"call": {
"op": "get",
@@ -51,7 +51,7 @@
"lane": "live",
"purpose": "Read a pre-provisioned private object; invalid-credential control must be denied.",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-azure-active-directory"
],
"call": {
"op": "get",
diff --git a/cases/management.json b/cases/management.json
index bbc3eca..16ae252 100644
--- a/cases/management.json
+++ b/cases/management.json
@@ -18,6 +18,8 @@
"management/azure/delete-container-absent": "Report a missing container on delete",
"management/azure/list-containers": "List the containers whose names start with a prefix",
"management/s3-express/create-bucket": "Create a directory bucket in an availability zone. The request goes to the regional control endpoint, s3express-control, by path, signed with the account credentials and no session",
+ "management/s3-express/list-directory-buckets": "List the account's directory buckets with ListDirectoryBuckets: a GET of / on the regional control endpoint, signed with the account's credentials and no session. It takes no prefix, so every directory bucket of the region is listed",
+ "management/s3-express/list-directory-buckets-page": "List one directory bucket a page with max-directory-buckets=1. A page with more to come ends in a ContinuationToken, which a client reports to ask for the next page",
"management/s3/create-bucket": "Create a bucket in the region of the endpoint",
"management/s3/create-bucket-owned": "Refuse to create a bucket that the account already owns",
"management/s3/delete-bucket": "Delete an empty bucket",
@@ -2635,6 +2637,238 @@
}
],
"refusal": null
+ },
+ {
+ "id": "management/s3-express/list-directory-buckets",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "List the account's directory buckets with ListDirectoryBuckets: a GET of / on the regional control endpoint, signed with the account's credentials and no session. It takes no prefix, so every directory bucket of the region is listed",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListDirectoryBuckets.html"
+ ],
+ "call": {
+ "op": "s3.list_directory_buckets"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "s3express-control.eu-central-1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\n\n \n \n arn:aws:s3express:eu-central-1:000000000000:bucket/fixture--euc1-az1--x-s3\n fixture--euc1-az1--x-s3\n 2024-01-01T00:00:00.000Z\n \n \n arn:aws:s3express:eu-central-1:000000000000:bucket/fixture-other--euc1-az1--x-s3\n fixture-other--euc1-az1--x-s3\n 2024-01-01T00:00:00.000Z\n \n \n\n"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/buckets",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ "fixture--euc1-az1--x-s3",
+ "fixture-other--euc1-az1--x-s3"
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "management/s3-express/list-directory-buckets-page",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "List one directory bucket a page with max-directory-buckets=1. A page with more to come ends in a ContinuationToken, which a client reports to ask for the next page",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListDirectoryBuckets.html"
+ ],
+ "call": {
+ "op": "s3.list_directory_buckets",
+ "page_size": 1
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/max-directory-buckets",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "s3express-control.eu-central-1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\n\n \n \n arn:aws:s3express:eu-central-1:000000000000:bucket/fixture--euc1-az1--x-s3\n fixture--euc1-az1--x-s3\n 2024-01-01T00:00:00.000Z\n \n \n fixture-directory-token\n\n"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/buckets",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ "fixture--euc1-az1--x-s3"
+ ]
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-directory-token"
+ }
+ }
+ ],
+ "refusal": null
}
]
}
diff --git a/cases/operations.json b/cases/operations.json
index 7ddd19c..efa9633 100644
--- a/cases/operations.json
+++ b/cases/operations.json
@@ -5,6 +5,9 @@
"operations/azure-hns/abort-copy-finished": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
"operations/azure-hns/append-block": "Append a block to an append blob and report its offset",
"operations/azure-hns/append-block-at-wrong-position": "Refuse an append whose position condition does not match the blob length",
+ "operations/azure-hns/append-block-from-url": "Append the bytes at a URL to an append blob with Append Block From URL: a PUT with comp=appendblock, x-ms-copy-source and no body. Report the offset the block starts at",
+ "operations/azure-hns/append-block-from-url-other-account": "Append a block with Append Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
+ "operations/azure-hns/append-block-from-url-range": "Append bytes 1 to 3 at a URL with Append Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=1-3",
"operations/azure-hns/append-block-to-block-blob": "Refuse an append to a block blob",
"operations/azure-hns/commit": "commit",
"operations/azure-hns/commit-container-missing": "commit container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
@@ -35,14 +38,16 @@
"operations/azure-hns/copy-content-properties": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
"operations/azure-hns/copy-if-none-match-exists": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
"operations/azure-hns/copy-missing-source": "Refuse a copy whose source does not exist",
+ "operations/azure-hns/copy-other-account": "Report an asynchronous Copy Blob from another storage account as an error. It reads such a source only with a SAS, so with Entra ID Azure answers 401 CannotVerifyCopySource, with a bearer token in x-ms-copy-source-authorization or without. Copy between accounts with Copy Blob From URL, Put Blob From URL or Put Block From URL",
"operations/azure-hns/copy-pending": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
"operations/azure-hns/copy-replace-metadata": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
"operations/azure-hns/copy-source-if-match": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
"operations/azure-hns/copy-source-if-match-failed": "Report a copy whose source does not have the ETag in x-ms-source-if-match as a failed condition, 412 SourceConditionNotMet",
"operations/azure-hns/copy-source-if-unmodified-since-failed": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
"operations/azure-hns/copy-source-key-encoded": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
- "operations/azure-hns/copy-sync": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. The source must be readable by URL: by a SAS, or by a bearer token in x-ms-copy-source-authorization",
+ "operations/azure-hns/copy-sync": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. Azure reads the source by URL as the caller, or with the bearer token in x-ms-copy-source-authorization",
"operations/azure-hns/copy-sync-missing-source": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "operations/azure-hns/copy-sync-other-account": "Copy a blob with Copy Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure-hns/copy-tier": "Copy a blob into another access tier, named in x-ms-access-tier",
"operations/azure-hns/create-append": "Create an empty append blob",
"operations/azure-hns/create-page": "Create a page blob of 1,024 bytes, which an HNS account does not support",
@@ -123,8 +128,14 @@
"operations/azure-hns/get-previous-version": "get previous version",
"operations/azure-hns/get-previous-version-of-deleted-object": "get previous version of deleted object",
"operations/azure-hns/get-range": "get range",
+ "operations/azure-hns/get-range-crc64": "Ask for the CRC64 of a range with x-ms-range-get-content-crc64: true, which Azure sends in x-ms-content-crc64. Check the body against it, and report it",
+ "operations/azure-hns/get-range-crc64-mismatch": "Report a range whose body does not match the CRC64 Azure sent for it as an error of kind checksum_mismatch",
"operations/azure-hns/get-range-empty": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
"operations/azure-hns/get-range-inverted": "get range inverted",
+ "operations/azure-hns/get-range-md5": "Ask for the MD5 of a range with x-ms-range-get-content-md5: true, which Azure sends in content-md5. Check the body against it, and report it",
+ "operations/azure-hns/get-range-md5-largest": "Ask for the MD5 of a 4 MiB range, the largest Azure checksums. Azure serves what the blob holds of it, here all 30 bytes, and their MD5",
+ "operations/azure-hns/get-range-md5-mismatch": "Report a range whose body does not match the MD5 Azure sent for it as an error of kind checksum_mismatch",
+ "operations/azure-hns/get-range-md5-too-large": "Report the MD5 of a range one byte over 4 MiB as an error: Azure refuses it with 400 InvalidHeaderValue. A client may refuse it before sending",
"operations/azure-hns/get-range-not-satisfiable": "get range not satisfiable",
"operations/azure-hns/get-range-of-empty-object": "Report a range read of an empty object as 416 InvalidRange: no range of it can be satisfied, not even its first byte",
"operations/azure-hns/get-range-open": "get range open",
@@ -228,6 +239,7 @@
"operations/azure-hns/put-from-url": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
"operations/azure-hns/put-from-url-content-properties": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
"operations/azure-hns/put-from-url-missing-source": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "operations/azure-hns/put-from-url-other-account": "Write a block blob with Put Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure-hns/put-if-match-current": "put if match current",
"operations/azure-hns/put-if-none-match-missing": "put if none match missing",
"operations/azure-hns/put-if-unmodified-since-past": "Refuse a write with 412 when the object changed after If-Unmodified-Since",
@@ -258,6 +270,12 @@
"operations/azure-hns/put-with-md5": "put with md5",
"operations/azure-hns/put-with-tags": "Write an object with tags, which an HNS account does not support",
"operations/azure-hns/put-with-tier": "Write an object straight into the Cool access tier",
+ "operations/azure-hns/set-metadata": "Replace a blob's metadata with Set Blob Metadata: a PUT with comp=metadata and an x-ms-meta- header for each pair. It replaces all metadata, so a name it leaves out is gone",
+ "operations/azure-hns/set-metadata-empty": "Clear a blob's metadata with Set Blob Metadata and no x-ms-meta- header",
+ "operations/azure-hns/set-metadata-if-match-failed": "Report Set Blob Metadata with an If-Match the blob does not have as a failed condition, 412 ConditionNotMet, which leaves the metadata as it was",
+ "operations/azure-hns/set-metadata-missing": "Report Set Blob Metadata on a blob that does not exist as not found, 404 BlobNotFound",
+ "operations/azure-hns/set-properties": "Set a blob's content type with Set Blob Properties: a PUT with comp=properties and x-ms-blob-content-type. It replaces all content properties, so the cache control and the stored Content-MD5 it does not name are cleared",
+ "operations/azure-hns/set-properties-all": "Set every content property with Set Blob Properties, each in its x-ms-blob- header: content type, encoding, language, disposition and cache control",
"operations/azure-hns/set-tags": "Replace the tags of an object, which an HNS account does not support",
"operations/azure-hns/set-tags-version": "Send a tag call on a version to an HNS account, which refuses it as it refuses the blob's",
"operations/azure-hns/set-tier-cool": "Move an object to the Cool access tier",
@@ -267,6 +285,7 @@
"operations/azure-hns/stage-empty": "stage empty",
"operations/azure-hns/stage-escaped-id": "stage escaped id",
"operations/azure-hns/stage-from-url": "Stage a block from bytes 0 to 2 at a URL with Put Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=0-2",
+ "operations/azure-hns/stage-from-url-other-account": "Stage a block with Put Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure-hns/stage-id-64-bytes": "A block ID decodes to at most 64 bytes, and Azure stages a block whose ID decodes to exactly 64. Send it; only a longer ID may be refused.",
"operations/azure-hns/stage-id-too-long": "stage id too long",
"operations/azure-hns/stage-key-double-slash": "stage, with the key \"double//slash.txt\"",
@@ -297,6 +316,9 @@
"operations/azure/abort-copy-finished": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
"operations/azure/append-block": "Append a block to an append blob and report its offset",
"operations/azure/append-block-at-wrong-position": "Refuse an append whose position condition does not match the blob length",
+ "operations/azure/append-block-from-url": "Append the bytes at a URL to an append blob with Append Block From URL: a PUT with comp=appendblock, x-ms-copy-source and no body. Report the offset the block starts at",
+ "operations/azure/append-block-from-url-other-account": "Append a block with Append Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
+ "operations/azure/append-block-from-url-range": "Append bytes 1 to 3 at a URL with Append Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=1-3",
"operations/azure/append-block-to-block-blob": "Refuse an append to a block blob",
"operations/azure/commit": "commit",
"operations/azure/commit-container-missing": "commit container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
@@ -328,6 +350,7 @@
"operations/azure/copy-content-properties": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
"operations/azure/copy-if-none-match-exists": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
"operations/azure/copy-missing-source": "Refuse a copy whose source does not exist",
+ "operations/azure/copy-other-account": "Report an asynchronous Copy Blob from another storage account as an error. It reads such a source only with a SAS, so with Entra ID Azure answers 401 CannotVerifyCopySource, with a bearer token in x-ms-copy-source-authorization or without. Copy between accounts with Copy Blob From URL, Put Blob From URL or Put Block From URL",
"operations/azure/copy-pending": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
"operations/azure/copy-replace-metadata": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
"operations/azure/copy-source-if-match": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
@@ -335,8 +358,9 @@
"operations/azure/copy-source-if-unmodified-since-failed": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
"operations/azure/copy-source-key-encoded": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
"operations/azure/copy-source-version": "Copy an earlier version of a blob, named by versionid in the x-ms-copy-source URL",
- "operations/azure/copy-sync": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. The source must be readable by URL: by a SAS, or by a bearer token in x-ms-copy-source-authorization",
+ "operations/azure/copy-sync": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. Azure reads the source by URL as the caller, or with the bearer token in x-ms-copy-source-authorization",
"operations/azure/copy-sync-missing-source": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "operations/azure/copy-sync-other-account": "Copy a blob with Copy Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure/copy-tier": "Copy a blob into another access tier, named in x-ms-access-tier",
"operations/azure/create-append": "Create an empty append blob",
"operations/azure/create-page": "Create a page blob of 1,024 bytes",
@@ -360,13 +384,13 @@
"operations/azure/delete-many-257": "Report a batch of 257 deletions, one more than Azure takes, as an error. Azure answers 202 with one part and no Content-ID, 400 ExceedsMaxBatchRequestCount, for the whole batch, not one part per deletion. A client may refuse it before sending",
"operations/azure/delete-many-answers-out-of-order": "Match each part of a batch answer to its deletion by Content-ID, which links them, not by position. Azure has answered every recorded batch in order, up to 256 parts; this answer is written by hand",
"operations/azure/delete-many-container-missing": "Report a batch in a missing container, which Azure answers 202 with 404 ContainerNotFound for each deletion, as that error for each key and none deleted, or as one error of kind container_not_found",
- "operations/azure/delete-many-current-version": "Delete the current version of a key by its versionid in a batch, which Azure refuses with 403 OperationNotAllowedOnRootBlob",
+ "operations/azure/delete-many-current-version": "Delete the current version of a key by its versionid in a batch, which Azure refuses with 403 OperationNotAllowedOnRootBlob, even to a caller that may delete versions. Delete the key itself instead",
"operations/azure/delete-many-denied": "Report each deletion of a batch that Azure refuses inside its 202 answer, here every one with 403 AuthorizationPermissionMismatch, as that key's error, not as deleted",
"operations/azure/delete-many-lf-line-endings": "Read a batch answer whose lines end in LF alone correctly, or report it as an error, but never half-read it. Azure has not been seen to send it: HTTP and multipart require CRLF. This answer is the recorded one with every CR removed",
"operations/azure/delete-many-server-busy": "Report a batch that Azure answers as a whole with 503 ServerBusy as an error, never as deleted keys. A client may retry up to five times first",
"operations/azure/delete-many-snapshot": "Delete a snapshot of a key in a batch, named by snapshot in its subrequest's query, which leaves the blob",
"operations/azure/delete-many-unauthenticated": "Report a batch whose token Azure does not accept as one error for the whole batch, as Azure answers it, not as an answer per key",
- "operations/azure/delete-many-version": "Delete a previous version of one key and another key whole in one batch, the version named by versionid in its subrequest's query, which this account refuses for the version alone",
+ "operations/azure/delete-many-version": "Delete a previous version of one key and another key whole in one batch, the version named by versionid in its subrequest's query. A caller without blobs/deleteBlobVersion/action, which Storage Blob Data Contributor lacks, gets 403 OperationNotAllowedOnAutomaticSnapshot for the version alone",
"operations/azure/delete-many-without-content-id": "Report a batch answer whose parts carry no Content-ID as an error. Without one, only the order of the parts would link a result to its key, and a guess could report one key deleted when another failed. Azure echoes the Content-ID of every subrequest; this answer is the recorded one with them removed",
"operations/azure/delete-missing": "delete missing. A client reports it as not_found: the object is absent",
"operations/azure/delete-precondition-failed": "delete precondition failed",
@@ -421,8 +445,14 @@
"operations/azure/get-previous-version": "get previous version",
"operations/azure/get-previous-version-of-deleted-object": "get previous version of deleted object",
"operations/azure/get-range": "get range",
+ "operations/azure/get-range-crc64": "Ask for the CRC64 of a range with x-ms-range-get-content-crc64: true, which Azure sends in x-ms-content-crc64. Check the body against it, and report it",
+ "operations/azure/get-range-crc64-mismatch": "Report a range whose body does not match the CRC64 Azure sent for it as an error of kind checksum_mismatch",
"operations/azure/get-range-empty": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
"operations/azure/get-range-inverted": "get range inverted",
+ "operations/azure/get-range-md5": "Ask for the MD5 of a range with x-ms-range-get-content-md5: true, which Azure sends in content-md5. Check the body against it, and report it",
+ "operations/azure/get-range-md5-largest": "Ask for the MD5 of a 4 MiB range, the largest Azure checksums. Azure serves what the blob holds of it, here all 30 bytes, and their MD5",
+ "operations/azure/get-range-md5-mismatch": "Report a range whose body does not match the MD5 Azure sent for it as an error of kind checksum_mismatch",
+ "operations/azure/get-range-md5-too-large": "Report the MD5 of a range one byte over 4 MiB as an error: Azure refuses it with 400 InvalidHeaderValue. A client may refuse it before sending",
"operations/azure/get-range-not-satisfiable": "get range not satisfiable",
"operations/azure/get-range-of-empty-object": "Report a range read of an empty object as 416 InvalidRange: no range of it can be satisfied, not even its first byte",
"operations/azure/get-range-open": "get range open",
@@ -529,6 +559,7 @@
"operations/azure/put-from-url": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
"operations/azure/put-from-url-content-properties": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
"operations/azure/put-from-url-missing-source": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "operations/azure/put-from-url-other-account": "Write a block blob with Put Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure/put-if-match-current": "put if match current",
"operations/azure/put-if-none-match-missing": "put if none match missing",
"operations/azure/put-if-unmodified-since-past": "Refuse a write with 412 when the object changed after If-Unmodified-Since",
@@ -565,6 +596,12 @@
"operations/azure/restore-high-priority": "Start rehydrating an archived blob to Cool at High priority",
"operations/azure/restore-not-archived": "Restore a blob that is online already, which Azure answers with 200 as a readable blob",
"operations/azure/restore-while-rehydrating": "Rehydrate a blob to another tier while it rehydrates",
+ "operations/azure/set-metadata": "Replace a blob's metadata with Set Blob Metadata: a PUT with comp=metadata and an x-ms-meta- header for each pair. It replaces all metadata, so a name it leaves out is gone",
+ "operations/azure/set-metadata-empty": "Clear a blob's metadata with Set Blob Metadata and no x-ms-meta- header",
+ "operations/azure/set-metadata-if-match-failed": "Report Set Blob Metadata with an If-Match the blob does not have as a failed condition, 412 ConditionNotMet, which leaves the metadata as it was",
+ "operations/azure/set-metadata-missing": "Report Set Blob Metadata on a blob that does not exist as not found, 404 BlobNotFound",
+ "operations/azure/set-properties": "Set a blob's content type with Set Blob Properties: a PUT with comp=properties and x-ms-blob-content-type. It replaces all content properties, so the cache control and the stored Content-MD5 it does not name are cleared",
+ "operations/azure/set-properties-all": "Set every content property with Set Blob Properties, each in its x-ms-blob- header: content type, encoding, language, disposition and cache control",
"operations/azure/set-tags": "Replace the tags of an object",
"operations/azure/set-tags-10-tags": "Set 10 tags, the most an object takes",
"operations/azure/set-tags-11-tags": "Report 11 tags, one more than an object takes, as an error. A client may refuse them",
@@ -585,6 +622,7 @@
"operations/azure/stage-empty": "stage empty",
"operations/azure/stage-escaped-id": "stage escaped id",
"operations/azure/stage-from-url": "Stage a block from bytes 0 to 2 at a URL with Put Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=0-2",
+ "operations/azure/stage-from-url-other-account": "Stage a block with Put Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure/stage-id-64-bytes": "A block ID decodes to at most 64 bytes, and Azure stages a block whose ID decodes to exactly 64. Send it; only a longer ID may be refused.",
"operations/azure/stage-id-too-long": "stage id too long",
"operations/azure/stage-key-double-slash": "stage, with the key \"double//slash.txt\"",
@@ -610,6 +648,8 @@
"operations/azure/staged-uncommitted": "staged uncommitted",
"operations/azure/staged-uncommitted-only": "staged uncommitted only",
"operations/azure/upload-pages": "Write the first page of a page blob",
+ "operations/azure/upload-pages-from-url": "Write the first page of a page blob from the bytes at a URL with Put Page From URL: a PUT with comp=page, x-ms-copy-source and no body. Both x-ms-range and x-ms-source-range are required, each 512-byte aligned with an inclusive end",
+ "operations/azure/upload-pages-from-url-other-account": "Write a page with Put Page From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"operations/azure/upload-pages-unaligned": "Refuse a page write that does not start on a 512-byte boundary",
"operations/s3-express/abort": "abort",
"operations/s3-express/abort-after-commit": "abort after commit",
@@ -671,6 +711,10 @@
"operations/s3-express/delete-slow-down": "Report a 503 SlowDown answer as an error, after at most 5 retries",
"operations/s3-express/get-before-commit": "get before commit",
"operations/s3-express/get-body-cut-short": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
+ "operations/s3-express/get-checksum": "Read an object with x-amz-checksum-mode: ENABLED, which makes S3 send the object's stored checksum, here CRC32, in x-amz-checksum-crc32 with x-amz-checksum-type: FULL_OBJECT. A range that covers the whole object gets it too. Check the body against it, and report it",
+ "operations/s3-express/get-checksum-default": "Read with x-amz-checksum-mode: ENABLED an object written without a checksum. S3 stores a CRC64NVME for every new object and sends it, so a client checks CRC64NVME too",
+ "operations/s3-express/get-checksum-mismatch": "Report a body that does not match the checksum S3 sent for it as an error of kind checksum_mismatch, not as the object",
+ "operations/s3-express/get-checksum-range": "Read part of an object with checksum mode. S3 sends no checksum for a range that does not cover the whole object, so a client reads it without one, and reports none. x-amz-checksum-mode may be sent or left out",
"operations/s3-express/get-committed-tail": "get committed tail",
"operations/s3-express/get-content-properties": "Return the stored content properties from a GET",
"operations/s3-express/get-empty": "get empty",
@@ -719,6 +763,7 @@
"operations/s3-express/get-whole": "get whole",
"operations/s3-express/get-xml-looking": "get xml looking",
"operations/s3-express/head": "head",
+ "operations/s3-express/head-checksum": "Ask a HEAD for the object's checksum with x-amz-checksum-mode: ENABLED, and report it",
"operations/s3-express/head-committed": "head committed",
"operations/s3-express/head-content-properties": "Return the stored content properties from a HEAD",
"operations/s3-express/head-if-unmodified-since-past": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
@@ -758,6 +803,11 @@
"operations/s3-express/list-service-unavailable": "Report a 503 ServiceUnavailable answer as an error, after at most 5 retries",
"operations/s3-express/list-start-after": "Report the NotSupported error that a directory bucket answers to start-after",
"operations/s3-express/list-truncated-without-token": "Report an error when a truncated page carries no continuation token; do not stop early or list from the start again",
+ "operations/s3-express/list-uploads": "List the multipart uploads in progress under a prefix with ListMultipartUploads, a GET with ?uploads, and report each upload's key and upload ID, in key order",
+ "operations/s3-express/list-uploads-after-key": "On a directory bucket, list the uploads after the first page by passing its NextKeyMarker, an opaque token, in key-marker. A key there is refused with 400 InvalidArgument",
+ "operations/s3-express/list-uploads-delimited": "List uploads with delimiter=/: the uploads under a deeper prefix are reported as that common prefix",
+ "operations/s3-express/list-uploads-none": "List a prefix with no upload in progress: an empty list, not an error",
+ "operations/s3-express/list-uploads-page": "List one upload a page with max-uploads=1. A truncated page names the next page's start in NextKeyMarker and NextUploadIdMarker, which a client reports",
"operations/s3-express/list-versions": "Send ListObjectVersions to a directory bucket, which keeps no versions",
"operations/s3-express/list-xml-escaped": "Read XML character references in listed names, such as & and <, or ask for encoding-type=url and decode the names",
"operations/s3-express/put-computing-crc32": "Compute the CRC32 checksum of the body and send it, base64 of its big-endian bytes, in x-amz-checksum-crc32 or in a trailer of an aws-chunked body",
@@ -913,6 +963,10 @@
"operations/s3/get-before-commit": "get before commit",
"operations/s3/get-body-cut-short": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
"operations/s3/get-bucket-missing": "get bucket missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
+ "operations/s3/get-checksum": "Read an object with x-amz-checksum-mode: ENABLED, which makes S3 send the object's stored checksum, here CRC32, in x-amz-checksum-crc32 with x-amz-checksum-type: FULL_OBJECT. A range that covers the whole object gets it too. Check the body against it, and report it",
+ "operations/s3/get-checksum-default": "Read with x-amz-checksum-mode: ENABLED an object written without a checksum. S3 stores a CRC64NVME for every new object and sends it, so a client checks CRC64NVME too",
+ "operations/s3/get-checksum-mismatch": "Report a body that does not match the checksum S3 sent for it as an error of kind checksum_mismatch, not as the object",
+ "operations/s3/get-checksum-range": "Read part of an object with checksum mode. S3 sends no checksum for a range that does not cover the whole object, so a client reads it without one, and reports none. x-amz-checksum-mode may be sent or left out",
"operations/s3/get-committed-tail": "get committed tail",
"operations/s3/get-content-encoding-gzip": "Return the stored gzip bytes and Content-Encoding: gzip without decoding them",
"operations/s3/get-content-properties": "Return the stored content properties from a GET",
@@ -971,6 +1025,7 @@
"operations/s3/get-xml-looking": "get xml looking",
"operations/s3/head": "head",
"operations/s3/head-bucket-missing": "Report a HEAD of an object in a missing bucket as missing, not not_found. S3 answers 404 without a body, the same answer as for a missing object, so a client cannot tell that the object is absent",
+ "operations/s3/head-checksum": "Ask a HEAD for the object's checksum with x-amz-checksum-mode: ENABLED, and report it",
"operations/s3/head-committed": "head committed",
"operations/s3/head-content-properties": "Return the stored content properties from a HEAD",
"operations/s3/head-if-unmodified-since-past": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
@@ -1016,6 +1071,11 @@
"operations/s3/list-start-after-delimited": "Send a start-after that names no key; it skips the keys and common prefixes up to it",
"operations/s3/list-truncated-without-token": "Report an error when a truncated page carries no continuation token; do not stop early or list from the start again",
"operations/s3/list-unauthenticated": "Report the service authorization error for this operation; signature acceptance is tested separately.",
+ "operations/s3/list-uploads": "List the multipart uploads in progress under a prefix with ListMultipartUploads, a GET with ?uploads, and report each upload's key and upload ID, in key order",
+ "operations/s3/list-uploads-after-key": "List the uploads after a key, named in key-marker: the uploads of that key are left out",
+ "operations/s3/list-uploads-delimited": "List uploads with delimiter=/: the uploads under a deeper prefix are reported as that common prefix",
+ "operations/s3/list-uploads-none": "List a prefix with no upload in progress: an empty list, not an error",
+ "operations/s3/list-uploads-page": "List one upload a page with max-uploads=1. A truncated page names the next page's start in NextKeyMarker and NextUploadIdMarker, which a client reports",
"operations/s3/list-versions": "List every version of each key, newest first, with the current one marked IsLatest",
"operations/s3/list-versions-delete-marker": "List a deleted key's delete marker as its current entry, before the version it hides",
"operations/s3/list-versions-delimited": "List versions with a delimiter, which rolls the versions under a deeper prefix into one common prefix",
@@ -10579,7 +10639,7 @@
"id": "operations/azure/delete-many-version",
"profile": "azure",
"lane": "core",
- "purpose": "Delete a previous version of one key and another key whole in one batch, the version named by versionid in its subrequest's query, which this account refuses for the version alone",
+ "purpose": "Delete a previous version of one key and another key whole in one batch, the version named by versionid in its subrequest's query. A caller without blobs/deleteBlobVersion/action, which Storage Blob Data Contributor lacks, gets 403 OperationNotAllowedOnAutomaticSnapshot for the version alone",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
],
@@ -10720,7 +10780,7 @@
"id": "operations/azure/delete-many-current-version",
"profile": "azure",
"lane": "core",
- "purpose": "Delete the current version of a key by its versionid in a batch, which Azure refuses with 403 OperationNotAllowedOnRootBlob",
+ "purpose": "Delete the current version of a key by its versionid in a batch, which Azure refuses with 403 OperationNotAllowedOnRootBlob, even to a caller that may delete versions. Delete the key itself instead",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
],
@@ -18252,16 +18312,21 @@
"refusal": null
},
{
- "id": "operations/azure/get-reordered",
+ "id": "operations/azure/get-range-md5",
"profile": "azure",
"lane": "core",
- "purpose": "get reordered",
+ "purpose": "Ask for the MD5 of a range with x-ms-range-get-content-md5: true, which Azure sends in content-md5. Check the body against it, and report it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
- "key": "object-tests/multipart/reordered.bin",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -18281,7 +18346,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/reordered.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -18291,102 +18356,50 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-8d8ae06ceb7d\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2664276Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": "c2Vjb25kZmlyc3Q="
+ "data": "MjM0NQ=="
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8d8ae06ceb7d\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 11
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.2664276Z"
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "c2Vjb25kZmlyc3Q="
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/get-replacement",
- "profile": "azure",
- "lane": "core",
- "purpose": "get replacement",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/multipart/replaced.bin",
- "op": "get"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -18402,7 +18415,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/replaced.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -18412,29 +18425,47 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-2184b3e6c2c3\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.5387802Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": "RklSU1Q="
+ "data": "MjM0NQ=="
}
}
}
@@ -18455,7 +18486,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-2184b3e6c2c3\""
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
@@ -18463,7 +18494,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 5
+ "value": 4
}
},
{
@@ -18479,7 +18510,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.5387802Z"
+ "value": "2024-01-01T00:00:00.7556278Z"
}
},
{
@@ -18487,24 +18518,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "RklSU1Q="
+ "value": "MjM0NQ=="
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "md5",
+ "value_base64": "gbBz3pNw6oc/VI4xuK3AgQ=="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-snapshot",
+ "id": "operations/azure/get-range-md5-mismatch",
"profile": "azure",
"lane": "core",
- "purpose": "get snapshot",
+ "purpose": "Report a range whose body does not match the MD5 Azure sent for it as an error of kind checksum_mismatch",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
+ "origin": "constructed",
+ "derived_from": "operations/azure/get-range-md5",
"call": {
- "key": "object-tests/snapshots/object.txt",
+ "key": "object-tests/read/object.txt",
"op": "get",
- "snapshot": "2024-01-01T00:00:00.7351568Z"
+ "range": {
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -18524,7 +18572,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/snapshots/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -18536,117 +18584,48 @@
}
},
{
- "at": "/query/snapshot",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7351568Z"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "+XxdKZQb+xsv2rCHSQargg==",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-e3698635ab53\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-server-encrypted": "true"
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": "b25l"
+ "data": "MjM0YQ=="
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-e3698635ab53\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 3
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "b25l"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/get-staged-only",
- "profile": "azure",
- "lane": "core",
- "purpose": "get staged only",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/multipart/staged.bin",
- "op": "get"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -18662,7 +18641,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -18672,22 +18651,47 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "base64",
+ "data": "MjM0YQ=="
}
}
}
@@ -18704,38 +18708,32 @@
}
},
{
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 404
- }
- },
- {
- "at": "/code",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "checksum_mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-suffix-longer-than-object",
+ "id": "operations/azure/get-range-crc64",
"profile": "azure",
"lane": "core",
- "purpose": "get suffix longer than object",
+ "purpose": "Ask for the CRC64 of a range with x-ms-range-get-content-crc64: true, which Azure sends in x-ms-content-crc64. Check the body against it, and report it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "suffix": 100
- }
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "azure_crc64"
},
"exchanges": [
{
@@ -18771,16 +18769,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-100"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -18788,6 +18794,7 @@
"etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -18796,7 +18803,7 @@
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MjM0NQ=="
}
}
},
@@ -18831,16 +18838,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-100"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -18848,6 +18863,7 @@
"etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -18856,7 +18872,7 @@
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MjM0NQ=="
}
}
}
@@ -18885,7 +18901,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 4
}
},
{
@@ -18897,72 +18913,234 @@
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "2024-01-01T00:00:00.7556278Z"
}
},
{
- "at": "/value/version",
+ "at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "MjM0NQ=="
}
},
{
- "at": "/value/body_base64",
+ "at": "/value/checksum",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": {
+ "algorithm": "azure_crc64",
+ "value_base64": "0F+fuGFLNdI="
+ }
}
}
],
- "refusal": [
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/get-range-crc64-mismatch",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Report a range whose body does not match the CRC64 Azure sent for it as an error of kind checksum_mismatch",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ ],
+ "origin": "constructed",
+ "derived_from": "operations/azure/get-range-crc64",
+ "call": {
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "azure_crc64"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MjM0YQ=="
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MjM0YQ=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
{
"at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "refused"
+ "value": "error"
}
},
{
"at": "/kind",
"optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
"rule": {
"is": "equal",
- "value": "range"
+ "value": "checksum_mismatch"
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure/get-suffix",
+ "id": "operations/azure/get-range-md5-largest",
"profile": "azure",
"lane": "core",
- "purpose": "get suffix",
+ "purpose": "Ask for the MD5 of a 4 MiB range, the largest Azure checksums. Azure serves what the blob holds of it, here all 30 bytes, and their MD5",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "suffix": 6
- }
+ "end": 4194304,
+ "start": 0
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -18998,16 +19176,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-6"
+ "value": "bytes=0-4194303"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
"content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 0-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -19058,16 +19245,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-6"
+ "value": "bytes=0-4194303"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
"content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 0-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -19123,14 +19319,6 @@
"value": "application/octet-stream"
}
},
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
{
"at": "/value/version",
"optional": false,
@@ -19146,47 +19334,37 @@
"is": "equal",
"value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
},
{
- "at": "/parameter",
+ "at": "/value/checksum",
"optional": false,
"rule": {
"is": "equal",
- "value": "range"
+ "value": {
+ "algorithm": "md5",
+ "value_base64": "H1VC0PNTmj+yaCRN4U931g=="
+ }
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure/get-unauthenticated",
+ "id": "operations/azure/get-range-md5-too-large",
"profile": "azure",
"lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
+ "purpose": "Report the MD5 of a range one byte over 4 MiB as an error: Azure refuses it with 400 InvalidHeaderValue. A client may refuse it before sending",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
- "op": "get"
+ "op": "get",
+ "range": {
+ "end": 4194305,
+ "start": 0
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -19216,72 +19394,41 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-4194304"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 401,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidAuthenticationInfo"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
"encoding": "utf8",
- "data": "InvalidAuthenticationInfoFixture error"
+ "data": "InvalidHeaderValueFixture error"
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 401
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidAuthenticationInfo"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/get-unknown-snapshot",
- "profile": "azure",
- "lane": "core",
- "purpose": "get unknown snapshot",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/snapshots/object.txt",
- "op": "get",
- "snapshot": "2024-01-01T00:00:00.4364169Z"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -19297,7 +19444,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/snapshots/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -19309,28 +19456,36 @@
}
},
{
- "at": "/query/snapshot",
+ "at": "/headers/x-ms-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.4364169Z"
+ "value": "bytes=0-4194304"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
"encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -19351,7 +19506,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 400
}
},
{
@@ -19359,24 +19514,64 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "InvalidHeaderValue"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidHeaderValue"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/get-unknown-version",
+ "id": "operations/azure/get-reordered",
"profile": "azure",
"lane": "core",
- "purpose": "get unknown version",
+ "purpose": "get reordered",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/versions-mtydohr2/object.txt",
- "op": "get",
- "version": "2024-01-01T00:00:00.4364169Z"
+ "key": "object-tests/multipart/reordered.bin",
+ "op": "get"
},
"exchanges": [
{
@@ -19396,7 +19591,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
+ "value": "/fixture/object-tests/multipart/reordered.bin"
}
},
{
@@ -19406,30 +19601,29 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/versionid",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.4364169Z"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "etag": "\"fixture-8d8ae06ceb7d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2664276Z"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "base64",
+ "data": "c2Vjb25kZmlyc3Q="
}
}
}
@@ -19442,38 +19636,62 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-8d8ae06ceb7d\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": 11
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2664276Z"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "c2Vjb25kZmlyc3Q="
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-whole",
+ "id": "operations/azure/get-replacement",
"profile": "azure",
"lane": "core",
- "purpose": "get whole",
+ "purpose": "get replacement",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object-tests/multipart/replaced.bin",
"op": "get"
},
"exchanges": [
@@ -19494,7 +19712,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object-tests/multipart/replaced.bin"
}
},
{
@@ -19511,23 +19729,22 @@
"response": {
"status": 200,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-2184b3e6c2c3\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.5387802Z"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "RklSU1Q="
}
}
}
@@ -19548,7 +19765,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-2184b3e6c2c3\""
}
},
{
@@ -19556,7 +19773,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 5
}
},
{
@@ -19567,20 +19784,12 @@
"value": "application/octet-stream"
}
},
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
{
"at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.5387802Z"
}
},
{
@@ -19588,23 +19797,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": "RklSU1Q="
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-xml-looking",
+ "id": "operations/azure/get-snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "get xml looking",
+ "purpose": "get snapshot",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object",
- "op": "get"
+ "key": "object-tests/snapshots/object.txt",
+ "op": "get",
+ "snapshot": "2024-01-01T00:00:00.7351568Z"
},
"exchanges": [
{
@@ -19624,7 +19834,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object"
+ "value": "/fixture/object-tests/snapshots/object.txt"
}
},
{
@@ -19634,6 +19844,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/snapshot",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7351568Z"
+ }
}
],
"allow_headers": [],
@@ -19641,24 +19859,20 @@
"response": {
"status": 200,
"headers": {
+ "content-md5": "+XxdKZQb+xsv2rCHSQargg==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-e3698635ab53\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-server-encrypted": "true"
},
"body": {
"encoding": "base64",
- "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
+ "data": "b25l"
}
}
}
@@ -19674,28 +19888,70 @@
"value": "ok"
}
},
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-e3698635ab53\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
+ "value": "b25l"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-noise-tolerance",
+ "id": "operations/azure/get-staged-only",
"profile": "azure",
"lane": "core",
- "purpose": "get noise tolerance",
+ "purpose": "get staged only",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
"call": {
- "key": "object",
+ "key": "object-tests/multipart/staged.bin",
"op": "get"
},
"exchanges": [
@@ -19716,7 +19972,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
@@ -19731,27 +19987,17 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"a-different-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-fixture-unknown": "ignored",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "another-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -19764,33 +20010,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-body-cut-short",
+ "id": "operations/azure/get-suffix-longer-than-object",
"profile": "azure",
"lane": "core",
- "purpose": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
+ "purpose": "get suffix longer than object",
"sources": [
- "https://www.rfc-editor.org/rfc/rfc9112#section-8",
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_client.cpp"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "transient",
"call": {
"key": "object-tests/read/object.txt",
- "op": "get"
+ "op": "get",
+ "range": {
+ "suffix": 100
+ }
},
"exchanges": [
{
@@ -19820,6 +20075,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-100"
+ }
}
],
"allow_headers": [],
@@ -19844,14 +20107,9 @@
"body": {
"encoding": "base64",
"data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- },
- "truncate_body_after": 15
+ }
}
- }
- ]
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -19877,11 +20135,17 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-100"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
@@ -19905,56 +20169,155 @@
"data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ ],
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ }
+ ],
+ "decline_permitted": true
+ },
+ {
+ "id": "operations/azure/get-suffix",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "get suffix",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "suffix": 6
+ }
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "GET"
}
},
{
- "at": "/body_base64",
+ "at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
- "at": "/headers/range",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=15-"
+ "value": ""
}
},
{
- "at": "/headers/if-match",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "bytes=-6"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 15-29/30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -19970,7 +20333,7 @@
},
"body": {
"encoding": "base64",
- "data": "Y3QtdGVzdHMtb2JqZWN0"
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
},
@@ -20005,24 +20368,16 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=15-"
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "bytes=-6"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 15-29/30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -20038,12 +20393,11 @@
},
"body": {
"encoding": "base64",
- "data": "Y3QtdGVzdHMtb2JqZWN0"
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -20051,34 +20405,95 @@
"at": "/outcome",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "error",
- "ok"
- ]
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
},
{
"at": "/value/body_base64",
- "optional": true,
+ "optional": false,
"rule": {
"is": "equal",
"value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure/get-server-busy",
+ "id": "operations/azure/get-unauthenticated",
"profile": "azure",
"lane": "core",
- "purpose": "Report a 503 ServerBusy answer as an error, after at most 5 retries",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "transient",
"call": {
"key": "object-tests/read/object.txt",
"op": "get"
@@ -20116,266 +20531,21 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 401,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "x-ms-error-code": "InvalidAuthenticationInfo"
},
"body": {
"encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ "data": "InvalidAuthenticationInfoFixture error"
}
}
}
]
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "ServerBusy"
- },
- "body": {
- "encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "ServerBusy"
- },
- "body": {
- "encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "ServerBusy"
- },
- "body": {
- "encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "ServerBusy"
- },
- "body": {
- "encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "ServerBusy"
- },
- "body": {
- "encoding": "utf8",
- "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
- }
- }
- }
- ],
- "optional": true
}
],
"expect": [
@@ -20392,7 +20562,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 503
+ "value": 401
}
},
{
@@ -20400,24 +20570,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ServerBusy"
+ "value": "InvalidAuthenticationInfo"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-if-unmodified-since-past",
+ "id": "operations/azure/get-unknown-snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a read with 412 when the object changed after If-Unmodified-Since",
+ "purpose": "get unknown snapshot",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
- "key": "object-tests/read/object.txt",
- "op": "get"
+ "key": "object-tests/snapshots/object.txt",
+ "op": "get",
+ "snapshot": "2024-01-01T00:00:00.4364169Z"
},
"exchanges": [
{
@@ -20437,7 +20607,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object-tests/snapshots/object.txt"
}
},
{
@@ -20449,28 +20619,28 @@
}
},
{
- "at": "/headers/if-unmodified-since",
+ "at": "/query/snapshot",
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "2024-01-01T00:00:00.4364169Z"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
"encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -20491,7 +20661,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": 404
}
},
{
@@ -20499,24 +20669,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ConditionNotMet"
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-if-modified-since-future",
+ "id": "operations/azure/get-unknown-version",
"profile": "azure",
"lane": "core",
- "purpose": "Report 304 when If-Modified-Since names a future date, which Azure does not ignore",
+ "purpose": "get unknown version",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "if_modified_since": "Fri, 01 Jan 2100 00:00:00 GMT",
- "key": "object-tests/read/object.txt",
- "op": "get"
+ "key": "object-tests/versions-mtydohr2/object.txt",
+ "op": "get",
+ "version": "2024-01-01T00:00:00.4364169Z"
},
"exchanges": [
{
@@ -20536,7 +20706,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
}
},
{
@@ -20548,26 +20718,28 @@
}
},
{
- "at": "/headers/if-modified-since",
+ "at": "/query/versionid",
"optional": false,
"rule": {
"is": "equal",
- "value": "Fri, 01 Jan 2100 00:00:00 GMT"
+ "value": "2024-01-01T00:00:00.4364169Z"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 304,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -20588,7 +20760,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 304
+ "value": 404
}
},
{
@@ -20596,22 +20768,21 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ConditionNotMet"
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-if-modified-since-past",
+ "id": "operations/azure/get-whole",
"profile": "azure",
"lane": "core",
- "purpose": "Read an object modified since a past date",
+ "purpose": "get whole",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "if_modified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -20643,14 +20814,6 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/headers/if-modified-since",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
- }
}
],
"allow_headers": [],
@@ -20742,15 +20905,15 @@
"refusal": null
},
{
- "id": "operations/azure/get-content-encoding-gzip",
+ "id": "operations/azure/get-xml-looking",
"profile": "azure",
"lane": "core",
- "purpose": "Return the stored gzip bytes and Content-Encoding: gzip without decoding them",
+ "purpose": "get xml looking",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object",
"op": "get"
},
"exchanges": [
@@ -20771,7 +20934,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object"
}
},
{
@@ -20788,24 +20951,24 @@
"response": {
"status": 200,
"headers": {
- "content-encoding": "gzip",
- "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version": "2023-11-03"
},
"body": {
"encoding": "base64",
- "data": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
+ "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
}
}
}
@@ -20821,75 +20984,28 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-16c44f0af72d\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 42
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "CVsDGvNMZH4SPA4MSLswrA=="
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
- }
- },
- {
- "at": "/value/content_encoding",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "gzip"
+ "value": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-content-properties",
+ "id": "operations/azure/get-noise-tolerance",
"profile": "azure",
"lane": "core",
- "purpose": "Return the stored content properties from a GET",
+ "purpose": "get noise tolerance",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
+ "origin": "constructed",
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object",
"op": "get"
},
"exchanges": [
@@ -20910,7 +21026,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object"
}
},
{
@@ -20927,26 +21043,25 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
- "content-type": "text/plain; charset=utf-8",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"a-different-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-fixture-unknown": "ignored",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "another-id",
+ "x-ms-request-server-encrypted": "true",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version": "2023-11-03"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "aGVsbG8="
}
}
}
@@ -20962,91 +21077,29 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-16c44f0af72d\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain; charset=utf-8"
- }
- },
- {
- "at": "/value/content_language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
- }
- },
- {
- "at": "/value/content_disposition",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "attachment; filename=\"report.txt\""
- }
- },
- {
- "at": "/value/cache_control",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "max-age=3600"
+ "value": "aGVsbG8="
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-with-staged-blocks",
+ "id": "operations/azure/get-body-cut-short",
"profile": "azure",
"lane": "core",
- "purpose": "get with staged blocks",
+ "purpose": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://www.rfc-editor.org/rfc/rfc9112#section-8",
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_client.cpp"
],
+ "origin": "transient",
"call": {
- "key": "object-tests/multipart/pending.bin",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -21067,7 +21120,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/pending.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21084,93 +21137,29 @@
"response": {
"status": 200,
"headers": {
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-9c5ca12bcfc9\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.6314295Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": "Zmlyc3RzZWNvbmQ="
- }
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ },
+ "truncate_body_after": 15
}
}
]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-9c5ca12bcfc9\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 11
- }
},
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.6314295Z"
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Zmlyc3RzZWNvbmQ="
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/head-committed-declaring-md5",
- "profile": "azure",
- "lane": "core",
- "purpose": "head committed declaring md5",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/hashes/committed.bin",
- "op": "head"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -21180,7 +21169,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21188,7 +21177,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/committed.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21200,102 +21189,33 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-length": "13",
- "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-39ee25525bc6\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2802899Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-39ee25525bc6\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 13
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.2802899Z"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/head-committed",
- "profile": "azure",
- "lane": "core",
- "purpose": "head committed",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/multipart/committed.bin",
- "op": "head"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -21303,7 +21223,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21311,7 +21231,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/committed.bin"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21321,95 +21241,49 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=15-"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-16c44f0af72d\""
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-length": "11",
+ "content-range": "bytes 15-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-be8efdb79010\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7848460Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "Y3QtdGVzdHMtb2JqZWN0"
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-be8efdb79010\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 11
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7848460Z"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/head-metadata",
- "profile": "azure",
- "lane": "core",
- "purpose": "head metadata",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/metadata/object.txt",
- "op": "head"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -21417,7 +21291,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21425,7 +21299,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21435,37 +21309,51 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=15-"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-16c44f0af72d\""
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-length": "1",
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-range": "bytes 15-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-9abbc5e374ca\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-meta-name": "value",
- "x-ms-meta-second": "2",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "Y3QtdGVzdHMtb2JqZWN0"
}
}
}
- ]
+ ],
+ "optional": true
}
],
"expect": [
@@ -21473,75 +21361,37 @@
"at": "/outcome",
"optional": false,
"rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-9abbc5e374ca\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7035036Z"
+ "is": "one_of",
+ "values": [
+ "error",
+ "ok"
+ ]
}
},
{
- "at": "/value/metadata",
- "optional": false,
+ "at": "/value/body_base64",
+ "optional": true,
"rule": {
"is": "equal",
- "value": {
- "name": "value",
- "second": "2"
- }
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-missing",
+ "id": "operations/azure/get-server-busy",
"profile": "azure",
"lane": "core",
- "purpose": "head missing. A client reports it as not_found: the object is absent",
+ "purpose": "Report a 503 ServerBusy answer as an error, after at most 5 retries",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "transient",
"call": {
- "key": "object-tests/read/absent.txt",
- "op": "head"
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -21553,7 +21403,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21561,7 +21411,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/absent.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21576,20 +21426,266 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 503,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "x-ms-error-code": "ServerBusy"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
}
}
}
]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyThe server is currently unable to receive requests. Please retry your request."
+ }
+ }
+ }
+ ],
+ "optional": true
}
],
"expect": [
@@ -21606,7 +21702,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 503
}
},
{
@@ -21614,32 +21710,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "not_found"
+ "value": "ServerBusy"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-previous-version",
+ "id": "operations/azure/get-if-unmodified-since-past",
"profile": "azure",
"lane": "core",
- "purpose": "head previous version",
+ "purpose": "Refuse a read with 412 when the object changed after If-Unmodified-Since",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/versions-mtydohr2/object.txt",
- "op": "head",
- "version": "2024-01-01T00:00:00.2318906Z"
+ "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -21651,7 +21739,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21659,7 +21747,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21671,35 +21759,28 @@
}
},
{
- "at": "/query/versionid",
+ "at": "/headers/if-unmodified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2318906Z"
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
- "content-length": "2",
- "content-md5": "ZlTHNMyrj0QP8IJetEPcfw==",
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-5769a0807b46\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2318906Z"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "ConditionNotMetFixture error"
}
}
}
@@ -21712,64 +21793,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-5769a0807b46\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
+ "value": "error"
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "ZlTHNMyrj0QP8IJetEPcfw=="
+ "value": 412
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2318906Z"
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-snapshot",
+ "id": "operations/azure/get-if-modified-since-future",
"profile": "azure",
"lane": "core",
- "purpose": "head snapshot",
+ "purpose": "Report 304 when If-Modified-Since names a future date, which Azure does not ignore",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/snapshots/object.txt",
- "op": "head",
- "snapshot": "2024-01-01T00:00:00.7351568Z"
+ "if_modified_since": "Fri, 01 Jan 2100 00:00:00 GMT",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -21781,7 +21838,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21789,7 +21846,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/snapshots/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21801,34 +21858,26 @@
}
},
{
- "at": "/query/snapshot",
+ "at": "/headers/if-modified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7351568Z"
+ "value": "Fri, 01 Jan 2100 00:00:00 GMT"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 304,
"headers": {
- "content-length": "3",
- "content-md5": "+XxdKZQb+xsv2rCHSQargg==",
- "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-e3698635ab53\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-server-encrypted": "true"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -21841,66 +21890,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-e3698635ab53\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 3
+ "value": "error"
}
},
{
- "at": "/value/content_type",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "application/octet-stream"
+ "value": 304
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-written-with-crc64",
+ "id": "operations/azure/get-if-modified-since-past",
"profile": "azure",
"lane": "core",
- "purpose": "head written with crc64",
+ "purpose": "Read an object modified since a past date",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/hashes/crc64.txt",
- "op": "head"
+ "if_modified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -21912,7 +21935,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -21920,7 +21943,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/crc64.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -21930,6 +21953,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/if-modified-since",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ }
}
],
"allow_headers": [],
@@ -21937,24 +21968,23 @@
"response": {
"status": 200,
"headers": {
- "content-length": "13",
- "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-90cfcb93036b\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.1153123Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -21975,7 +22005,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-90cfcb93036b\""
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
@@ -21983,7 +22013,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 13
+ "value": 30
}
},
{
@@ -21999,7 +22029,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
}
},
{
@@ -22007,23 +22037,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1153123Z"
+ "value": "2024-01-01T00:00:00.7556278Z"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-written-with-md5",
+ "id": "operations/azure/get-content-encoding-gzip",
"profile": "azure",
"lane": "core",
- "purpose": "head written with md5",
+ "purpose": "Return the stored gzip bytes and Content-Encoding: gzip without decoding them",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/hashes/md5.txt",
- "op": "head"
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -22035,7 +22073,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -22043,7 +22081,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/md5.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -22060,24 +22098,24 @@
"response": {
"status": 200,
"headers": {
- "content-length": "13",
- "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-encoding": "gzip",
+ "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-494ad7275bf7\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7803759Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
}
}
}
@@ -22098,7 +22136,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-494ad7275bf7\""
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
@@ -22106,7 +22144,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 13
+ "value": 42
}
},
{
@@ -22122,7 +22160,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ "value": "CVsDGvNMZH4SPA4MSLswrA=="
}
},
{
@@ -22130,23 +22168,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7803759Z"
+ "value": "2024-01-01T00:00:00.7556278Z"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
+ }
+ },
+ {
+ "at": "/value/content_encoding",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "gzip"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head",
+ "id": "operations/azure/get-content-properties",
"profile": "azure",
"lane": "core",
- "purpose": "head",
+ "purpose": "Return the stored content properties from a GET",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"key": "object-tests/read/object.txt",
- "op": "head"
+ "op": "get"
},
"exchanges": [
{
@@ -22158,7 +22212,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -22183,9 +22237,11 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
"content-md5": "H1VC0PNTmj+yaCRN4U931g==",
- "content-type": "application/octet-stream",
+ "content-type": "text/plain; charset=utf-8",
"date": {
"from": "now"
},
@@ -22200,7 +22256,7 @@
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -22232,44 +22288,76 @@
"value": 30
}
},
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ },
{
"at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": "application/octet-stream"
+ "value": "text/plain; charset=utf-8"
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/value/content_language",
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "nl-NL"
}
},
{
- "at": "/value/version",
+ "at": "/value/content_disposition",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/value/cache_control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-question",
+ "id": "operations/azure/get-with-staged-blocks",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"question?mark.txt\"",
+ "purpose": "get with staged blocks",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/question?mark.txt",
- "op": "head"
+ "key": "object-tests/multipart/pending.bin",
+ "op": "get"
},
"exchanges": [
{
@@ -22281,7 +22369,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "HEAD"
+ "value": "GET"
}
},
{
@@ -22289,7 +22377,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
+ "value": "/fixture/object-tests/multipart/pending.bin"
}
},
{
@@ -22306,24 +22394,22 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-9c5ca12bcfc9\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.6314295Z"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "Zmlyc3RzZWNvbmQ="
}
}
}
@@ -22344,7 +22430,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-9c5ca12bcfc9\""
}
},
{
@@ -22352,7 +22438,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 11
}
},
{
@@ -22364,34 +22450,34 @@
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "2024-01-01T00:00:00.6314295Z"
}
},
{
- "at": "/value/version",
+ "at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "Zmlyc3RzZWNvbmQ="
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-hash",
+ "id": "operations/azure/head-committed-declaring-md5",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"hash#tag.txt\"",
+ "purpose": "head committed declaring md5",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/hash#tag.txt",
+ "key": "object-tests/hashes/committed.bin",
"op": "head"
},
"exchanges": [
@@ -22412,7 +22498,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
+ "value": "/fixture/object-tests/hashes/committed.bin"
}
},
{
@@ -22429,20 +22515,20 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "13",
+ "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-39ee25525bc6\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.2802899Z"
},
"body": {
"encoding": "base64",
@@ -22467,7 +22553,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-39ee25525bc6\""
}
},
{
@@ -22475,7 +22561,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 13
}
},
{
@@ -22491,7 +22577,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
}
},
{
@@ -22499,22 +22585,22 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.2802899Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-percent",
+ "id": "operations/azure/head-committed",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"percent%20.txt\"",
+ "purpose": "head committed",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/percent%20.txt",
+ "key": "object-tests/multipart/committed.bin",
"op": "head"
},
"exchanges": [
@@ -22535,7 +22621,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
+ "value": "/fixture/object-tests/multipart/committed.bin"
}
},
{
@@ -22552,20 +22638,19 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "11",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-be8efdb79010\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7848460Z"
},
"body": {
"encoding": "base64",
@@ -22590,7 +22675,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-be8efdb79010\""
}
},
{
@@ -22598,7 +22683,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 11
}
},
{
@@ -22609,35 +22694,27 @@
"value": "application/octet-stream"
}
},
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
{
"at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.7848460Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-plus",
+ "id": "operations/azure/head-metadata",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"plus+plus.txt\"",
+ "purpose": "head metadata",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/plus+plus.txt",
+ "key": "object-tests/metadata/object.txt",
"op": "head"
},
"exchanges": [
@@ -22658,7 +22735,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
+ "value": "/fixture/object-tests/metadata/object.txt"
}
},
{
@@ -22675,20 +22752,22 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "1",
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-9abbc5e374ca\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
+ "x-ms-meta-name": "value",
+ "x-ms-meta-second": "2",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
},
"body": {
"encoding": "base64",
@@ -22713,7 +22792,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-9abbc5e374ca\""
}
},
{
@@ -22721,7 +22800,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 1
}
},
{
@@ -22737,7 +22816,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -22745,22 +22824,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.7035036Z"
+ }
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "name": "value",
+ "second": "2"
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-space",
+ "id": "operations/azure/head-missing",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"space name.txt\"",
+ "purpose": "head missing. A client reports it as not_found: the object is absent",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/space name.txt",
+ "key": "object-tests/read/absent.txt",
"op": "head"
},
"exchanges": [
@@ -22781,7 +22871,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture/object-tests/read/absent.txt"
}
},
{
@@ -22796,22 +22886,12 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
- "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
"encoding": "base64",
@@ -22828,63 +22908,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-16c44f0af72d\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
+ "value": "error"
}
},
{
- "at": "/value/content_type",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "application/octet-stream"
+ "value": 404
}
},
{
- "at": "/value/content_md5_base64",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "BlobNotFound"
}
},
{
- "at": "/value/version",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-non-ascii",
+ "id": "operations/azure/head-previous-version",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"café/雪.txt\"",
+ "purpose": "head previous version",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/café/雪.txt",
- "op": "head"
+ "key": "object-tests/versions-mtydohr2/object.txt",
+ "op": "head",
+ "version": "2024-01-01T00:00:00.2318906Z"
},
"exchanges": [
{
@@ -22904,7 +22969,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
}
},
{
@@ -22914,6 +22979,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/versionid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2318906Z"
+ }
}
],
"allow_headers": [],
@@ -22921,20 +22994,18 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "2",
+ "content-md5": "ZlTHNMyrj0QP8IJetEPcfw==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-5769a0807b46\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.2318906Z"
},
"body": {
"encoding": "base64",
@@ -22959,7 +23030,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-5769a0807b46\""
}
},
{
@@ -22967,7 +23038,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 2
}
},
{
@@ -22983,7 +23054,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "ZlTHNMyrj0QP8IJetEPcfw=="
}
},
{
@@ -22991,23 +23062,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.2318906Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-double-slash",
+ "id": "operations/azure/head-snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"double//slash.txt\"",
+ "purpose": "head snapshot",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/double//slash.txt",
- "op": "head"
+ "key": "object-tests/snapshots/object.txt",
+ "op": "head",
+ "snapshot": "2024-01-01T00:00:00.7351568Z"
},
"exchanges": [
{
@@ -23027,7 +23099,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture/object-tests/snapshots/object.txt"
}
},
{
@@ -23037,6 +23109,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/snapshot",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7351568Z"
+ }
}
],
"allow_headers": [],
@@ -23044,20 +23124,17 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "3",
+ "content-md5": "+XxdKZQb+xsv2rCHSQargg==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-e3698635ab53\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-server-encrypted": "true"
},
"body": {
"encoding": "base64",
@@ -23082,7 +23159,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-e3698635ab53\""
}
},
{
@@ -23090,7 +23167,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 3
}
},
{
@@ -23106,30 +23183,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
}
},
{
"at": "/value/version",
- "optional": false,
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-key-trailing-slash",
+ "id": "operations/azure/head-written-with-crc64",
"profile": "azure",
"lane": "core",
- "purpose": "head, with the key \"trailing-slash/\"",
+ "purpose": "head written with crc64",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/trailing-slash/",
+ "key": "object-tests/hashes/crc64.txt",
"op": "head"
},
"exchanges": [
@@ -23150,7 +23230,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
+ "value": "/fixture/object-tests/hashes/crc64.txt"
}
},
{
@@ -23167,20 +23247,20 @@
"response": {
"status": 200,
"headers": {
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-length": "13",
+ "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-90cfcb93036b\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.1153123Z"
},
"body": {
"encoding": "base64",
@@ -23205,7 +23285,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-90cfcb93036b\""
}
},
{
@@ -23213,7 +23293,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 13
}
},
{
@@ -23229,7 +23309,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
}
},
{
@@ -23237,22 +23317,22 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": "2024-01-01T00:00:00.1153123Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-content-properties",
+ "id": "operations/azure/head-written-with-md5",
"profile": "azure",
"lane": "core",
- "purpose": "Return the stored content properties from a HEAD",
+ "purpose": "head written with md5",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object-tests/hashes/md5.txt",
"op": "head"
},
"exchanges": [
@@ -23273,7 +23353,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object-tests/hashes/md5.txt"
}
},
{
@@ -23290,23 +23370,20 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-length": "30",
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
- "content-type": "text/plain; charset=utf-8",
+ "content-length": "13",
+ "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-16c44f0af72d\"",
+ "etag": "\"fixture-494ad7275bf7\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
"x-ms-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.7803759Z"
},
"body": {
"encoding": "base64",
@@ -23331,7 +23408,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-16c44f0af72d\""
+ "value": "\"fixture-494ad7275bf7\""
}
},
{
@@ -23339,23 +23416,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7556278Z"
+ "value": 13
}
},
{
@@ -23363,46 +23424,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain; charset=utf-8"
- }
- },
- {
- "at": "/value/content_language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
+ "value": "application/octet-stream"
}
},
{
- "at": "/value/content_disposition",
+ "at": "/value/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "attachment; filename=\"report.txt\""
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
}
},
{
- "at": "/value/cache_control",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "max-age=3600"
+ "value": "2024-01-01T00:00:00.7803759Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-if-unmodified-since-past",
+ "id": "operations/azure/head",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
+ "purpose": "head",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "head"
},
@@ -23434,28 +23486,31 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/headers/if-unmodified-since",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 200,
"headers": {
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -23468,38 +23523,62 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "ConditionNotMet"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-copy-status",
+ "id": "operations/azure/head-key-question",
"profile": "azure",
"lane": "core",
- "purpose": "Report the copy that wrote a blob, its x-ms-copy-status and x-ms-copy-id, from a HEAD of the blob",
+ "purpose": "head, with the key \"question?mark.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-properties"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
+ "key": "object-tests/keys/question?mark.txt",
"op": "head"
},
"exchanges": [
@@ -23520,7 +23599,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/question?mark.txt"
}
},
{
@@ -23537,7 +23616,8 @@
"response": {
"status": 200,
"headers": {
- "content-length": "5",
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -23545,18 +23625,15 @@
"etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
- "x-ms-copy-completion-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-progress": "5/5",
- "x-ms-copy-source": "https://fixture.blob.core.windows.net/fixture/object-tests/copy/source.txt",
- "x-ms-copy-status": "success",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true"
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -23573,34 +23650,58 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/value/copy_id",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-access-tier",
+ "id": "operations/azure/head-key-hash",
"profile": "azure",
"lane": "core",
- "purpose": "Report a blob's access tier, which Azure sends in x-ms-access-tier",
+ "purpose": "head, with the key \"hash#tag.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object-tests/keys/hash#tag.txt",
"op": "head"
},
"exchanges": [
@@ -23621,7 +23722,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
}
},
{
@@ -23646,7 +23747,6 @@
},
"etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-access-tier": "Cool",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
@@ -23673,26 +23773,58 @@
}
},
{
- "at": "/value/access_tier",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "Cool"
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/head-rehydrating",
+ "id": "operations/azure/head-key-percent",
"profile": "azure",
"lane": "core",
- "purpose": "Report the x-ms-archive-status header of a rehydrating blob as its restore status",
+ "purpose": "head, with the key \"percent%20.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-properties"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/archive/object.txt",
+ "key": "object-tests/keys/percent%20.txt",
"op": "head"
},
"exchanges": [
@@ -23713,7 +23845,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/archive/object.txt"
+ "value": "/fixture/object-tests/keys/percent%20.txt"
}
},
{
@@ -23738,8 +23870,6 @@
},
"etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-access-tier": "Archive",
- "x-ms-archive-status": "rehydrate-pending-to-hot",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
@@ -23798,29 +23928,27 @@
}
},
{
- "at": "/value/restore_status",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "rehydrate-pending-to-hot"
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/restore-not-archived",
+ "id": "operations/azure/head-key-plus",
"profile": "azure",
"lane": "core",
- "purpose": "Restore a blob that is online already, which Azure answers with 200 as a readable blob",
+ "purpose": "head, with the key \"plus+plus.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/archive/object.txt",
- "op": "restore",
- "priority": "standard",
- "tier": "Hot"
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -23832,7 +23960,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "HEAD"
}
},
{
@@ -23840,7 +23968,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/archive/object.txt"
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
}
},
{
@@ -23850,30 +23978,6 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tier"
- }
- },
- {
- "at": "/headers/x-ms-access-tier",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Hot"
- }
- },
- {
- "at": "/headers/x-ms-rehydrate-priority",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Standard"
- }
}
],
"allow_headers": [],
@@ -23881,12 +23985,24 @@
"response": {
"status": 200,
"headers": {
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -23903,29 +24019,59 @@
}
},
{
- "at": "/value/state",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "readable"
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/restore-while-rehydrating",
+ "id": "operations/azure/head-key-space",
"profile": "azure",
"lane": "core",
- "purpose": "Rehydrate a blob to another tier while it rehydrates",
+ "purpose": "head, with the key \"space name.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/archive/object.txt",
- "op": "restore",
- "priority": "standard",
- "tier": "Cool"
+ "key": "object-tests/keys/space name.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -23937,7 +24083,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "HEAD"
}
},
{
@@ -23945,7 +24091,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/archive/object.txt"
+ "value": "/fixture/object-tests/keys/space name.txt"
}
},
{
@@ -23955,46 +24101,31 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tier"
- }
- },
- {
- "at": "/headers/x-ms-access-tier",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Cool"
- }
- },
- {
- "at": "/headers/x-ms-rehydrate-priority",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Standard"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobBeingRehydrated"
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "utf8",
- "data": "BlobBeingRehydratedFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -24007,41 +24138,63 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobBeingRehydrated"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/restore-high-priority",
+ "id": "operations/azure/head-key-non-ascii",
"profile": "azure",
"lane": "core",
- "purpose": "Start rehydrating an archived blob to Cool at High priority",
+ "purpose": "head, with the key \"café/雪.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/archive/object.txt",
- "op": "restore",
- "priority": "high",
- "tier": "Cool"
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -24053,7 +24206,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "HEAD"
}
},
{
@@ -24061,7 +24214,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/archive/object.txt"
+ "value": "/fixture/object-tests/keys/café/雪.txt"
}
},
{
@@ -24071,43 +24224,31 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tier"
- }
- },
- {
- "at": "/headers/x-ms-access-tier",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Cool"
- }
- },
- {
- "at": "/headers/x-ms-rehydrate-priority",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "High"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -24124,29 +24265,59 @@
}
},
{
- "at": "/value/state",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "started"
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/restore",
+ "id": "operations/azure/head-key-double-slash",
"profile": "azure",
"lane": "core",
- "purpose": "Start rehydrating an archived blob to Hot at Standard priority, which Azure accepts with 202",
+ "purpose": "head, with the key \"double//slash.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/archive/object.txt",
- "op": "restore",
- "priority": "standard",
- "tier": "Hot"
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -24158,7 +24329,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "HEAD"
}
},
{
@@ -24166,7 +24337,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/archive/object.txt"
+ "value": "/fixture/object-tests/keys/double//slash.txt"
}
},
{
@@ -24176,43 +24347,31 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tier"
- }
- },
- {
- "at": "/headers/x-ms-access-tier",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Hot"
- }
- },
- {
- "at": "/headers/x-ms-rehydrate-priority",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Standard"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -24229,27 +24388,59 @@
}
},
{
- "at": "/value/state",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "started"
+ "value": "\"fixture-16c44f0af72d\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-after-delete-with-versions",
+ "id": "operations/azure/head-key-trailing-slash",
"profile": "azure",
"lane": "core",
- "purpose": "list after delete with versions",
+ "purpose": "head, with the key \"trailing-slash/\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/versions-mtydohr2/deleted.txt"
+ "key": "object-tests/keys/trailing-slash/",
+ "op": "head"
},
"exchanges": [
{
@@ -24261,7 +24452,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -24269,7 +24460,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/keys/trailing-slash/"
}
},
{
@@ -24279,30 +24470,6 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/versions-mtydohr2/deleted.txt"
- }
}
],
"allow_headers": [],
@@ -24310,18 +24477,25 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/versions-mtydohr2/deleted.txt"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -24337,44 +24511,59 @@
}
},
{
- "at": "/value/entries",
+ "at": "/value/etag",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/size",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 30
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-bad-marker",
+ "id": "operations/azure/head-content-properties",
"profile": "azure",
"lane": "core",
- "purpose": "list bad marker",
+ "purpose": "Return the stored content properties from a HEAD",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "continuation_token": "fixture-marker+/1d52c72a655f=",
- "op": "list_page",
- "prefix": "object-tests/board/"
+ "key": "object-tests/read/object.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -24386,7 +24575,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -24394,7 +24583,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -24404,54 +24593,34 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/marker",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-marker+/1d52c72a655f="
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "text/plain; charset=utf-8",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidQueryParameterValue"
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidQueryParameterValueFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -24464,43 +24633,88 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidQueryParameterValue"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7556278Z"
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain; charset=utf-8"
+ }
+ },
+ {
+ "at": "/value/content_language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl-NL"
+ }
+ },
+ {
+ "at": "/value/content_disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/value/cache_control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-bad-marker-code-in-body",
+ "id": "operations/azure/head-if-unmodified-since-past",
"profile": "azure",
"lane": "core",
- "purpose": "list bad marker, with the error code only in the XML body",
+ "purpose": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
"call": {
- "continuation_token": "fixture-marker+/1d52c72a655f=",
- "op": "list_page",
- "prefix": "object-tests/board/"
+ "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "key": "object-tests/read/object.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -24512,7 +24726,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -24520,7 +24734,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -24532,51 +24746,26 @@
}
},
{
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/marker",
+ "at": "/headers/if-unmodified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-marker+/1d52c72a655f="
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 412,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidQueryParameterValueFixture error"
+ "encoding": "empty"
}
}
}
@@ -24597,7 +24786,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 412
}
},
{
@@ -24605,23 +24794,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidQueryParameterValue"
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-container-missing",
+ "id": "operations/azure/head-copy-status",
"profile": "azure",
"lane": "core",
- "purpose": "list container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
+ "purpose": "Report the copy that wrote a blob, its x-ms-copy-status and x-ms-copy-id, from a HEAD of the blob",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-properties"
],
"call": {
- "op": "list_page",
- "prefix": ""
+ "key": "object-tests/copy/target.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -24633,7 +24822,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -24641,7 +24830,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -24651,46 +24840,33 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": ""
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-length": "5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "ContainerNotFound"
+ "etag": "\"fixture-16c44f0af72d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-copy-completion-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-progress": "5/5",
+ "x-ms-copy-source": "https://fixture.blob.core.windows.net/fixture/object-tests/copy/source.txt",
+ "x-ms-copy-status": "success",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ContainerNotFoundFixture error"
+ "encoding": "empty"
}
}
}
@@ -24703,48 +24879,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 404
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "ContainerNotFound"
+ "value": "success"
}
},
{
- "at": "/kind",
+ "at": "/value/copy_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "container_not_found"
+ "value": "fixture-copy-id"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-delimited",
+ "id": "operations/azure/set-properties-all",
"profile": "azure",
"lane": "core",
- "purpose": "list delimited",
+ "purpose": "Set every content property with Set Blob Properties, each in its x-ms-blob- header: content type, encoding, language, disposition and cache control",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-properties"
],
"call": {
- "delimiter": "/",
- "op": "list_page",
- "prefix": "object-tests/board/"
+ "cache_control": "no-cache",
+ "content_disposition": "attachment; filename=\"data.json\"",
+ "content_encoding": "gzip",
+ "content_language": "nl",
+ "content_type": "application/json",
+ "key": "object-tests/properties/object.txt",
+ "op": "azure.set_properties"
},
"exchanges": [
{
@@ -24756,7 +24928,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -24764,7 +24936,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/properties/object.txt"
}
},
{
@@ -24776,35 +24948,51 @@
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "properties"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "application/json"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-blob-content-encoding",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "gzip"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/x-ms-blob-content-language",
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
+ "value": "nl"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"data.json\""
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "no-cache"
}
}
],
@@ -24813,18 +25001,15 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/board//object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/object-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
+ "encoding": "empty"
+ }
}
}
]
@@ -24840,170 +25025,128 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/a.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 8
- }
- },
- {
- "at": "/value/entries/0/etag",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-704c5ddfc8cb"
+ "value": "\"fixture-etag\""
}
- },
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/set-properties",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Set a blob's content type with Set Blob Properties: a PUT with comp=properties and x-ms-blob-content-type. It replaces all content properties, so the cache control and the stored Content-MD5 it does not name are cleared",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-properties"
+ ],
+ "call": {
+ "content_type": "application/json",
+ "key": "object-tests/properties/object.txt",
+ "op": "azure.set_properties"
+ },
+ "exchanges": [
{
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/z.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-b905747bf74f"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3834597Z"
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/1/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Je0by0I7C3IA9IX8X/ccjg=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "properties"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/json"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
{
- "at": "/value/prefixes/0",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/nested/"
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "ok"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-other-delimiter",
+ "id": "operations/azure/set-metadata-missing",
"profile": "azure",
"lane": "core",
- "purpose": "Send the delimiter the caller names. A flat account groups blob names at any delimiter, not only /; here a- groups a-1.txt and a-2.txt",
+ "purpose": "Report Set Blob Metadata on a blob that does not exist as not found, 404 BlobNotFound",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
],
"call": {
- "delimiter": "-",
- "op": "list_page",
- "prefix": "object-tests/dashes/"
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
},
"exchanges": [
{
@@ -25015,7 +25158,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -25023,7 +25166,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/properties/object.txt"
}
},
{
@@ -25034,56 +25177,38 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/dashes/"
+ "value": "metadata"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/x-ms-meta-shape",
"optional": false,
"rule": {
"is": "equal",
- "value": "-"
+ "value": "round"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
"encoding": "utf8",
- "data": "object-tests/dashes/-object-tests/dashes/a-object-tests/dashes/b.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb1application/octet-streamkutf/uauL+w61xx3dTFXjw==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
+ "data": "BlobNotFoundFixture error"
+ }
}
}
]
@@ -25095,87 +25220,51 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/dashes/b.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-704c5ddfc8cb"
+ "value": "error"
}
},
{
- "at": "/value/entries/0/version",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": 404
}
},
{
- "at": "/value/prefixes/0",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/dashes/a-"
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "BlobNotFound"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-empty",
+ "id": "operations/azure/set-metadata-if-match-failed",
"profile": "azure",
"lane": "core",
- "purpose": "list empty",
+ "purpose": "Report Set Blob Metadata with an If-Match the blob does not have as a failed condition, 412 ConditionNotMet, which leaves the metadata as it was",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/nothing/"
+ "if_match": "\"0x8DEADBEEF000000\"",
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
},
"exchanges": [
{
@@ -25187,7 +25276,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -25195,7 +25284,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/properties/object.txt"
}
},
{
@@ -25207,47 +25296,45 @@
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "metadata"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-meta-shape",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "round"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/nothing/"
+ "value": "\"0x8DEADBEEF000000\""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "object-tests/nothing/"
- },
- "framing": "chunked"
+ "data": "ConditionNotMetFixture error"
+ }
}
}
]
@@ -25259,47 +25346,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/entries",
+ "at": "/status",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 412
}
},
{
- "at": "/value/prefixes",
+ "at": "/code",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "ConditionNotMet"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "precondition"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-all-empty",
+ "id": "operations/azure/set-metadata-empty",
"profile": "azure",
"lane": "core",
- "purpose": "list empty",
+ "purpose": "Clear a blob's metadata with Set Blob Metadata and no x-ms-meta- header",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
],
"call": {
- "op": "list",
- "prefix": ""
+ "key": "object-tests/properties/object.txt",
+ "metadata": {},
+ "op": "azure.set_metadata"
},
"exchanges": [
{
@@ -25311,7 +25399,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -25319,7 +25407,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/properties/object.txt"
}
},
{
@@ -25330,28 +25418,12 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": ""
+ "value": "metadata"
}
}
],
@@ -25360,26 +25432,16 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "base64",
- "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PC9CbG9icz48TmV4dE1hcmtlcj48L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+"
- },
- "framing": "chunked"
+ "encoding": "empty"
+ }
}
}
]
@@ -25395,27 +25457,30 @@
}
},
{
- "at": "/value/keys",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": []
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-encoded-names",
+ "id": "operations/azure/set-metadata",
"profile": "azure",
"lane": "core",
- "purpose": "list encoded names",
+ "purpose": "Replace a blob's metadata with Set Blob Metadata: a PUT with comp=metadata and an x-ms-meta- header for each pair. It replaces all metadata, so a name it leaves out is gone",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/names/"
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
},
"exchanges": [
{
@@ -25427,7 +25492,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -25435,7 +25500,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/properties/object.txt"
}
},
{
@@ -25446,28 +25511,20 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "metadata"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-meta-shape",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/names/"
+ "value": "round"
}
}
],
@@ -25476,18 +25533,16 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/names/object-tests%2Fnames%2F100%25-%EF%BF%BE-name.txt2024-01-01T00:00:00.6773769ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b0016e7eea411application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/a&b.txt2024-01-01T00:00:00.9293679ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e0cf2e36cfe61application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/back/slash.txt2024-01-01T00:00:00.8649025ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-fb1ea388bc8f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/café.txt2024-01-01T00:00:00.0714249ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4dfcbd136b001application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/hash#tag.txt2024-01-01T00:00:00.9185620ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-a7996d03132f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/percent%20.txt2024-01-01T00:00:00.5807236ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-5e82da751e9c1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/plus+plus.txt2024-01-01T00:00:00.8000075ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7dc03e94613e1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/q?mark.txt2024-01-01T00:00:00.3314072ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f727e794361application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
+ "encoding": "empty"
+ }
}
}
]
@@ -25503,515 +25558,27 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/100%--name.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-b0016e7eea41"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.6773769Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/a&b.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-e0cf2e36cfe6"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9293679Z"
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/1/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/back/slash.txt"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-fb1ea388bc8f"
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.8649025Z"
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/2/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/3/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/café.txt"
- }
- },
- {
- "at": "/value/entries/3/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/3/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-4dfcbd136b00"
- }
- },
- {
- "at": "/value/entries/3/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/3/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.0714249Z"
- }
- },
- {
- "at": "/value/entries/3/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/3/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/4/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/hash#tag.txt"
- }
- },
- {
- "at": "/value/entries/4/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/4/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-a7996d03132f"
- }
- },
- {
- "at": "/value/entries/4/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/4/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9185620Z"
- }
- },
- {
- "at": "/value/entries/4/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/4/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/5/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/percent%20.txt"
- }
- },
- {
- "at": "/value/entries/5/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/5/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-5e82da751e9c"
- }
- },
- {
- "at": "/value/entries/5/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/5/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.5807236Z"
- }
- },
- {
- "at": "/value/entries/5/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/5/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/6/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/plus+plus.txt"
- }
- },
- {
- "at": "/value/entries/6/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/6/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-7dc03e94613e"
- }
- },
- {
- "at": "/value/entries/6/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.8000075Z"
- }
- },
- {
- "at": "/value/entries/6/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/6/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/7/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/names/q?mark.txt"
- }
- },
- {
- "at": "/value/entries/7/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/7/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-91f727e79436"
- }
- },
- {
- "at": "/value/entries/7/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/7/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3314072Z"
- }
- },
- {
- "at": "/value/entries/7/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/7/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 8
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-xml-escaped",
+ "id": "operations/azure/head-access-tier",
"profile": "azure",
"lane": "core",
- "purpose": "list xml escaped",
+ "purpose": "Report a blob's access tier, which Azure sends in x-ms-access-tier",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "op": "list",
- "prefix": ""
+ "key": "object-tests/read/object.txt",
+ "op": "head"
},
"exchanges": [
{
@@ -26023,7 +25590,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -26031,7 +25598,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -26041,30 +25608,6 @@
"is": "equal",
"value": ""
}
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": ""
- }
}
],
"allow_headers": [],
@@ -26072,26 +25615,26 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-length": "30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-16c44f0af72d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-access-tier": "Cool",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
"x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-version-id": "2024-01-01T00:00:00.7556278Z"
},
"body": {
"encoding": "base64",
- "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+YSZhbXA7YjwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YyZsdDtkPC9OYW1lPjxQcm9wZXJ0aWVzPjxMYXN0LU1vZGlmaWVkPk1vbiwgMDEgSmFuIDIwMjQgMDA6MDA6MDAgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPiJmaXh0dXJlIjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4="
- },
- "framing": "chunked"
+ "data": ""
+ }
}
}
]
@@ -26107,31 +25650,27 @@
}
},
{
- "at": "/value/keys",
+ "at": "/value/access_tier",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- "a&b",
- "cobject-tests/board/2object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletruefixture-marker+/c42f89fa82e8="
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -26227,162 +25743,61 @@
}
},
{
- "at": "/value/entries/0/key",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/a.txt"
+ "value": "\"fixture-16c44f0af72d\""
}
},
{
- "at": "/value/entries/0/size",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": 8
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-704c5ddfc8cb"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/nested/c.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-48ff0e151ab7"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7881326Z"
+ "value": 30
}
},
{
- "at": "/value/entries/1/is_current_version",
+ "at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": true
+ "value": "application/octet-stream"
}
},
{
- "at": "/value/entries/1/content_md5_base64",
+ "at": "/value/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "SooI8J03tzeVZJA4QItfMw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/restore_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-marker+/c42f89fa82e8="
+ "value": "rehydrate-pending-to-hot"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-page-size-one",
+ "id": "operations/azure/restore-not-archived",
"profile": "azure",
"lane": "core",
- "purpose": "A page of zero entries is out of range, but a page of one is not. Send a page size of 1 and report the one entry and the continuation token.",
+ "purpose": "Restore a blob that is online already, which Azure answers with 200 as a readable blob",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
],
"call": {
- "op": "list_page",
- "page_size": 1,
- "prefix": "object-tests/board/"
+ "key": "object-tests/archive/object.txt",
+ "op": "restore",
+ "priority": "standard",
+ "tier": "Hot"
},
"exchanges": [
{
@@ -26394,7 +25809,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -26402,7 +25817,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/archive/object.txt"
}
},
{
@@ -26413,36 +25828,28 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "tier"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "Hot"
}
},
{
- "at": "/query/maxresults",
+ "at": "/headers/x-ms-rehydrate-priority",
"optional": false,
"rule": {
"is": "equal",
- "value": "1"
+ "value": "Standard"
}
}
],
@@ -26451,18 +25858,13 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- },
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/board/1object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletruefixture-marker+/c42f89fa82e8="
- },
- "framing": "chunked"
+ "encoding": "empty"
+ }
}
}
]
@@ -26478,105 +25880,29 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/a.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 8
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-704c5ddfc8cb"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
+ "at": "/value/state",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-marker+/c42f89fa82e8="
+ "value": "readable"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-operation-timed-out",
+ "id": "operations/azure/restore-while-rehydrating",
"profile": "azure",
"lane": "core",
- "purpose": "Report a 500 OperationTimedOut answer as an error, after at most 5 retries",
+ "purpose": "Rehydrate a blob to another tier while it rehydrates",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
],
- "origin": "transient",
"call": {
- "op": "list_page",
- "page_size": 2,
- "prefix": "object-tests/board/"
+ "key": "object-tests/archive/object.txt",
+ "op": "restore",
+ "priority": "standard",
+ "tier": "Cool"
},
"exchanges": [
{
@@ -26588,7 +25914,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -26596,7 +25922,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/archive/object.txt"
}
},
{
@@ -26607,58 +25933,94 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "tier"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "Cool"
}
},
{
- "at": "/query/maxresults",
+ "at": "/headers/x-ms-rehydrate-priority",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "Standard"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 409,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "OperationTimedOut"
+ "x-ms-error-code": "BlobBeingRehydrated"
},
"body": {
"encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ "data": "BlobBeingRehydratedFixture error"
}
}
}
]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 409
+ }
},
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobBeingRehydrated"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/restore-high-priority",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Start rehydrating an archived blob to Cool at High priority",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ ],
+ "call": {
+ "key": "object-tests/archive/object.txt",
+ "op": "restore",
+ "priority": "high",
+ "tier": "Cool"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -26668,7 +26030,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -26676,7 +26038,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/archive/object.txt"
}
},
{
@@ -26687,59 +26049,83 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "tier"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "Cool"
}
},
{
- "at": "/query/maxresults",
+ "at": "/headers/x-ms-rehydrate-priority",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "High"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "OperationTimedOut"
+ }
},
"body": {
- "encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ "encoding": "empty"
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
},
+ {
+ "at": "/value/state",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "started"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/restore",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Start rehydrating an archived blob to Hot at Standard priority, which Azure accepts with 202",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ ],
+ "call": {
+ "key": "object-tests/archive/object.txt",
+ "op": "restore",
+ "priority": "standard",
+ "tier": "Hot"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -26749,7 +26135,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -26757,7 +26143,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/archive/object.txt"
}
},
{
@@ -26768,59 +26154,81 @@
"value": ""
}
},
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
{
"at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "list"
+ "value": "tier"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "Hot"
}
},
{
- "at": "/query/maxresults",
+ "at": "/headers/x-ms-rehydrate-priority",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "Standard"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "OperationTimedOut"
+ }
},
"body": {
- "encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ "encoding": "empty"
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
},
+ {
+ "at": "/value/state",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "started"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-after-delete-with-versions",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list after delete with versions",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "op": "list_page",
+ "prefix": "object-tests/versions-mtydohr2/deleted.txt"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -26870,38 +26278,82 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/maxresults",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
+ "value": "object-tests/versions-mtydohr2/deleted.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "OperationTimedOut"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
- }
+ "data": "object-tests/versions-mtydohr2/deleted.txt"
+ },
+ "framing": "chunked"
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
},
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-bad-marker",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list bad marker",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "continuation_token": "fixture-marker+/1d52c72a655f=",
+ "op": "list_page",
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -26955,34 +26407,79 @@
}
},
{
- "at": "/query/maxresults",
+ "at": "/query/marker",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture-marker+/1d52c72a655f="
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "OperationTimedOut"
+ "x-ms-error-code": "InvalidQueryParameterValue"
},
"body": {
"encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ "data": "InvalidQueryParameterValueFixture error"
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
},
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidQueryParameterValue"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-bad-marker-code-in-body",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list bad marker, with the error code only in the XML body",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ ],
+ "origin": "constructed",
+ "call": {
+ "continuation_token": "fixture-marker+/1d52c72a655f=",
+ "op": "list_page",
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -27036,33 +26533,31 @@
}
},
{
- "at": "/query/maxresults",
+ "at": "/query/marker",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture-marker+/1d52c72a655f="
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "OperationTimedOut"
+ }
},
"body": {
"encoding": "utf8",
- "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ "data": "InvalidQueryParameterValueFixture error"
}
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -27079,7 +26574,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 500
+ "value": 400
}
},
{
@@ -27087,24 +26582,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "OperationTimedOut"
+ "value": "InvalidQueryParameterValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-key-equal-to-prefix-delimited",
+ "id": "operations/azure/list-container-missing",
"profile": "azure",
"lane": "core",
- "purpose": "list key equal to prefix delimited",
+ "purpose": "list container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/exact"
+ "prefix": ""
},
"exchanges": [
{
@@ -27153,38 +26647,28 @@
},
{
"at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/exact"
- }
- },
- {
- "at": "/query/delimiter",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
- "value": "/"
+ "value": ""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "ContainerNotFound"
},
"body": {
"encoding": "utf8",
- "data": "object-tests/exact/object-tests/exact2024-01-01T00:00:00.9097158ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-aad9350ee3141application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/exact/"
- },
- "framing": "chunked"
+ "data": "ContainerNotFoundFixture error"
+ }
}
}
]
@@ -27196,114 +26680,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/exact"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-aad9350ee314"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9097158Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
+ "value": "error"
}
},
{
- "at": "/value/entries/0/content_md5_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": 404
}
},
{
- "at": "/value/prefixes/0",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/exact/"
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "ContainerNotFound"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "container_not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-key-equal-to-prefix",
+ "id": "operations/azure/list-delimited",
"profile": "azure",
"lane": "core",
- "purpose": "list key equal to prefix",
+ "purpose": "list delimited",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
+ "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/exact"
+ "prefix": "object-tests/board/"
},
"exchanges": [
{
@@ -27355,7 +26773,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/exact"
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
}
}
],
@@ -27373,7 +26799,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/exactobject-tests/exact2024-01-01T00:00:00.9097158ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-aad9350ee3141application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/exact/child2024-01-01T00:00:00.1462797ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-bc7e3365fd2c1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/board//object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/object-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -27395,7 +26821,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/exact"
+ "value": "object-tests/board/a.txt"
}
},
{
@@ -27403,7 +26829,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 8
}
},
{
@@ -27411,7 +26837,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-aad9350ee314"
+ "value": "fixture-704c5ddfc8cb"
}
},
{
@@ -27430,7 +26856,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.9097158Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
@@ -27446,7 +26872,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
}
},
{
@@ -27454,7 +26880,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/exact/child"
+ "value": "object-tests/board/z.txt"
}
},
{
@@ -27462,7 +26888,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 2
}
},
{
@@ -27470,7 +26896,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-bc7e3365fd2c"
+ "value": "fixture-b905747bf74f"
}
},
{
@@ -27489,7 +26915,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1462797Z"
+ "value": "2024-01-01T00:00:00.3834597Z"
}
},
{
@@ -27505,7 +26931,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "Je0by0I7C3IA9IX8X/ccjg=="
}
},
{
@@ -27516,12 +26942,20 @@
"value": 2
}
},
+ {
+ "at": "/value/prefixes/0",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/nested/"
+ }
+ },
{
"at": "/value/prefixes",
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 1
}
},
{
@@ -27536,16 +26970,17 @@
"refusal": null
},
{
- "id": "operations/azure/list-many-segments",
+ "id": "operations/azure/list-other-delimiter",
"profile": "azure",
"lane": "core",
- "purpose": "list many segments",
+ "purpose": "Send the delimiter the caller names. A flat account groups blob names at any delimiter, not only /; here a- groups a-1.txt and a-2.txt",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
+ "delimiter": "-",
"op": "list_page",
- "prefix": "object-tests/s/"
+ "prefix": "object-tests/dashes/"
},
"exchanges": [
{
@@ -27597,7 +27032,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/s/"
+ "value": "object-tests/dashes/"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "-"
}
}
],
@@ -27615,7 +27058,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/s/object-tests/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s2024-01-01T00:00:00.1683367ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-bdb8a3090de61application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/dashes/-object-tests/dashes/a-object-tests/dashes/b.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb1application/octet-streamkutf/uauL+w61xx3dTFXjw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -27637,7 +27080,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s"
+ "value": "object-tests/dashes/b.txt"
}
},
{
@@ -27653,18 +27096,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-bdb8a3090de6"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "fixture-704c5ddfc8cb"
}
},
{
@@ -27672,31 +27104,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1683367Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
- "at": "/value/entries/0/is_current_version",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": true
+ "is": "array_length",
+ "value": 1
}
},
{
- "at": "/value/entries/0/content_md5_base64",
+ "at": "/value/prefixes/0",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "object-tests/dashes/a-"
}
},
{
@@ -27704,7 +27128,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 1
}
},
{
@@ -27719,17 +27143,16 @@
"refusal": null
},
{
- "id": "operations/azure/list-max-keys-zero",
+ "id": "operations/azure/list-empty",
"profile": "azure",
"lane": "core",
- "purpose": "list max keys zero",
+ "purpose": "list empty",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"op": "list_page",
- "page_size": 0,
- "prefix": "object-tests/board/"
+ "prefix": "object-tests/nothing/"
},
"exchanges": [
{
@@ -27781,33 +27204,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/maxresults",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "0"
+ "value": "object-tests/nothing/"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "OutOfRangeQueryParameterValue"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "OutOfRangeQueryParameterValueFixture error"
- }
+ "data": "object-tests/nothing/"
+ },
+ "framing": "chunked"
}
}
]
@@ -27819,83 +27236,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "OutOfRangeQueryParameterValue"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": "refused"
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/kind",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": ".+"
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/parameter",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "page_size"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "OutOfRangeQueryParameterValue"
+ "value": ""
}
}
- ]
+ ],
+ "refusal": null
},
{
- "id": "operations/azure/list-metadata",
+ "id": "operations/azure/list-all-empty",
"profile": "azure",
"lane": "core",
- "purpose": "list metadata",
+ "purpose": "list empty",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
],
"call": {
- "include": [
- "metadata"
- ],
- "op": "list_page",
- "prefix": "object-tests/metadata-listed/"
+ "op": "list",
+ "prefix": ""
},
"exchanges": [
{
@@ -27944,18 +27325,10 @@
},
{
"at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/metadata-listed/"
- }
- },
- {
- "at": "/query/include",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
- "value": "metadata"
+ "value": ""
}
}
],
@@ -27968,12 +27341,20 @@
"date": {
"from": "now"
},
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/metadata-listed/object-tests/metadata-listed/plain.txt2024-01-01T00:00:00.4469276ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9a0b44f4b9e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/metadata-listed/shadowed.txt2024-01-01T00:00:00.9968398ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-cd8bb50852bd1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletruex"
+ "encoding": "base64",
+ "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PC9CbG9icz48TmV4dE1hcmtlcj48L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+"
},
"framing": "chunked"
}
@@ -27991,186 +27372,29 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/metadata-listed/plain.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-9a0b44f4b9e9"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.4469276Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
+ "at": "/value/keys",
"optional": false,
"rule": {
"is": "equal",
- "value": true
+ "value": []
}
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/metadata-listed/shadowed.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-cd8bb50852bd"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9968398Z"
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/1/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/value/entries/0/metadata",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": {
- "label": "c"
- }
- }
- },
- {
- "at": "/value/entries/1/metadata",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": {
- "Metadata": "x",
- "label": "b"
- }
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-next-page",
- "profile": "azure",
- "lane": "core",
- "purpose": "list next page",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "continuation_token": "fixture-marker+/c42f89fa82e8=",
- "op": "list_page",
- "page_size": 2,
- "prefix": "object-tests/board/"
- },
- "exchanges": [
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-encoded-names",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list encoded names",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "op": "list_page",
+ "prefix": "object-tests/names/"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -28220,23 +27444,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/maxresults",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/query/marker",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-marker+/c42f89fa82e8="
+ "value": "object-tests/names/"
}
}
],
@@ -28254,7 +27462,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/board/fixture-marker+/c42f89fa82e8=2object-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/names/object-tests%2Fnames%2F100%25-%EF%BF%BE-name.txt2024-01-01T00:00:00.6773769ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b0016e7eea411application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/a&b.txt2024-01-01T00:00:00.9293679ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e0cf2e36cfe61application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/back/slash.txt2024-01-01T00:00:00.8649025ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-fb1ea388bc8f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/café.txt2024-01-01T00:00:00.0714249ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4dfcbd136b001application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/hash#tag.txt2024-01-01T00:00:00.9185620ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-a7996d03132f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/percent%20.txt2024-01-01T00:00:00.5807236ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-5e82da751e9c1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/plus+plus.txt2024-01-01T00:00:00.8000075ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7dc03e94613e1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/names/q?mark.txt2024-01-01T00:00:00.3314072ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f727e794361application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -28276,7 +27484,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/z.txt"
+ "value": "object-tests/names/100%--name.txt"
}
},
{
@@ -28284,7 +27492,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 1
}
},
{
@@ -28292,7 +27500,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-b905747bf74f"
+ "value": "fixture-b0016e7eea41"
}
},
{
@@ -28311,7 +27519,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.3834597Z"
+ "value": "2024-01-01T00:00:00.6773769Z"
}
},
{
@@ -28327,378 +27535,19 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Je0by0I7C3IA9IX8X/ccjg=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-pagination",
- "profile": "azure",
- "lane": "core",
- "purpose": "list pagination",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
- ],
- "call": {
- "op": "list",
- "page_size": 1,
- "prefix": ""
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/maxresults",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "1"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
- },
- "body": {
- "encoding": "base64",
- "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+Zmlyc3Q8L05hbWU+PFByb3BlcnRpZXM+PExhc3QtTW9kaWZpZWQ+TW9uLCAwMSBKYW4gMjAyNCAwMDowMDowMCBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+ImZpeHR1cmUiPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXI+b3BhcXVlKy89PC9OZXh0TWFya2VyPjwvRW51bWVyYXRpb25SZXN1bHRzPg=="
- },
- "framing": "chunked"
- }
- }
- ]
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/marker",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "opaque+/="
- }
- },
- {
- "at": "/query/prefix",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/maxresults",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "1"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
- },
- "body": {
- "encoding": "base64",
- "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+c2Vjb25kPC9OYW1lPjxQcm9wZXJ0aWVzPjxMYXN0LU1vZGlmaWVkPk1vbiwgMDEgSmFuIDIwMjQgMDA6MDA6MDAgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPiJmaXh0dXJlIjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4="
- },
- "framing": "chunked"
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": [
- "first",
- "second"
- ]
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-order-delimited",
- "profile": "azure",
- "lane": "core",
- "purpose": "list order delimited",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "delimiter": "/",
- "op": "list_page",
- "prefix": "object-tests/order/"
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/"
- }
- },
- {
- "at": "/query/delimiter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "utf8",
- "data": "object-tests/order//object-tests/order/A2024-01-01T00:00:00.6802950ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b1567b296bf41application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a2024-01-01T00:00:00.6196984ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-522bf336fec01application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a-b2024-01-01T00:00:00.7288701ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ffd1d6ff8b0f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a.txt2024-01-01T00:00:00.2739144ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1b029c6aa2e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a/object-tests/order/a02024-01-01T00:00:00.7594151ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-238f35f044af1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/b2024-01-01T00:00:00.4152572ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f7dfa02cf51application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/é2024-01-01T00:00:00.1938992ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e8b6d1d5f3fb1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries/0/key",
+ "at": "/value/entries/1/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/A"
+ "value": "object-tests/names/a&b.txt"
}
},
{
- "at": "/value/entries/0/size",
+ "at": "/value/entries/1/size",
"optional": false,
"rule": {
"is": "equal",
@@ -28706,15 +27555,15 @@
}
},
{
- "at": "/value/entries/0/etag",
+ "at": "/value/entries/1/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-b1567b296bf4"
+ "value": "fixture-e0cf2e36cfe6"
}
},
{
- "at": "/value/entries/0/snapshot",
+ "at": "/value/entries/1/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -28725,15 +27574,15 @@
}
},
{
- "at": "/value/entries/0/version",
+ "at": "/value/entries/1/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6802950Z"
+ "value": "2024-01-01T00:00:00.9293679Z"
}
},
{
- "at": "/value/entries/0/is_current_version",
+ "at": "/value/entries/1/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -28741,7 +27590,7 @@
}
},
{
- "at": "/value/entries/0/content_md5_base64",
+ "at": "/value/entries/1/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -28749,15 +27598,15 @@
}
},
{
- "at": "/value/entries/1/key",
+ "at": "/value/entries/2/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a"
+ "value": "object-tests/names/back/slash.txt"
}
},
{
- "at": "/value/entries/1/size",
+ "at": "/value/entries/2/size",
"optional": false,
"rule": {
"is": "equal",
@@ -28765,15 +27614,15 @@
}
},
{
- "at": "/value/entries/1/etag",
+ "at": "/value/entries/2/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-522bf336fec0"
+ "value": "fixture-fb1ea388bc8f"
}
},
{
- "at": "/value/entries/1/snapshot",
+ "at": "/value/entries/2/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -28784,15 +27633,15 @@
}
},
{
- "at": "/value/entries/1/version",
+ "at": "/value/entries/2/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6196984Z"
+ "value": "2024-01-01T00:00:00.8649025Z"
}
},
{
- "at": "/value/entries/1/is_current_version",
+ "at": "/value/entries/2/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -28800,7 +27649,7 @@
}
},
{
- "at": "/value/entries/1/content_md5_base64",
+ "at": "/value/entries/2/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -28808,15 +27657,15 @@
}
},
{
- "at": "/value/entries/2/key",
+ "at": "/value/entries/3/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a-b"
+ "value": "object-tests/names/café.txt"
}
},
{
- "at": "/value/entries/2/size",
+ "at": "/value/entries/3/size",
"optional": false,
"rule": {
"is": "equal",
@@ -28824,15 +27673,15 @@
}
},
{
- "at": "/value/entries/2/etag",
+ "at": "/value/entries/3/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-ffd1d6ff8b0f"
+ "value": "fixture-4dfcbd136b00"
}
},
{
- "at": "/value/entries/2/snapshot",
+ "at": "/value/entries/3/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -28843,15 +27692,15 @@
}
},
{
- "at": "/value/entries/2/version",
+ "at": "/value/entries/3/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7288701Z"
+ "value": "2024-01-01T00:00:00.0714249Z"
}
},
{
- "at": "/value/entries/2/is_current_version",
+ "at": "/value/entries/3/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -28859,7 +27708,7 @@
}
},
{
- "at": "/value/entries/2/content_md5_base64",
+ "at": "/value/entries/3/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -28867,15 +27716,15 @@
}
},
{
- "at": "/value/entries/3/key",
+ "at": "/value/entries/4/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a.txt"
+ "value": "object-tests/names/hash#tag.txt"
}
},
{
- "at": "/value/entries/3/size",
+ "at": "/value/entries/4/size",
"optional": false,
"rule": {
"is": "equal",
@@ -28883,15 +27732,15 @@
}
},
{
- "at": "/value/entries/3/etag",
+ "at": "/value/entries/4/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-1b029c6aa2e9"
+ "value": "fixture-a7996d03132f"
}
},
{
- "at": "/value/entries/3/snapshot",
+ "at": "/value/entries/4/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -28902,15 +27751,15 @@
}
},
{
- "at": "/value/entries/3/version",
+ "at": "/value/entries/4/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2739144Z"
+ "value": "2024-01-01T00:00:00.9185620Z"
}
},
{
- "at": "/value/entries/3/is_current_version",
+ "at": "/value/entries/4/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -28918,7 +27767,7 @@
}
},
{
- "at": "/value/entries/3/content_md5_base64",
+ "at": "/value/entries/4/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -28926,15 +27775,15 @@
}
},
{
- "at": "/value/entries/4/key",
+ "at": "/value/entries/5/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a0"
+ "value": "object-tests/names/percent%20.txt"
}
},
{
- "at": "/value/entries/4/size",
+ "at": "/value/entries/5/size",
"optional": false,
"rule": {
"is": "equal",
@@ -28942,15 +27791,15 @@
}
},
{
- "at": "/value/entries/4/etag",
+ "at": "/value/entries/5/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-238f35f044af"
+ "value": "fixture-5e82da751e9c"
}
},
{
- "at": "/value/entries/4/snapshot",
+ "at": "/value/entries/5/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -28961,15 +27810,15 @@
}
},
{
- "at": "/value/entries/4/version",
+ "at": "/value/entries/5/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7594151Z"
+ "value": "2024-01-01T00:00:00.5807236Z"
}
},
{
- "at": "/value/entries/4/is_current_version",
+ "at": "/value/entries/5/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -28977,7 +27826,7 @@
}
},
{
- "at": "/value/entries/4/content_md5_base64",
+ "at": "/value/entries/5/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -28985,15 +27834,15 @@
}
},
{
- "at": "/value/entries/5/key",
+ "at": "/value/entries/6/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/b"
+ "value": "object-tests/names/plus+plus.txt"
}
},
{
- "at": "/value/entries/5/size",
+ "at": "/value/entries/6/size",
"optional": false,
"rule": {
"is": "equal",
@@ -29001,15 +27850,15 @@
}
},
{
- "at": "/value/entries/5/etag",
+ "at": "/value/entries/6/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-91f7dfa02cf5"
+ "value": "fixture-7dc03e94613e"
}
},
{
- "at": "/value/entries/5/snapshot",
+ "at": "/value/entries/6/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -29020,15 +27869,15 @@
}
},
{
- "at": "/value/entries/5/version",
+ "at": "/value/entries/6/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.4152572Z"
+ "value": "2024-01-01T00:00:00.8000075Z"
}
},
{
- "at": "/value/entries/5/is_current_version",
+ "at": "/value/entries/6/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -29036,7 +27885,7 @@
}
},
{
- "at": "/value/entries/5/content_md5_base64",
+ "at": "/value/entries/6/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -29044,15 +27893,15 @@
}
},
{
- "at": "/value/entries/6/key",
+ "at": "/value/entries/7/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/é"
+ "value": "object-tests/names/q?mark.txt"
}
},
{
- "at": "/value/entries/6/size",
+ "at": "/value/entries/7/size",
"optional": false,
"rule": {
"is": "equal",
@@ -29060,15 +27909,15 @@
}
},
{
- "at": "/value/entries/6/etag",
+ "at": "/value/entries/7/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-e8b6d1d5f3fb"
+ "value": "fixture-91f727e79436"
}
},
{
- "at": "/value/entries/6/snapshot",
+ "at": "/value/entries/7/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -29079,15 +27928,15 @@
}
},
{
- "at": "/value/entries/6/version",
+ "at": "/value/entries/7/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1938992Z"
+ "value": "2024-01-01T00:00:00.3314072Z"
}
},
{
- "at": "/value/entries/6/is_current_version",
+ "at": "/value/entries/7/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -29095,7 +27944,7 @@
}
},
{
- "at": "/value/entries/6/content_md5_base64",
+ "at": "/value/entries/7/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -29107,47 +27956,159 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 7
+ "value": 8
}
},
{
- "at": "/value/prefixes/0",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": "object-tests/order/a/"
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 1
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-xml-escaped",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list xml escaped",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
+ ],
+ "call": {
+ "op": "list",
+ "prefix": ""
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+YSZhbXA7YjwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YyZsdDtkPC9OYW1lPjxQcm9wZXJ0aWVzPjxMYXN0LU1vZGlmaWVkPk1vbiwgMDEgSmFuIDIwMjQgMDA6MDA6MDAgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPiJmaXh0dXJlIjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4="
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/keys",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": [
+ "a&b",
+ "cobject-tests/order/object-tests/order/A2024-01-01T00:00:00.6802950ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b1567b296bf41application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a2024-01-01T00:00:00.6196984ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-522bf336fec01application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a-b2024-01-01T00:00:00.7288701ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ffd1d6ff8b0f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a.txt2024-01-01T00:00:00.2739144ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1b029c6aa2e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a/b2024-01-01T00:00:00.2584945ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-8a57ec6c44921application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a02024-01-01T00:00:00.7594151ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-238f35f044af1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/b2024-01-01T00:00:00.4152572ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f7dfa02cf51application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/é2024-01-01T00:00:00.1938992ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e8b6d1d5f3fb1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/board/2object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletruefixture-marker+/c42f89fa82e8="
},
"framing": "chunked"
}
@@ -29239,7 +28208,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/A"
+ "value": "object-tests/board/a.txt"
}
},
{
@@ -29247,7 +28216,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 8
}
},
{
@@ -29255,7 +28224,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-b1567b296bf4"
+ "value": "fixture-704c5ddfc8cb"
}
},
{
@@ -29274,7 +28243,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6802950Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
@@ -29290,7 +28259,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
}
},
{
@@ -29298,7 +28267,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a"
+ "value": "object-tests/board/nested/c.txt"
}
},
{
@@ -29314,7 +28283,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-522bf336fec0"
+ "value": "fixture-48ff0e151ab7"
}
},
{
@@ -29333,7 +28302,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6196984Z"
+ "value": "2024-01-01T00:00:00.7881326Z"
}
},
{
@@ -29349,94 +28318,168 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a-b"
+ "value": "SooI8J03tzeVZJA4QItfMw=="
}
},
{
- "at": "/value/entries/2/size",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": 1
+ "is": "array_length",
+ "value": 2
}
},
{
- "at": "/value/entries/2/etag",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-ffd1d6ff8b0f"
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/entries/2/version",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7288701Z"
+ "value": "fixture-marker+/c42f89fa82e8="
}
- },
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-page-size-one",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "A page of zero entries is out of range, but a page of one is not. Send a page size of 1 and report the one entry and the continuation token.",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "op": "list_page",
+ "page_size": 1,
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
{
- "at": "/value/entries/2/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "object-tests/board/1object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletruefixture-marker+/c42f89fa82e8="
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
{
- "at": "/value/entries/2/content_md5_base64",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "ok"
}
},
{
- "at": "/value/entries/3/key",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a.txt"
+ "value": "object-tests/board/a.txt"
}
},
{
- "at": "/value/entries/3/size",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 8
}
},
{
- "at": "/value/entries/3/etag",
+ "at": "/value/entries/0/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-1b029c6aa2e9"
+ "value": "fixture-704c5ddfc8cb"
}
},
{
- "at": "/value/entries/3/snapshot",
+ "at": "/value/entries/0/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -29447,15 +28490,15 @@
}
},
{
- "at": "/value/entries/3/version",
+ "at": "/value/entries/0/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2739144Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
- "at": "/value/entries/3/is_current_version",
+ "at": "/value/entries/0/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -29463,287 +28506,54 @@
}
},
{
- "at": "/value/entries/3/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/4/key",
+ "at": "/value/entries/0/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a/b"
+ "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
}
},
{
- "at": "/value/entries/4/size",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
+ "is": "array_length",
"value": 1
}
},
{
- "at": "/value/entries/4/etag",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-8a57ec6c4492"
- }
- },
- {
- "at": "/value/entries/4/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/entries/4/version",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2584945Z"
- }
- },
- {
- "at": "/value/entries/4/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/4/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/5/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a0"
- }
- },
- {
- "at": "/value/entries/5/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/5/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-238f35f044af"
- }
- },
- {
- "at": "/value/entries/5/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/5/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7594151Z"
- }
- },
- {
- "at": "/value/entries/5/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/5/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/6/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/b"
- }
- },
- {
- "at": "/value/entries/6/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/6/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-91f7dfa02cf5"
- }
- },
- {
- "at": "/value/entries/6/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.4152572Z"
- }
- },
- {
- "at": "/value/entries/6/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/6/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries/7/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/é"
- }
- },
- {
- "at": "/value/entries/7/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/7/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-e8b6d1d5f3fb"
- }
- },
- {
- "at": "/value/entries/7/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/7/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.1938992Z"
- }
- },
- {
- "at": "/value/entries/7/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/7/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 8
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
+ "value": "fixture-marker+/c42f89fa82e8="
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-all-order",
+ "id": "operations/azure/list-operation-timed-out",
"profile": "azure",
"lane": "core",
- "purpose": "list order",
+ "purpose": "Report a 500 OperationTimedOut answer as an error, after at most 5 retries",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "transient",
"call": {
- "op": "list",
- "prefix": ""
+ "op": "list_page",
+ "page_size": 2,
+ "prefix": "object-tests/board/"
},
"exchanges": [
{
@@ -29792,41 +28602,444 @@
},
{
"at": "/query/prefix",
- "optional": true,
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 500,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "OperationTimedOut"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
"rule": {
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 500,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "OperationTimedOut"
},
"body": {
- "encoding": "base64",
- "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+YTwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+ejwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlcj48L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+"
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
},
- "framing": "chunked"
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 500,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "OperationTimedOut"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
}
}
- ]
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 500,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "OperationTimedOut"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 500,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "OperationTimedOut"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 500,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "OperationTimedOut"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "OperationTimedOutThe operation could not be completed within the permitted time."
+ }
+ }
+ }
+ ],
+ "optional": true
}
],
"expect": [
@@ -29835,34 +29048,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/keys",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- "a",
- "z"
- ]
+ "value": 500
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "OperationTimedOut"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-page",
+ "id": "operations/azure/list-key-equal-to-prefix-delimited",
"profile": "azure",
"lane": "core",
- "purpose": "list page",
+ "purpose": "list key equal to prefix delimited",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
+ "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/board/"
+ "prefix": "object-tests/exact"
},
"exchanges": [
{
@@ -29914,7 +29133,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "object-tests/exact"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
}
}
],
@@ -29932,7 +29159,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/board/object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletrueobject-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/exact/object-tests/exact2024-01-01T00:00:00.9097158ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-aad9350ee3141application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/exact/"
},
"framing": "chunked"
}
@@ -29954,7 +29181,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/a.txt"
+ "value": "object-tests/exact"
}
},
{
@@ -29962,7 +29189,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 8
+ "value": 1
}
},
{
@@ -29970,7 +29197,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-704c5ddfc8cb"
+ "value": "fixture-aad9350ee314"
}
},
{
@@ -29989,7 +29216,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
+ "value": "2024-01-01T00:00:00.9097158Z"
}
},
{
@@ -30005,133 +29232,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/nested/c.txt"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries/1/size",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
+ "is": "array_length",
"value": 1
}
},
{
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-48ff0e151ab7"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7881326Z"
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/1/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "SooI8J03tzeVZJA4QItfMw=="
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/z.txt"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-b905747bf74f"
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3834597Z"
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/2/content_md5_base64",
+ "at": "/value/prefixes/0",
"optional": false,
"rule": {
"is": "equal",
- "value": "Je0by0I7C3IA9IX8X/ccjg=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 3
+ "value": "object-tests/exact/"
}
},
{
@@ -30139,7 +29256,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 1
}
},
{
@@ -30154,16 +29271,16 @@
"refusal": null
},
{
- "id": "operations/azure/list-prefix-without-slash",
+ "id": "operations/azure/list-key-equal-to-prefix",
"profile": "azure",
"lane": "core",
- "purpose": "list prefix without slash",
+ "purpose": "list key equal to prefix",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"op": "list_page",
- "prefix": "object-tests/boa"
+ "prefix": "object-tests/exact"
},
"exchanges": [
{
@@ -30215,7 +29332,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/boa"
+ "value": "object-tests/exact"
}
}
],
@@ -30233,7 +29350,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/boaobject-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletrueobject-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/exactobject-tests/exact2024-01-01T00:00:00.9097158ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-aad9350ee3141application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/exact/child2024-01-01T00:00:00.1462797ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-bc7e3365fd2c1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -30255,7 +29372,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/a.txt"
+ "value": "object-tests/exact"
}
},
{
@@ -30263,7 +29380,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 8
+ "value": 1
}
},
{
@@ -30271,7 +29388,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-704c5ddfc8cb"
+ "value": "fixture-aad9350ee314"
}
},
{
@@ -30290,7 +29407,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.9908400Z"
+ "value": "2024-01-01T00:00:00.9097158Z"
}
},
{
@@ -30306,7 +29423,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -30314,7 +29431,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/nested/c.txt"
+ "value": "object-tests/exact/child"
}
},
{
@@ -30330,7 +29447,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-48ff0e151ab7"
+ "value": "fixture-bc7e3365fd2c"
}
},
{
@@ -30349,7 +29466,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7881326Z"
+ "value": "2024-01-01T00:00:00.1462797Z"
}
},
{
@@ -30365,66 +29482,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "SooI8J03tzeVZJA4QItfMw=="
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/z.txt"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-b905747bf74f"
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3834597Z"
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/2/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Je0by0I7C3IA9IX8X/ccjg=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -30432,7 +29490,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 3
+ "value": 2
}
},
{
@@ -30455,17 +29513,16 @@
"refusal": null
},
{
- "id": "operations/azure/list-separator-keys-delimited",
+ "id": "operations/azure/list-many-segments",
"profile": "azure",
"lane": "core",
- "purpose": "list separator keys delimited",
+ "purpose": "list many segments",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/separators/"
+ "prefix": "object-tests/s/"
},
"exchanges": [
{
@@ -30517,15 +29574,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/"
- }
- },
- {
- "at": "/query/delimiter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
+ "value": "object-tests/s/"
}
}
],
@@ -30543,7 +29592,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/separators//object-tests/separators/..leading2024-01-01T00:00:00.1857029ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-99f23038e5ea1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/a.b/object-tests/separators/dot2024-01-01T00:00:00.2106231ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ccbcb2d755851application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/double/object-tests/separators/space /object-tests/separators/trailing/"
+ "data": "object-tests/s/object-tests/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s2024-01-01T00:00:00.1683367ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-bdb8a3090de61application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -30565,7 +29614,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/..leading"
+ "value": "object-tests/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s"
}
},
{
@@ -30581,7 +29630,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-99f23038e5ea"
+ "value": "fixture-bdb8a3090de6"
}
},
{
@@ -30600,7 +29649,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1857029Z"
+ "value": "2024-01-01T00:00:00.1683367Z"
}
},
{
@@ -30619,135 +29668,45 @@
"value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/separators/dot"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-ccbcb2d75585"
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.2106231Z"
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/1/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
{
"at": "/value/entries",
"optional": false,
"rule": {
"is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/prefixes/0",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/separators/a.b/"
+ "value": 1
}
},
{
- "at": "/value/prefixes/1",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": "object-tests/separators/double/"
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/prefixes/2",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/space /"
- }
- },
- {
- "at": "/value/prefixes/3",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/separators/trailing/"
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 4
- }
- },
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-separator-keys",
+ "id": "operations/azure/list-max-keys-zero",
"profile": "azure",
"lane": "core",
- "purpose": "list separator keys",
+ "purpose": "list max keys zero",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"op": "list_page",
- "prefix": "object-tests/separators/"
+ "page_size": 0,
+ "prefix": "object-tests/board/"
},
"exchanges": [
{
@@ -30799,27 +29758,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/"
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "0"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "OutOfRangeQueryParameterValue"
},
"body": {
"encoding": "utf8",
- "data": "object-tests/separators/object-tests/separators/..leading2024-01-01T00:00:00.1857029ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-99f23038e5ea1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/a.b/c2024-01-01T00:00:00.4918444ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4a4f8766cc8e1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/dot2024-01-01T00:00:00.2106231ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ccbcb2d755851application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/double//slash2024-01-01T00:00:00.9957719ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-32b8d82fce871application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/space /x2024-01-01T00:00:00.8166959ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-0b64e32539cd1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/trailing/2024-01-01T00:00:00.6886650ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-3be5b05a5c3b1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
+ "data": "OutOfRangeQueryParameterValueFixture error"
+ }
}
}
]
@@ -30831,137 +29796,187 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/separators/..leading"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-99f23038e5ea"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/entries/0/version",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1857029Z"
+ "value": 400
}
},
{
- "at": "/value/entries/0/is_current_version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": true
+ "value": "OutOfRangeQueryParameterValue"
}
- },
+ }
+ ],
+ "refusal": [
{
- "at": "/value/entries/0/content_md5_base64",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "refused"
}
},
{
- "at": "/value/entries/1/key",
+ "at": "/kind",
"optional": false,
"rule": {
- "is": "equal",
- "value": "object-tests/separators/a.b/c"
+ "is": "matches",
+ "pattern": ".+"
}
},
{
- "at": "/value/entries/1/size",
+ "at": "/parameter",
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": "page_size"
}
},
{
- "at": "/value/entries/1/etag",
- "optional": false,
+ "at": "/status",
+ "optional": true,
"rule": {
"is": "equal",
- "value": "fixture-4a4f8766cc8e"
+ "value": 400
}
},
{
- "at": "/value/entries/1/snapshot",
+ "at": "/code",
"optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.4918444Z"
+ "value": "OutOfRangeQueryParameterValue"
}
- },
+ }
+ ]
+ },
+ {
+ "id": "operations/azure/list-metadata",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list metadata",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "include": [
+ "metadata"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/metadata-listed/"
+ },
+ "exchanges": [
{
- "at": "/value/entries/1/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/metadata-listed/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "object-tests/metadata-listed/object-tests/metadata-listed/plain.txt2024-01-01T00:00:00.4469276ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9a0b44f4b9e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/metadata-listed/shadowed.txt2024-01-01T00:00:00.9968398ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-cd8bb50852bd1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletruex"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
{
- "at": "/value/entries/1/content_md5_base64",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "ok"
}
},
{
- "at": "/value/entries/2/key",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/dot"
+ "value": "object-tests/metadata-listed/plain.txt"
}
},
{
- "at": "/value/entries/2/size",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
@@ -30969,15 +29984,15 @@
}
},
{
- "at": "/value/entries/2/etag",
+ "at": "/value/entries/0/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-ccbcb2d75585"
+ "value": "fixture-9a0b44f4b9e9"
}
},
{
- "at": "/value/entries/2/snapshot",
+ "at": "/value/entries/0/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -30988,15 +30003,15 @@
}
},
{
- "at": "/value/entries/2/version",
+ "at": "/value/entries/0/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2106231Z"
+ "value": "2024-01-01T00:00:00.4469276Z"
}
},
{
- "at": "/value/entries/2/is_current_version",
+ "at": "/value/entries/0/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -31004,7 +30019,7 @@
}
},
{
- "at": "/value/entries/2/content_md5_base64",
+ "at": "/value/entries/0/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -31012,15 +30027,15 @@
}
},
{
- "at": "/value/entries/3/key",
+ "at": "/value/entries/1/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/double//slash"
+ "value": "object-tests/metadata-listed/shadowed.txt"
}
},
{
- "at": "/value/entries/3/size",
+ "at": "/value/entries/1/size",
"optional": false,
"rule": {
"is": "equal",
@@ -31028,15 +30043,15 @@
}
},
{
- "at": "/value/entries/3/etag",
+ "at": "/value/entries/1/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-32b8d82fce87"
+ "value": "fixture-cd8bb50852bd"
}
},
{
- "at": "/value/entries/3/snapshot",
+ "at": "/value/entries/1/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -31047,15 +30062,15 @@
}
},
{
- "at": "/value/entries/3/version",
+ "at": "/value/entries/1/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.9957719Z"
+ "value": "2024-01-01T00:00:00.9968398Z"
}
},
{
- "at": "/value/entries/3/is_current_version",
+ "at": "/value/entries/1/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -31063,7 +30078,7 @@
}
},
{
- "at": "/value/entries/3/content_md5_base64",
+ "at": "/value/entries/1/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -31071,90 +30086,194 @@
}
},
{
- "at": "/value/entries/4/key",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": "object-tests/separators/space /x"
+ "is": "array_length",
+ "value": 2
}
},
{
- "at": "/value/entries/4/size",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": 1
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/entries/4/etag",
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-0b64e32539cd"
- }
- },
- {
- "at": "/value/entries/4/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": ""
}
},
{
- "at": "/value/entries/4/version",
+ "at": "/value/entries/0/metadata",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.8166959Z"
+ "value": {
+ "label": "c"
+ }
}
},
{
- "at": "/value/entries/4/is_current_version",
+ "at": "/value/entries/1/metadata",
"optional": false,
"rule": {
"is": "equal",
- "value": true
+ "value": {
+ "Metadata": "x",
+ "label": "b"
+ }
}
- },
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-next-page",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list next page",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "continuation_token": "fixture-marker+/c42f89fa82e8=",
+ "op": "list_page",
+ "page_size": 2,
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
{
- "at": "/value/entries/4/content_md5_base64",
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/maxresults",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-marker+/c42f89fa82e8="
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "object-tests/board/fixture-marker+/c42f89fa82e8=2object-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "ok"
}
},
{
- "at": "/value/entries/5/key",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/separators/trailing/"
+ "value": "object-tests/board/z.txt"
}
},
{
- "at": "/value/entries/5/size",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 2
}
},
{
- "at": "/value/entries/5/etag",
+ "at": "/value/entries/0/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-3be5b05a5c3b"
+ "value": "fixture-b905747bf74f"
}
},
{
- "at": "/value/entries/5/snapshot",
+ "at": "/value/entries/0/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -31165,15 +30284,15 @@
}
},
{
- "at": "/value/entries/5/version",
+ "at": "/value/entries/0/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6886650Z"
+ "value": "2024-01-01T00:00:00.3834597Z"
}
},
{
- "at": "/value/entries/5/is_current_version",
+ "at": "/value/entries/0/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -31181,11 +30300,11 @@
}
},
{
- "at": "/value/entries/5/content_md5_base64",
+ "at": "/value/entries/0/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "Je0by0I7C3IA9IX8X/ccjg=="
}
},
{
@@ -31193,7 +30312,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 6
+ "value": 1
}
},
{
@@ -31216,19 +30335,17 @@
"refusal": null
},
{
- "id": "operations/azure/list-snapshots-after-delete",
+ "id": "operations/azure/list-pagination",
"profile": "azure",
"lane": "core",
- "purpose": "list snapshots after delete",
+ "purpose": "list pagination",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
],
"call": {
- "include": [
- "snapshots"
- ],
- "op": "list_page",
- "prefix": "object-tests/snapshots-all/"
+ "op": "list",
+ "page_size": 1,
+ "prefix": ""
},
"exchanges": [
{
@@ -31277,18 +30394,18 @@
},
{
"at": "/query/prefix",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots-all/"
+ "value": ""
}
},
{
- "at": "/query/include",
+ "at": "/query/maxresults",
"optional": false,
"rule": {
"is": "equal",
- "value": "snapshots"
+ "value": "1"
}
}
],
@@ -31301,71 +30418,26 @@
"date": {
"from": "now"
},
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/snapshots-all/"
+ "encoding": "base64",
+ "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+Zmlyc3Q8L05hbWU+PFByb3BlcnRpZXM+PExhc3QtTW9kaWZpZWQ+TW9uLCAwMSBKYW4gMjAyNCAwMDowMDowMCBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+ImZpeHR1cmUiPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXI+b3BhcXVlKy89PC9OZXh0TWFya2VyPjwvRW51bWVyYXRpb25SZXN1bHRzPg=="
},
"framing": "chunked"
}
}
]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
},
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-snapshots-after-snapshots-deleted",
- "profile": "azure",
- "lane": "core",
- "purpose": "list snapshots after snapshots deleted",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "include": [
- "snapshots"
- ],
- "op": "list_page",
- "prefix": "object-tests/snapshots-only/"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -31411,19 +30483,27 @@
}
},
{
- "at": "/query/prefix",
+ "at": "/query/marker",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots-only/"
+ "value": "opaque+/="
}
},
{
- "at": "/query/include",
+ "at": "/query/prefix",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/maxresults",
"optional": false,
"rule": {
"is": "equal",
- "value": "snapshots"
+ "value": "1"
}
}
],
@@ -31436,12 +30516,20 @@
"date": {
"from": "now"
},
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
- "encoding": "utf8",
- "data": "object-tests/snapshots-only/object-tests/snapshots-only/object.txt2024-01-01T00:00:00.6170785ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-493478beeeaf4application/octet-streamTYtghPPRZ7dsrGaiKpG+Ag==BlockBlobHottrueunlockedavailabletrue"
+ "encoding": "base64",
+ "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+c2Vjb25kPC9OYW1lPjxQcm9wZXJ0aWVzPjxMYXN0LU1vZGlmaWVkPk1vbiwgMDEgSmFuIDIwMjQgMDA6MDA6MDAgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPiJmaXh0dXJlIjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4="
},
"framing": "chunked"
}
@@ -31459,106 +30547,31 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/snapshots-only/object.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 4
- }
- },
- {
- "at": "/value/entries/0/etag",
+ "at": "/value/keys",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-493478beeeaf"
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
+ "value": [
+ "first",
+ "second"
]
}
- },
- {
- "at": "/value/entries/0/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.6170785Z"
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": true
- }
- },
- {
- "at": "/value/entries/0/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "TYtghPPRZ7dsrGaiKpG+Ag=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/continuation_token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/list-snapshots-and-versions",
+ "id": "operations/azure/list-order-delimited",
"profile": "azure",
"lane": "core",
- "purpose": "list snapshots and versions",
+ "purpose": "list order delimited",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "include": [
- "snapshots",
- "versions"
- ],
+ "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/snapshots/"
+ "prefix": "object-tests/order/"
},
"exchanges": [
{
@@ -31610,15 +30623,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/"
+ "value": "object-tests/order/"
}
},
{
- "at": "/query/include",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "snapshots,versions"
+ "value": "/"
}
}
],
@@ -31636,7 +30649,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/snapshots/object-tests/snapshots/object.txt2024-01-01T00:00:00.4877091ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.7351568ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.8746441ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.6268993ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-222f410e528f3application/octet-streamuKn3Fdu2T9XFbneDxoIKYQ==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/order//object-tests/order/A2024-01-01T00:00:00.6802950ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b1567b296bf41application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a2024-01-01T00:00:00.6196984ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-522bf336fec01application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a-b2024-01-01T00:00:00.7288701ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ffd1d6ff8b0f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a.txt2024-01-01T00:00:00.2739144ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1b029c6aa2e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a/object-tests/order/a02024-01-01T00:00:00.7594151ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-238f35f044af1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/b2024-01-01T00:00:00.4152572ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f7dfa02cf51application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/é2024-01-01T00:00:00.1938992ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e8b6d1d5f3fb1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -31658,7 +30671,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": "object-tests/order/A"
}
},
{
@@ -31666,7 +30679,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": 1
}
},
{
@@ -31674,7 +30687,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-7adbbe4768f3"
+ "value": "fixture-b1567b296bf4"
}
},
{
@@ -31693,18 +30706,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.4877091Z"
+ "value": "2024-01-01T00:00:00.6802950Z"
}
},
{
"at": "/value/entries/0/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -31712,7 +30722,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -31720,7 +30730,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": "object-tests/order/a"
}
},
{
@@ -31728,7 +30738,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": 1
}
},
{
@@ -31736,19 +30746,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-7adbbe4768f3"
+ "value": "fixture-522bf336fec0"
}
},
{
"at": "/value/entries/1/snapshot",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7351568Z"
- }
- },
- {
- "at": "/value/entries/1/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -31758,15 +30760,20 @@
]
}
},
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6196984Z"
+ }
+ },
{
"at": "/value/entries/1/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -31774,7 +30781,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -31782,7 +30789,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": "object-tests/order/a-b"
}
},
{
@@ -31790,7 +30797,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": 1
}
},
{
@@ -31798,7 +30805,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-7adbbe4768f3"
+ "value": "fixture-ffd1d6ff8b0f"
}
},
{
@@ -31817,18 +30824,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.8746441Z"
+ "value": "2024-01-01T00:00:00.7288701Z"
}
},
{
"at": "/value/entries/2/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -31836,7 +30840,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -31844,7 +30848,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": "object-tests/order/a.txt"
}
},
{
@@ -31852,7 +30856,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": 1
}
},
{
@@ -31860,7 +30864,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-222f410e528f"
+ "value": "fixture-1b029c6aa2e9"
}
},
{
@@ -31879,7 +30883,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6268993Z"
+ "value": "2024-01-01T00:00:00.2739144Z"
}
},
{
@@ -31895,178 +30899,94 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "uKn3Fdu2T9XFbneDxoIKYQ=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries",
+ "at": "/value/entries/4/key",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 4
+ "is": "equal",
+ "value": "object-tests/order/a0"
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/entries/4/size",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 1
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/entries/4/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "fixture-238f35f044af"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-snapshots",
- "profile": "azure",
- "lane": "core",
- "purpose": "list snapshots",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "include": [
- "snapshots"
- ],
- "op": "list_page",
- "prefix": "object-tests/snapshots/"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/restype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "list"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/snapshots/"
- }
- },
- {
- "at": "/query/include",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "snapshots"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "utf8",
- "data": "object-tests/snapshots/object-tests/snapshots/object.txt2024-01-01T00:00:00.7351568ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.6268993ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-222f410e528f3application/octet-streamuKn3Fdu2T9XFbneDxoIKYQ==BlockBlobHottrueunlockedavailabletrue"
- },
- "framing": "chunked"
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/4/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/4/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "2024-01-01T00:00:00.7594151Z"
}
},
{
- "at": "/value/entries/0/key",
+ "at": "/value/entries/4/is_current_version",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": true
}
},
{
- "at": "/value/entries/0/size",
+ "at": "/value/entries/4/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries/0/etag",
+ "at": "/value/entries/5/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-7adbbe4768f3"
+ "value": "object-tests/order/b"
}
},
{
- "at": "/value/entries/0/snapshot",
+ "at": "/value/entries/5/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7351568Z"
+ "value": 1
}
},
{
- "at": "/value/entries/0/version",
+ "at": "/value/entries/5/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-91f7dfa02cf5"
+ }
+ },
+ {
+ "at": "/value/entries/5/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -32077,50 +30997,55 @@
}
},
{
- "at": "/value/entries/0/is_current_version",
- "optional": true,
+ "at": "/value/entries/5/version",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.4152572Z"
}
},
{
- "at": "/value/entries/0/content_md5_base64",
+ "at": "/value/entries/5/is_current_version",
"optional": false,
"rule": {
"is": "equal",
- "value": "+XxdKZQb+xsv2rCHSQargg=="
+ "value": true
}
},
{
- "at": "/value/entries/1/key",
+ "at": "/value/entries/5/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/snapshots/object.txt"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries/1/size",
+ "at": "/value/entries/6/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 3
+ "value": "object-tests/order/é"
}
},
{
- "at": "/value/entries/1/etag",
+ "at": "/value/entries/6/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-222f410e528f"
+ "value": 1
}
},
{
- "at": "/value/entries/1/snapshot",
+ "at": "/value/entries/6/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-e8b6d1d5f3fb"
+ }
+ },
+ {
+ "at": "/value/entries/6/snapshot",
"optional": true,
"rule": {
"is": "one_of",
@@ -32131,15 +31056,15 @@
}
},
{
- "at": "/value/entries/1/version",
+ "at": "/value/entries/6/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.6268993Z"
+ "value": "2024-01-01T00:00:00.1938992Z"
}
},
{
- "at": "/value/entries/1/is_current_version",
+ "at": "/value/entries/6/is_current_version",
"optional": false,
"rule": {
"is": "equal",
@@ -32147,11 +31072,11 @@
}
},
{
- "at": "/value/entries/1/content_md5_base64",
+ "at": "/value/entries/6/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "uKn3Fdu2T9XFbneDxoIKYQ=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -32159,7 +31084,15 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 2
+ "value": 7
+ }
+ },
+ {
+ "at": "/value/prefixes/0",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a/"
}
},
{
@@ -32167,7 +31100,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 1
}
},
{
@@ -32182,16 +31115,16 @@
"refusal": null
},
{
- "id": "operations/azure/list-staged-only",
+ "id": "operations/azure/list-order",
"profile": "azure",
"lane": "core",
- "purpose": "list staged only",
+ "purpose": "list order",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"op": "list_page",
- "prefix": "object-tests/multipart/staged.bin"
+ "prefix": "object-tests/order/"
},
"exchanges": [
{
@@ -32243,7 +31176,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/multipart/staged.bin"
+ "value": "object-tests/order/"
}
}
],
@@ -32261,7 +31194,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/multipart/staged.bin"
+ "data": "object-tests/order/object-tests/order/A2024-01-01T00:00:00.6802950ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b1567b296bf41application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a2024-01-01T00:00:00.6196984ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-522bf336fec01application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a-b2024-01-01T00:00:00.7288701ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ffd1d6ff8b0f1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a.txt2024-01-01T00:00:00.2739144ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1b029c6aa2e91application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a/b2024-01-01T00:00:00.2584945ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-8a57ec6c44921application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/a02024-01-01T00:00:00.7594151ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-238f35f044af1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/b2024-01-01T00:00:00.4152572ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-91f7dfa02cf51application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/order/é2024-01-01T00:00:00.1938992ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-e8b6d1d5f3fb1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -32279,43 +31212,515 @@
}
},
{
- "at": "/value/entries",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "object-tests/order/A"
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 1
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/entries/0/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "fixture-b1567b296bf4"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/list-unauthenticated",
- "profile": "azure",
- "lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6802950Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-522bf336fec0"
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6196984Z"
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a-b"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-ffd1d6ff8b0f"
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7288701Z"
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/2/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/3/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a.txt"
+ }
+ },
+ {
+ "at": "/value/entries/3/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/3/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-1b029c6aa2e9"
+ }
+ },
+ {
+ "at": "/value/entries/3/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2739144Z"
+ }
+ },
+ {
+ "at": "/value/entries/3/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/3/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/4/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a/b"
+ }
+ },
+ {
+ "at": "/value/entries/4/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/4/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-8a57ec6c4492"
+ }
+ },
+ {
+ "at": "/value/entries/4/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2584945Z"
+ }
+ },
+ {
+ "at": "/value/entries/4/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/4/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/5/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a0"
+ }
+ },
+ {
+ "at": "/value/entries/5/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/5/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-238f35f044af"
+ }
+ },
+ {
+ "at": "/value/entries/5/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7594151Z"
+ }
+ },
+ {
+ "at": "/value/entries/5/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/5/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/6/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/b"
+ }
+ },
+ {
+ "at": "/value/entries/6/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/6/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-91f7dfa02cf5"
+ }
+ },
+ {
+ "at": "/value/entries/6/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.4152572Z"
+ }
+ },
+ {
+ "at": "/value/entries/6/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/6/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/7/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/é"
+ }
+ },
+ {
+ "at": "/value/entries/7/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/7/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-e8b6d1d5f3fb"
+ }
+ },
+ {
+ "at": "/value/entries/7/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/7/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.1938992Z"
+ }
+ },
+ {
+ "at": "/value/entries/7/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/7/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 8
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-all-order",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list order",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/list-blobs"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/"
+ "op": "list",
+ "prefix": ""
},
"exchanges": [
{
@@ -32364,28 +31769,38 @@
},
{
"at": "/query/prefix",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
- "value": "object-tests/"
+ "value": ""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 401,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidAuthenticationInfo"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidAuthenticationInfoFixture error"
- }
+ "encoding": "base64",
+ "data": "PEVudW1lcmF0aW9uUmVzdWx0cyBTZXJ2aWNlRW5kcG9pbnQ9Imh0dHA6Ly9maXh0dXJlLyIgQ29udGFpbmVyTmFtZT0iZml4dHVyZSI+PFByZWZpeD48L1ByZWZpeD48QmxvYnM+PEJsb2I+PE5hbWU+YTwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+ejwvTmFtZT48UHJvcGVydGllcz48TGFzdC1Nb2RpZmllZD5Nb24sIDAxIEphbiAyMDI0IDAwOjAwOjAwIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4iZml4dHVyZSI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlcj48L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+"
+ },
+ "framing": "chunked"
}
}
]
@@ -32397,42 +31812,34 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 401
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/keys",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidAuthenticationInfo"
+ "value": [
+ "a",
+ "z"
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure/list-versions-of-deleted-object",
+ "id": "operations/azure/list-page",
"profile": "azure",
"lane": "core",
- "purpose": "list versions of deleted object",
+ "purpose": "list page",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "include": [
- "versions"
- ],
"op": "list_page",
- "prefix": "object-tests/versions-mtydohr2/deleted.txt"
+ "prefix": "object-tests/board/"
},
"exchanges": [
{
@@ -32484,15 +31891,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/deleted.txt"
- }
- },
- {
- "at": "/query/include",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "versions"
+ "value": "object-tests/board/"
}
}
],
@@ -32510,7 +31909,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/versions-mtydohr2/deleted.txtobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.0160641ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-3b1602b981e92application/octet-streamASCk+RlqX5659SPzH5FNpw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.3127057ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-629d3a1755352application/octet-stream4cgEiIU9hqudbez+MNiTDw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.0760252ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4de1996d2b4b2application/octet-streamip/X39qAKSH9xAefmlKM6A==BlockBlobHottruetrue"
+ "data": "object-tests/board/object-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletrueobject-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -32532,7 +31931,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/deleted.txt"
+ "value": "object-tests/board/a.txt"
}
},
{
@@ -32540,7 +31939,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 8
}
},
{
@@ -32548,7 +31947,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-3b1602b981e9"
+ "value": "fixture-704c5ddfc8cb"
}
},
{
@@ -32567,18 +31966,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.0160641Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
"at": "/value/entries/0/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -32586,7 +31982,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ASCk+RlqX5659SPzH5FNpw=="
+ "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
}
},
{
@@ -32594,7 +31990,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/deleted.txt"
+ "value": "object-tests/board/nested/c.txt"
}
},
{
@@ -32602,7 +31998,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 1
}
},
{
@@ -32610,7 +32006,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-629d3a175535"
+ "value": "fixture-48ff0e151ab7"
}
},
{
@@ -32629,18 +32025,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.3127057Z"
+ "value": "2024-01-01T00:00:00.7881326Z"
}
},
{
"at": "/value/entries/1/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -32648,7 +32041,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "4cgEiIU9hqudbez+MNiTDw=="
+ "value": "SooI8J03tzeVZJA4QItfMw=="
}
},
{
@@ -32656,7 +32049,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/deleted.txt"
+ "value": "object-tests/board/z.txt"
}
},
{
@@ -32672,7 +32065,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-4de1996d2b4b"
+ "value": "fixture-b905747bf74f"
}
},
{
@@ -32691,18 +32084,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.0760252Z"
+ "value": "2024-01-01T00:00:00.3834597Z"
}
},
{
"at": "/value/entries/2/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -32710,7 +32100,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ip/X39qAKSH9xAefmlKM6A=="
+ "value": "Je0by0I7C3IA9IX8X/ccjg=="
}
},
{
@@ -32741,19 +32131,16 @@
"refusal": null
},
{
- "id": "operations/azure/list-versions",
+ "id": "operations/azure/list-prefix-without-slash",
"profile": "azure",
"lane": "core",
- "purpose": "list versions",
+ "purpose": "list prefix without slash",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "include": [
- "versions"
- ],
"op": "list_page",
- "prefix": "object-tests/versions-mtydohr2/"
+ "prefix": "object-tests/boa"
},
"exchanges": [
{
@@ -32805,15 +32192,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/"
- }
- },
- {
- "at": "/query/include",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "versions"
+ "value": "object-tests/boa"
}
}
],
@@ -32831,7 +32210,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/versions-mtydohr2/object-tests/versions-mtydohr2/object.txt2024-01-01T00:00:00.2318906ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9dc9ff8bf5132application/octet-streamZlTHNMyrj0QP8IJetEPcfw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/object.txt2024-01-01T00:00:00.3326281ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9e3bb87be41c2application/octet-streamGyZ2GcSBLMRu4oF0eITKUA==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/boaobject-tests/board/a.txt2024-01-01T00:00:00.9908400ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-704c5ddfc8cb8application/octet-streamJdVa0oOqQAr0ZMdtcTwHrQ==BlockBlobHottrueunlockedavailabletrueobject-tests/board/nested/c.txt2024-01-01T00:00:00.7881326ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-48ff0e151ab71application/octet-streamSooI8J03tzeVZJA4QItfMw==BlockBlobHottrueunlockedavailabletrueobject-tests/board/z.txt2024-01-01T00:00:00.3834597ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-b905747bf74f2application/octet-streamJe0by0I7C3IA9IX8X/ccjg==BlockBlobHottrueunlockedavailabletrue"
},
"framing": "chunked"
}
@@ -32853,7 +32232,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/object.txt"
+ "value": "object-tests/board/a.txt"
}
},
{
@@ -32861,7 +32240,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 8
}
},
{
@@ -32869,7 +32248,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-9dc9ff8bf513"
+ "value": "fixture-704c5ddfc8cb"
}
},
{
@@ -32888,18 +32267,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2318906Z"
+ "value": "2024-01-01T00:00:00.9908400Z"
}
},
{
"at": "/value/entries/0/is_current_version",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": true
}
},
{
@@ -32907,7 +32283,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ZlTHNMyrj0QP8IJetEPcfw=="
+ "value": "JdVa0oOqQAr0ZMdtcTwHrQ=="
}
},
{
@@ -32915,7 +32291,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/versions-mtydohr2/object.txt"
+ "value": "object-tests/board/nested/c.txt"
}
},
{
@@ -32923,7 +32299,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 1
}
},
{
@@ -32931,7 +32307,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-9e3bb87be41c"
+ "value": "fixture-48ff0e151ab7"
}
},
{
@@ -32950,7 +32326,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.3326281Z"
+ "value": "2024-01-01T00:00:00.7881326Z"
}
},
{
@@ -32966,7 +32342,66 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GyZ2GcSBLMRu4oF0eITKUA=="
+ "value": "SooI8J03tzeVZJA4QItfMw=="
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/z.txt"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-b905747bf74f"
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.3834597Z"
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/2/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Je0by0I7C3IA9IX8X/ccjg=="
}
},
{
@@ -32974,7 +32409,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 2
+ "value": 3
}
},
{
@@ -32997,16 +32432,17 @@
"refusal": null
},
{
- "id": "operations/azure/list-written-with-hashes",
+ "id": "operations/azure/list-separator-keys-delimited",
"profile": "azure",
"lane": "core",
- "purpose": "list written with hashes",
+ "purpose": "list separator keys delimited",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
+ "delimiter": "/",
"op": "list_page",
- "prefix": "object-tests/hashes/"
+ "prefix": "object-tests/separators/"
},
"exchanges": [
{
@@ -33058,7 +32494,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/hashes/"
+ "value": "object-tests/separators/"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
}
}
],
@@ -33076,7 +32520,7 @@
},
"body": {
"encoding": "utf8",
- "data": "object-tests/hashes/object-tests/hashes/committed.bin2024-01-01T00:00:00.2802899ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-879f71a2d23b13application/octet-streamN6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrueobject-tests/hashes/crc64.txt2024-01-01T00:00:00.1153123ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-c55cf5f18aae13application/octet-stream9XBvAwWoR9o=N6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrueobject-tests/hashes/md5.txt2024-01-01T00:00:00.7803759ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1f199b777f0713application/octet-streamN6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrue"
+ "data": "object-tests/separators//object-tests/separators/..leading2024-01-01T00:00:00.1857029ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-99f23038e5ea1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/a.b/object-tests/separators/dot2024-01-01T00:00:00.2106231ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ccbcb2d755851application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/double/object-tests/separators/space /object-tests/separators/trailing/"
},
"framing": "chunked"
}
@@ -33098,7 +32542,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/hashes/committed.bin"
+ "value": "object-tests/separators/..leading"
}
},
{
@@ -33106,7 +32550,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 13
+ "value": 1
}
},
{
@@ -33114,7 +32558,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-879f71a2d23b"
+ "value": "fixture-99f23038e5ea"
}
},
{
@@ -33133,7 +32577,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2802899Z"
+ "value": "2024-01-01T00:00:00.1857029Z"
}
},
{
@@ -33149,7 +32593,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
@@ -33157,7 +32601,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/hashes/crc64.txt"
+ "value": "object-tests/separators/dot"
}
},
{
@@ -33165,7 +32609,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 13
+ "value": 1
}
},
{
@@ -33173,7 +32617,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-c55cf5f18aae"
+ "value": "fixture-ccbcb2d75585"
}
},
{
@@ -33192,7 +32636,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1153123Z"
+ "value": "2024-01-01T00:00:00.2106231Z"
}
},
{
@@ -33208,82 +32652,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
- }
- },
- {
- "at": "/value/entries/1/content_crc64_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "9XBvAwWoR9o="
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/hashes/md5.txt"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/entries/2/size",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": 13
+ "is": "array_length",
+ "value": 2
}
},
{
- "at": "/value/entries/2/etag",
+ "at": "/value/prefixes/0",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-1f199b777f07"
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "object-tests/separators/a.b/"
}
},
{
- "at": "/value/entries/2/version",
+ "at": "/value/prefixes/1",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7803759Z"
+ "value": "object-tests/separators/double/"
}
},
{
- "at": "/value/entries/2/is_current_version",
+ "at": "/value/prefixes/2",
"optional": false,
"rule": {
"is": "equal",
- "value": true
+ "value": "object-tests/separators/space /"
}
},
{
- "at": "/value/entries/2/content_md5_base64",
+ "at": "/value/prefixes/3",
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 3
+ "value": "object-tests/separators/trailing/"
}
},
{
@@ -33291,7 +32700,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 4
}
},
{
@@ -33306,17 +32715,16 @@
"refusal": null
},
{
- "id": "operations/azure/put-container-missing",
+ "id": "operations/azure/list-separator-keys",
"profile": "azure",
"lane": "core",
- "purpose": "put container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
+ "purpose": "list separator keys",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
- "key": "object.txt",
- "op": "put"
+ "op": "list_page",
+ "prefix": "object-tests/separators/"
},
"exchanges": [
{
@@ -33328,7 +32736,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -33336,7 +32744,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object.txt"
+ "value": "/fixture"
}
},
{
@@ -33344,35 +32752,51 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bm90aGluZyBpcyBzdG9yZWQ="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/restype",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/separators/"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ContainerNotFound"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "ContainerNotFoundFixture error"
- }
+ "data": "object-tests/separators/object-tests/separators/..leading2024-01-01T00:00:00.1857029ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-99f23038e5ea1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/a.b/c2024-01-01T00:00:00.4918444ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4a4f8766cc8e1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/dot2024-01-01T00:00:00.2106231ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-ccbcb2d755851application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/double//slash2024-01-01T00:00:00.9957719ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-32b8d82fce871application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/space /x2024-01-01T00:00:00.8166959ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-0b64e32539cd1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrueobject-tests/separators/trailing/2024-01-01T00:00:00.6886650ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-3be5b05a5c3b1application/octet-streamxMpCOKC5I4INzFCab3WEmw==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -33384,791 +32808,404 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "object-tests/separators/..leading"
}
},
{
- "at": "/code",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "ContainerNotFound"
+ "value": 1
}
},
{
- "at": "/kind",
+ "at": "/value/entries/0/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "container_not_found"
+ "value": "fixture-99f23038e5ea"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-crc64-mismatch",
- "profile": "azure",
- "lane": "core",
- "purpose": "put crc64 mismatch",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "ZGVjbGFyZWQtYm9keQ==",
- "checksum": {
- "algorithm": "azure_crc64",
- "value_base64": "khqMBK+EUSA="
},
- "key": "object-tests/hashes/crc64-mismatch.txt",
- "op": "put"
- },
- "exchanges": [
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/hashes/crc64-mismatch.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ZGVjbGFyZWQtYm9keQ=="
- }
- },
- {
- "at": "/headers/x-ms-content-crc64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "khqMBK+EUSA="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 400,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "Crc64Mismatch"
- },
- "body": {
- "encoding": "utf8",
- "data": "Crc64MismatchFixture error"
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/0/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "2024-01-01T00:00:00.1857029Z"
}
},
{
- "at": "/status",
+ "at": "/value/entries/0/is_current_version",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": true
}
},
{
- "at": "/code",
+ "at": "/value/entries/0/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "Crc64Mismatch"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-empty",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created empty",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "",
- "key": "object-tests/write/empty.bin",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/write/empty.bin"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-ee13937a1c94\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7573734Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/separators/a.b/c"
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/1/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": 1
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/1/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-ee13937a1c94\""
+ "value": "fixture-4a4f8766cc8e"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7573734Z"
+ "value": "2024-01-01T00:00:00.4918444Z"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/write/object.txt",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/1/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/1/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/2/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "object-tests/separators/dot"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/2/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": 1
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-key-question",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created, with the key \"question?mark.txt\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/question?mark.txt",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-ccbcb2d75585"
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "2024-01-01T00:00:00.2106231Z"
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/2/is_current_version",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": true
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/2/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-key-hash",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created, with the key \"hash#tag.txt\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/hash#tag.txt",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/3/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/separators/double//slash"
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/3/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": 1
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/3/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "fixture-32b8d82fce87"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/3/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": "2024-01-01T00:00:00.9957719Z"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-key-percent",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created, with the key \"percent%20.txt\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/percent%20.txt",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/3/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/3/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/4/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "object-tests/separators/space /x"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/4/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": 1
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-key-plus",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created, with the key \"plus+plus.txt\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/plus+plus.txt",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/4/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-0b64e32539cd"
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/4/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "2024-01-01T00:00:00.8166959Z"
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/4/is_current_version",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": true
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/4/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries/5/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/separators/trailing/"
+ }
+ },
+ {
+ "at": "/value/entries/5/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/5/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-3be5b05a5c3b"
+ }
+ },
+ {
+ "at": "/value/entries/5/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6886650Z"
+ }
+ },
+ {
+ "at": "/value/entries/5/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/5/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-created-key-space",
+ "id": "operations/azure/list-snapshots-after-delete",
"profile": "azure",
"lane": "core",
- "purpose": "put created, with the key \"space name.txt\"",
+ "purpose": "list snapshots after delete",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/space name.txt",
- "op": "put"
+ "include": [
+ "snapshots"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/snapshots-all/"
},
"exchanges": [
{
@@ -34180,7 +33217,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34188,7 +33225,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture"
}
},
{
@@ -34196,39 +33233,59 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/restype",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots-all/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "snapshots"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "object-tests/snapshots-all/"
+ },
+ "framing": "chunked"
}
}
]
@@ -34244,36 +33301,46 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries",
"optional": false,
"rule": {
- "is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/version",
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-created-key-non-ascii",
+ "id": "operations/azure/list-snapshots-after-snapshots-deleted",
"profile": "azure",
"lane": "core",
- "purpose": "put created, with the key \"café/雪.txt\"",
+ "purpose": "list snapshots after snapshots deleted",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/café/雪.txt",
- "op": "put"
+ "include": [
+ "snapshots"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/snapshots-only/"
},
"exchanges": [
{
@@ -34285,7 +33352,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34293,7 +33360,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture"
}
},
{
@@ -34301,39 +33368,59 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/restype",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots-only/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "snapshots"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "object-tests/snapshots-only/object-tests/snapshots-only/object.txt2024-01-01T00:00:00.6170785ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-493478beeeaf4application/octet-streamTYtghPPRZ7dsrGaiKpG+Ag==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -34349,36 +33436,106 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "object-tests/snapshots-only/object.txt"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": 4
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-493478beeeaf"
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6170785Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "TYtghPPRZ7dsrGaiKpG+Ag=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-created-key-double-slash",
+ "id": "operations/azure/list-snapshots-and-versions",
"profile": "azure",
"lane": "core",
- "purpose": "put created, with the key \"double//slash.txt\"",
+ "purpose": "list snapshots and versions",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/double//slash.txt",
- "op": "put"
+ "include": [
+ "snapshots",
+ "versions"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/snapshots/"
},
"exchanges": [
{
@@ -34390,7 +33547,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34398,7 +33555,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture"
}
},
{
@@ -34406,39 +33563,59 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/restype",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "snapshots,versions"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "object-tests/snapshots/object-tests/snapshots/object.txt2024-01-01T00:00:00.4877091ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.7351568ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.8746441ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.6268993ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-222f410e528f3application/octet-streamuKn3Fdu2T9XFbneDxoIKYQ==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -34454,240 +33631,291 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "object-tests/snapshots/object.txt"
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": 3
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-created-key-trailing-slash",
- "profile": "azure",
- "lane": "core",
- "purpose": "put created, with the key \"trailing-slash/\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/trailing-slash/",
- "op": "put"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-7adbbe4768f3"
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "2024-01-01T00:00:00.4877091Z"
}
},
{
- "at": "/value/etag",
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
}
},
{
- "at": "/value/version",
+ "at": "/value/entries/1/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": "object-tests/snapshots/object.txt"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/copy-missing-source",
- "profile": "azure",
- "lane": "core",
- "purpose": "Refuse a copy whose source does not exist",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
- ],
- "call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/absent.txt"
- },
- "exchanges": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 404,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "BlobNotFound"
- },
- "body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
- }
- }
- }
- ]
- }
- ],
- "expect": [
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
{
- "at": "/outcome",
+ "at": "/value/entries/1/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "fixture-7adbbe4768f3"
}
},
{
- "at": "/status",
+ "at": "/value/entries/1/snapshot",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "2024-01-01T00:00:00.7351568Z"
}
},
{
- "at": "/code",
+ "at": "/value/entries/1/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots/object.txt"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-7adbbe4768f3"
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.8746441Z"
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
+ }
+ },
+ {
+ "at": "/value/entries/3/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots/object.txt"
+ }
+ },
+ {
+ "at": "/value/entries/3/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/entries/3/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-222f410e528f"
+ }
+ },
+ {
+ "at": "/value/entries/3/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6268993Z"
+ }
+ },
+ {
+ "at": "/value/entries/3/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/3/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "uKn3Fdu2T9XFbneDxoIKYQ=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 4
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy",
+ "id": "operations/azure/list-snapshots",
"profile": "azure",
"lane": "core",
- "purpose": "Copy an object to another key in the same container",
+ "purpose": "list snapshots",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "include": [
+ "snapshots"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/snapshots/"
},
"exchanges": [
{
@@ -34699,7 +33927,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34707,7 +33935,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -34719,30 +33947,55 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "snapshots"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
- }
+ "encoding": "utf8",
+ "data": "object-tests/snapshots/object-tests/snapshots/object.txt2024-01-01T00:00:00.7351568ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-7adbbe4768f33application/octet-stream+XxdKZQb+xsv2rCHSQargg==BlockBlobHottruetrueobject-tests/snapshots/object.txt2024-01-01T00:00:00.6268993ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-222f410e528f3application/octet-streamuKn3Fdu2T9XFbneDxoIKYQ==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -34758,31 +34011,164 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "object-tests/snapshots/object.txt"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-7adbbe4768f3"
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7351568Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "+XxdKZQb+xsv2rCHSQargg=="
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/snapshots/object.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-222f410e528f"
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.6268993Z"
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "uKn3Fdu2T9XFbneDxoIKYQ=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-replace-metadata",
+ "id": "operations/azure/list-staged-only",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
+ "purpose": "list staged only",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "metadata": {
- "colour": "blue"
- },
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "op": "list_page",
+ "prefix": "object-tests/multipart/staged.bin"
},
"exchanges": [
{
@@ -34794,7 +34180,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34802,7 +34188,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -34814,38 +34200,47 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
}
},
{
- "at": "/headers/x-ms-meta-colour",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "blue"
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/multipart/staged.bin"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
- }
+ "encoding": "utf8",
+ "data": "object-tests/multipart/staged.bin"
+ },
+ "framing": "chunked"
}
}
]
@@ -34861,29 +34256,43 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-source-if-match",
+ "id": "operations/azure/list-unauthenticated",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_if_match": "\"fixture-etag\"",
- "source_key": "object-tests/copy/source.txt"
+ "op": "list_page",
+ "prefix": "object-tests/"
},
"exchanges": [
{
@@ -34895,7 +34304,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -34903,7 +34312,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -34915,37 +34324,44 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
}
},
{
- "at": "/headers/x-ms-source-if-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-etag\""
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 401,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-error-code": "InvalidAuthenticationInfo"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "InvalidAuthenticationInfoFixture error"
}
}
}
@@ -34958,33 +34374,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/copy_status",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": 401
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidAuthenticationInfo"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-source-if-match-failed",
+ "id": "operations/azure/list-versions-of-deleted-object",
"profile": "azure",
"lane": "core",
- "purpose": "Report a copy whose source does not have the ETag in x-ms-source-if-match as a failed condition, 412 SourceConditionNotMet",
+ "purpose": "list versions of deleted object",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_if_match": "\"fixture-0123456789ab\"",
- "source_key": "object-tests/copy/source.txt"
+ "include": [
+ "versions"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/versions-mtydohr2/deleted.txt"
},
"exchanges": [
{
@@ -34996,7 +34421,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -35004,7 +34429,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -35016,37 +34441,55 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
}
},
{
- "at": "/headers/x-ms-source-if-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-0123456789ab\""
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/versions-mtydohr2/deleted.txt"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "versions"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "SourceConditionNotMet"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "SourceConditionNotMetFixture error"
- }
+ "data": "object-tests/versions-mtydohr2/deleted.txtobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.0160641ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-3b1602b981e92application/octet-streamASCk+RlqX5659SPzH5FNpw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.3127057ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-629d3a1755352application/octet-stream4cgEiIU9hqudbez+MNiTDw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/deleted.txt2024-01-01T00:00:00.0760252ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-4de1996d2b4b2application/octet-streamip/X39qAKSH9xAefmlKM6A==BlockBlobHottruetrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -35058,41 +34501,236 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "object-tests/versions-mtydohr2/deleted.txt"
}
},
{
- "at": "/code",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "SourceConditionNotMet"
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-3b1602b981e9"
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.0160641Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ASCk+RlqX5659SPzH5FNpw=="
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/versions-mtydohr2/deleted.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-629d3a175535"
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.3127057Z"
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "4cgEiIU9hqudbez+MNiTDw=="
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/versions-mtydohr2/deleted.txt"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-4de1996d2b4b"
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.0760252Z"
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ip/X39qAKSH9xAefmlKM6A=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-source-if-unmodified-since-failed",
+ "id": "operations/azure/list-versions",
"profile": "azure",
"lane": "core",
- "purpose": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
+ "purpose": "list versions",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_if_unmodified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
- "source_key": "object-tests/copy/source.txt"
+ "include": [
+ "versions"
+ ],
+ "op": "list_page",
+ "prefix": "object-tests/versions-mtydohr2/"
},
"exchanges": [
{
@@ -35104,7 +34742,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -35112,7 +34750,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -35124,37 +34762,55 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
}
},
{
- "at": "/headers/x-ms-source-if-unmodified-since",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/versions-mtydohr2/"
+ }
+ },
+ {
+ "at": "/query/include",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "versions"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "SourceConditionNotMet"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "SourceConditionNotMetFixture error"
- }
+ "data": "object-tests/versions-mtydohr2/object-tests/versions-mtydohr2/object.txt2024-01-01T00:00:00.2318906ZMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9dc9ff8bf5132application/octet-streamZlTHNMyrj0QP8IJetEPcfw==BlockBlobHottruetrueobject-tests/versions-mtydohr2/object.txt2024-01-01T00:00:00.3326281ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-9e3bb87be41c2application/octet-streamGyZ2GcSBLMRu4oF0eITKUA==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -35166,41 +34822,168 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "object-tests/versions-mtydohr2/object.txt"
}
},
{
- "at": "/code",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "SourceConditionNotMet"
+ "value": 2
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/copy-if-none-match-exists",
- "profile": "azure",
- "lane": "core",
- "purpose": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
- ],
- "call": {
- "if_none_match": "*",
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-9dc9ff8bf513"
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2318906Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ZlTHNMyrj0QP8IJetEPcfw=="
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/versions-mtydohr2/object.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-9e3bb87be41c"
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.3326281Z"
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GyZ2GcSBLMRu4oF0eITKUA=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/list-written-with-hashes",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "list written with hashes",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "op": "list_page",
+ "prefix": "object-tests/hashes/"
},
"exchanges": [
{
@@ -35212,7 +34995,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -35220,7 +35003,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture"
}
},
{
@@ -35232,37 +35015,47 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/restype",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "container"
}
},
{
- "at": "/headers/if-none-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "*"
+ "value": "list"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/hashes/"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobAlreadyExists"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "BlobAlreadyExistsFixture error"
- }
+ "data": "object-tests/hashes/object-tests/hashes/committed.bin2024-01-01T00:00:00.2802899ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-879f71a2d23b13application/octet-streamN6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrueobject-tests/hashes/crc64.txt2024-01-01T00:00:00.1153123ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-c55cf5f18aae13application/octet-stream9XBvAwWoR9o=N6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrueobject-tests/hashes/md5.txt2024-01-01T00:00:00.7803759ZtrueMon, 01 Jan 2024 00:00:00 GMTMon, 01 Jan 2024 00:00:00 GMTfixture-1f199b777f0713application/octet-streamN6YZkbg+Lyfxtskwn8iRCg==BlockBlobHottrueunlockedavailabletrue"
+ },
+ "framing": "chunked"
}
}
]
@@ -35274,41 +35067,233 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/entries/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": "object-tests/hashes/committed.bin"
}
},
{
- "at": "/code",
+ "at": "/value/entries/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobAlreadyExists"
+ "value": 13
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-879f71a2d23b"
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2802899Z"
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/0/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/hashes/crc64.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 13
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-c55cf5f18aae"
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.1153123Z"
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/1/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ }
+ },
+ {
+ "at": "/value/entries/1/content_crc64_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "9XBvAwWoR9o="
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/hashes/md5.txt"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 13
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-1f199b777f07"
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7803759Z"
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/entries/2/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-across-containers",
+ "id": "operations/azure/put-container-missing",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob from another container of the same account, which x-ms-copy-source names in its URL",
+ "purpose": "put container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_container": "source",
- "source_key": "object-tests/copy/source.txt"
+ "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
+ "key": "object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35328,7 +35313,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object.txt"
}
},
{
@@ -35336,33 +35321,34 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "bm90aGluZyBpcyBzdG9yZWQ="
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/source/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-error-code": "ContainerNotFound"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "ContainerNotFoundFixture error"
}
}
}
@@ -35375,33 +35361,52 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/copy_status",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ContainerNotFound"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container_not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-tier",
+ "id": "operations/azure/put-crc64-mismatch",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob into another access tier, named in x-ms-access-tier",
+ "purpose": "put crc64 mismatch",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt",
- "tier": "Cool"
+ "body_base64": "ZGVjbGFyZWQtYm9keQ==",
+ "checksum": {
+ "algorithm": "azure_crc64",
+ "value_base64": "khqMBK+EUSA="
+ },
+ "key": "object-tests/hashes/crc64-mismatch.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35421,7 +35426,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/hashes/crc64-mismatch.txt"
}
},
{
@@ -35429,41 +35434,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "ZGVjbGFyZWQtYm9keQ=="
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/headers/x-ms-content-crc64",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "khqMBK+EUSA="
}
},
{
- "at": "/headers/x-ms-access-tier",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "Cool"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-error-code": "Crc64Mismatch"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "Crc64MismatchFixture error"
}
}
}
@@ -35476,32 +35482,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/copy_status",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Crc64Mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-source-key-encoded",
+ "id": "operations/azure/put-created-empty",
"profile": "azure",
"lane": "core",
- "purpose": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
+ "purpose": "put created empty",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/a b+c%é?#.txt"
+ "body_base64": "",
+ "key": "object-tests/write/empty.bin",
+ "op": "put"
},
"exchanges": [
{
@@ -35521,7 +35535,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/write/empty.bin"
}
},
{
@@ -35533,29 +35547,34 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/a%20b%2[Bb]c%25%[Cc]3%[Aa]9%3[Ff]%23\\.txt"
+ "is": "equal",
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
+ "content-md5": "1B2M2Y8AsgTpgAmY7PhCfg==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-ee13937a1c94\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7573734Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -35572,29 +35591,36 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-ee13937a1c94\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7573734Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-source-version",
+ "id": "operations/azure/put-created",
"profile": "azure",
"lane": "core",
- "purpose": "Copy an earlier version of a blob, named by versionid in the x-ms-copy-source URL",
+ "purpose": "put created",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt",
- "source_version": "2024-01-01T00:00:00.0000000Z"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35614,7 +35640,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -35622,33 +35648,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt\\?versionid=2024-01-01T00(?:%3[Aa]|:)00(?:%3[Aa]|:)00\\.0000000Z"
+ "is": "equal",
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -35665,29 +35696,36 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-sync",
+ "id": "operations/azure/put-created-key-question",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. The source must be readable by URL: by a SAS, or by a bearer token in x-ms-copy-source-authorization",
+ "purpose": "put created, with the key \"question?mark.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt",
- "sync": true
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/question?mark.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35707,7 +35745,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/question?mark.txt"
}
},
{
@@ -35715,43 +35753,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-requires-sync",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "true"
+ "value": "BlockBlob"
}
}
],
"allow_headers": [
- "x-ms-copy-source-authorization"
+ "content-type"
],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -35768,29 +35801,36 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-sync-missing-source",
+ "id": "operations/azure/put-created-key-hash",
"profile": "azure",
"lane": "core",
- "purpose": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "purpose": "put created, with the key \"hash#tag.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/absent.txt",
- "sync": true
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/hash#tag.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35810,7 +35850,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
}
},
{
@@ -35818,42 +35858,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-requires-sync",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "true"
+ "value": "BlockBlob"
}
}
],
"allow_headers": [
- "x-ms-copy-source-authorization"
+ "content-type"
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "CannotVerifyCopySource"
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "CannotVerifyCopySourceFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -35866,42 +35902,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "CannotVerifyCopySource"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-pending",
+ "id": "operations/azure/put-created-key-percent",
"profile": "azure",
"lane": "core",
- "purpose": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
+ "purpose": "put created, with the key \"percent%20.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "transient",
- "derived_from": "operations/azure/copy",
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/percent%20.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -35921,7 +35955,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/percent%20.txt"
}
},
{
@@ -35929,33 +35963,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "pending"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -35972,37 +36011,36 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "pending"
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/value/copy_id",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/copy-content-properties",
+ "id": "operations/azure/put-created-key-plus",
"profile": "azure",
"lane": "core",
- "purpose": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
+ "purpose": "put created, with the key \"plus+plus.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "content_type": "text/plain",
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -36022,7 +36060,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
}
},
{
@@ -36030,41 +36068,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-blob-content-type",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -36081,54 +36116,36 @@
}
},
{
- "at": "/value/copy_status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "success"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/parameter",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "content_type"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure/put-from-url",
+ "id": "operations/azure/put-created-key-space",
"profile": "azure",
"lane": "core",
- "purpose": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
+ "purpose": "put created, with the key \"space name.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/source.txt"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/space name.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -36148,7 +36165,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/space name.txt"
}
},
{
@@ -36156,15 +36173,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -36177,22 +36186,25 @@
}
],
"allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
+ "content-type"
],
"allow_query": [],
"response": {
"status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -36213,26 +36225,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-etag\""
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-from-url-content-properties",
+ "id": "operations/azure/put-created-key-non-ascii",
"profile": "azure",
"lane": "core",
- "purpose": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
+ "purpose": "put created, with the key \"café/雪.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "cache_control": "max-age=3600",
- "content_type": "text/plain",
- "key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/source.txt"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -36252,7 +36270,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/café/雪.txt"
}
},
{
@@ -36260,15 +36278,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -36278,41 +36288,28 @@
"is": "equal",
"value": "BlockBlob"
}
- },
- {
- "at": "/headers/x-ms-blob-content-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain"
- }
- },
- {
- "at": "/headers/x-ms-blob-cache-control",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "max-age=3600"
- }
}
],
"allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
+ "content-type"
],
"allow_query": [],
"response": {
"status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -36333,24 +36330,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-etag\""
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-from-url-missing-source",
+ "id": "operations/azure/put-created-key-double-slash",
"profile": "azure",
"lane": "core",
- "purpose": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "purpose": "put created, with the key \"double//slash.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/absent.txt"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -36370,7 +36375,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/double//slash.txt"
}
},
{
@@ -36378,15 +36383,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -36399,22 +36396,25 @@
}
],
"allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
+ "content-type"
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "CannotVerifyCopySource"
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "CannotVerifyCopySourceFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -36427,42 +36427,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "CannotVerifyCopySource"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/abort-copy",
+ "id": "operations/azure/put-created-key-trailing-slash",
"profile": "azure",
"lane": "core",
- "purpose": "Abort a pending copy by its copy ID, with x-ms-copy-action: abort",
+ "purpose": "put created, with the key \"trailing-slash/\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "transient",
- "derived_from": "operations/azure/abort-copy-finished",
"call": {
- "copy_id": "fixture-copy-id",
- "key": "object-tests/copy/target.txt",
- "op": "azure.abort_copy"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/trailing-slash/",
+ "op": "put"
},
"exchanges": [
{
@@ -36482,7 +36480,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/keys/trailing-slash/"
}
},
{
@@ -36490,45 +36488,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "copy"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/copyid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
- }
- },
- {
- "at": "/headers/x-ms-copy-action",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "abort"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -36543,22 +36534,38 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/abort-copy-finished",
+ "id": "operations/azure/copy-missing-source",
"profile": "azure",
"lane": "core",
- "purpose": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
+ "purpose": "Refuse a copy whose source does not exist",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "copy_id": "fixture-copy-id",
"key": "object-tests/copy/target.txt",
- "op": "azure.abort_copy"
+ "op": "copy",
+ "source_key": "object-tests/copy/absent.txt"
},
"exchanges": [
{
@@ -36590,44 +36597,28 @@
}
},
{
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "copy"
- }
- },
- {
- "at": "/query/copyid",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-copy-id"
- }
- },
- {
- "at": "/headers/x-ms-copy-action",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "abort"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "NoPendingCopyOperation"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
"encoding": "utf8",
- "data": "NoPendingCopyOperationFixture error"
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -36648,7 +36639,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 404
}
},
{
@@ -36656,23 +36647,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "NoPendingCopyOperation"
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-page-ranges",
+ "id": "operations/azure/copy",
"profile": "azure",
"lane": "core",
- "purpose": "List the written ranges of a page blob",
+ "purpose": "Copy an object to another key in the same container",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-page-ranges"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "key": "object-tests/pages/object.vhd",
- "op": "azure.get_page_ranges"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -36684,7 +36676,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -36692,7 +36684,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -36704,32 +36696,30 @@
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "pagelist"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-content-length": "1024"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "0511"
- },
- "framing": "chunked"
+ "encoding": "empty"
+ }
}
}
]
@@ -36745,34 +36735,31 @@
}
},
{
- "at": "/value/ranges",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- {
- "end": 512,
- "start": 0
- }
- ]
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/upload-pages-unaligned",
+ "id": "operations/azure/copy-replace-metadata",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a page write that does not start on a 512-byte boundary",
+ "purpose": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
- "key": "object-tests/pages/object.vhd",
- "offset": 1,
- "op": "azure.upload_pages"
+ "key": "object-tests/copy/target.txt",
+ "metadata": {
+ "colour": "blue"
+ },
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -36792,7 +36779,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -36800,48 +36787,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "page"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-page-write",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "update"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-range",
+ "at": "/headers/x-ms-meta-colour",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=1-512"
+ "value": "blue"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidHeaderValue"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidHeaderValueFixture error"
+ "encoding": "empty"
}
}
}
@@ -36854,41 +36834,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidHeaderValue"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/upload-pages",
+ "id": "operations/azure/copy-source-if-match",
"profile": "azure",
"lane": "core",
- "purpose": "Write the first page of a page blob",
+ "purpose": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
- "key": "object-tests/pages/object.vhd",
- "offset": 0,
- "op": "azure.upload_pages"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_match": "\"fixture-etag\"",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -36908,7 +36880,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -36916,46 +36888,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "page"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-page-write",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "update"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-range",
+ "at": "/headers/x-ms-source-if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=0-511"
+ "value": "\"fixture-etag\""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-sequence-number": "0",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -36973,22 +36937,31 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/copy_status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "success"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/create-page",
+ "id": "operations/azure/copy-source-if-match-failed",
"profile": "azure",
"lane": "core",
- "purpose": "Create a page blob of 1,024 bytes",
+ "purpose": "Report a copy whose source does not have the ETag in x-ms-source-if-match as a failed condition, 412 SourceConditionNotMet",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "key": "object-tests/pages/object.vhd",
- "op": "azure.create_page",
- "size": 1024
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_match": "\"fixture-0123456789ab\"",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -37008,7 +36981,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37020,36 +36993,36 @@
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "PageBlob"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-blob-content-length",
+ "at": "/headers/x-ms-source-if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "1024"
+ "value": "\"fixture-0123456789ab\""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 412,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "SourceConditionNotMet"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "SourceConditionNotMetFixture error"
}
}
}
@@ -37062,24 +37035,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 412
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "SourceConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/append-block-to-block-blob",
+ "id": "operations/azure/copy-source-if-unmodified-since-failed",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse an append to a block blob",
+ "purpose": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "c2Vjb25k",
- "key": "object-tests/append/object.log",
- "op": "azure.append_block"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_unmodified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -37099,7 +37089,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/append/object.log"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37107,32 +37097,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-if-unmodified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "appendblock"
+ "value": "Mon, 01 Jan 2024 00:00:00 GMT"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidBlobType"
+ "x-ms-error-code": "SourceConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "InvalidBlobTypeFixture error"
+ "data": "SourceConditionNotMetFixture error"
}
}
}
@@ -37153,7 +37151,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 412
}
},
{
@@ -37161,25 +37159,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidBlobType"
+ "value": "SourceConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/append-block-at-wrong-position",
+ "id": "operations/azure/copy-if-none-match-exists",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse an append whose position condition does not match the blob length",
+ "purpose": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "append_position": 0,
- "body_base64": "c2Vjb25k",
- "key": "object-tests/append/object.log",
- "op": "azure.append_block"
+ "if_none_match": "*",
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -37199,7 +37197,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/append/object.log"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37207,40 +37205,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "appendblock"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-blob-condition-appendpos",
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "0"
+ "value": "*"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 409,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "AppendPositionConditionNotMet"
+ "x-ms-error-code": "BlobAlreadyExists"
},
"body": {
"encoding": "utf8",
- "data": "AppendPositionConditionNotMetFixture error"
+ "data": "BlobAlreadyExistsFixture error"
}
}
}
@@ -37261,7 +37259,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": 409
}
},
{
@@ -37269,24 +37267,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "AppendPositionConditionNotMet"
+ "value": "BlobAlreadyExists"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/append-block",
+ "id": "operations/azure/copy-across-containers",
"profile": "azure",
"lane": "core",
- "purpose": "Append a block to an append blob and report its offset",
+ "purpose": "Copy a blob from another container of the same account, which x-ms-copy-source names in its URL",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "c2Vjb25k",
- "key": "object-tests/append/object.log",
- "op": "azure.append_block"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_container": "source",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -37306,7 +37305,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/append/object.log"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37314,31 +37313,30 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "appendblock"
+ "is": "matches",
+ "pattern": "https?://[^/]+/source/object-tests/copy/source\\.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-append-offset": "5",
- "x-ms-blob-committed-block-count": "2",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -37358,35 +37356,29 @@
}
},
{
- "at": "/value/append_offset",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/committed_block_count",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/create-append",
+ "id": "operations/azure/copy-tier",
"profile": "azure",
"lane": "core",
- "purpose": "Create an empty append blob",
+ "purpose": "Copy a blob into another access tier, named in x-ms-access-tier",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "key": "object-tests/append/object.log",
- "op": "azure.create_append"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt",
+ "tier": "Cool"
},
"exchanges": [
{
@@ -37406,7 +37398,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/append/object.log"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37418,25 +37410,34 @@
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "AppendBlob"
+ "value": "Cool"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -37454,23 +37455,30 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/copy_status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "success"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-leased-if-match-without-lease-id",
+ "id": "operations/azure/copy-source-key-encoded",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a write to a leased object whose If-Match holds but that names no lease ID",
+ "purpose": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "c2Vjb25k",
- "if_match": "\"fixture-etag\"",
- "key": "object-tests/leases/object.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/a b+c%é?#.txt"
},
"exchanges": [
{
@@ -37490,7 +37498,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37498,40 +37506,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "value": ""
}
},
{
- "at": "/headers/if-match",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "\"fixture-etag\""
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/a%20b%2[Bb]c%25%[Cc]3%[Aa]9%3[Ff]%23\\.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "LeaseIdMissing"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "LeaseIdMissingFixture error"
+ "encoding": "empty"
}
}
}
@@ -37544,41 +37545,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "LeaseIdMissing"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-leased-with-lease-id",
+ "id": "operations/azure/copy-source-version",
"profile": "azure",
"lane": "core",
- "purpose": "Write to a leased object with its lease ID",
+ "purpose": "Copy an earlier version of a blob, named by versionid in the x-ms-copy-source URL",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "c2Vjb25k",
- "key": "object-tests/leases/object.txt",
- "lease_id": "11111111-2222-3333-4444-555555555555",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt",
+ "source_version": "2024-01-01T00:00:00.0000000Z"
},
"exchanges": [
{
@@ -37598,7 +37591,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37606,37 +37599,30 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-lease-id",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "11111111-2222-3333-4444-555555555555"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt\\?versionid=2024-01-01T00(?:%3[Aa]|:)00(?:%3[Aa]|:)00\\.0000000Z"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -37654,22 +37640,31 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/copy_status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "success"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-leased-without-lease-id",
+ "id": "operations/azure/copy-sync",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a write to a leased object that names no lease ID",
+ "purpose": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. Azure reads the source by URL as the caller, or with the bearer token in x-ms-copy-source-authorization",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
- "body_base64": "c2Vjb25k",
- "key": "object-tests/leases/object.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt",
+ "sync": true
},
"exchanges": [
{
@@ -37689,7 +37684,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37697,32 +37692,49 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "true"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "LeaseIdMissing"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "LeaseIdMissingFixture error"
+ "encoding": "empty"
}
}
}
@@ -37735,41 +37747,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "LeaseIdMissing"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/lease-break",
+ "id": "operations/azure/copy-sync-missing-source",
"profile": "azure",
"lane": "core",
- "purpose": "Break a lease at once",
+ "purpose": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
- "action": "break",
- "break_period": 0,
- "key": "object-tests/leases/object.txt",
- "op": "azure.lease"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/absent.txt",
+ "sync": true
},
"exchanges": [
{
@@ -37789,7 +37793,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37801,44 +37805,44 @@
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "lease"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
}
},
{
- "at": "/headers/x-ms-lease-action",
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": "break"
+ "value": "true"
}
},
{
- "at": "/headers/x-ms-lease-break-period",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "0"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-time": "0"
+ "x-ms-error-code": "CannotVerifyCopySource"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "CannotVerifyCopySourceFixture error"
}
}
}
@@ -37851,25 +37855,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "CannotVerifyCopySource"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/lease-release",
+ "id": "operations/azure/copy-sync-other-account",
"profile": "azure",
"lane": "core",
- "purpose": "Release a lease",
+ "purpose": "Copy a blob with Copy Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
- "action": "release",
- "key": "object-tests/leases/object.txt",
- "lease_id": "11111111-2222-3333-4444-555555555555",
- "op": "azure.lease"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt",
+ "sync": true
},
"exchanges": [
{
@@ -37889,7 +37910,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -37901,40 +37922,42 @@
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "lease"
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-lease-action",
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": "release"
+ "value": "true"
}
},
{
- "at": "/headers/x-ms-lease-id",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "11111111-2222-3333-4444-555555555555"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -37952,24 +37975,32 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/copy_status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "success"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/lease-acquire-leased",
+ "id": "operations/azure/copy-pending",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a second lease while another lease holds the object",
+ "purpose": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
+ "origin": "transient",
+ "derived_from": "operations/azure/copy",
"call": {
- "action": "acquire",
- "duration": 15,
- "key": "object-tests/leases/object.txt",
- "op": "azure.lease",
- "proposed_lease_id": "66666666-7777-8888-9999-000000000000"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -37989,7 +38020,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38001,52 +38032,29 @@
}
},
{
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "lease"
- }
- },
- {
- "at": "/headers/x-ms-lease-action",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "acquire"
- }
- },
- {
- "at": "/headers/x-ms-lease-duration",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "15"
- }
- },
- {
- "at": "/headers/x-ms-proposed-lease-id",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "66666666-7777-8888-9999-000000000000"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "LeaseAlreadyPresent"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "pending"
},
"body": {
- "encoding": "utf8",
- "data": "LeaseAlreadyPresentFixture error"
+ "encoding": "empty"
}
}
}
@@ -38059,42 +38067,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": "pending"
}
},
{
- "at": "/code",
+ "at": "/value/copy_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "LeaseAlreadyPresent"
+ "value": "fixture-copy-id"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/lease-acquire",
+ "id": "operations/azure/copy-content-properties",
"profile": "azure",
"lane": "core",
- "purpose": "Acquire a lease on an object with a proposed lease ID",
+ "purpose": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "action": "acquire",
- "duration": 15,
- "key": "object-tests/leases/object.txt",
- "op": "azure.lease",
- "proposed_lease_id": "11111111-2222-3333-4444-555555555555"
+ "content_type": "text/plain",
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -38114,7 +38121,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/leases/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38126,49 +38133,34 @@
}
},
{
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "lease"
- }
- },
- {
- "at": "/headers/x-ms-lease-action",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "acquire"
- }
- },
- {
- "at": "/headers/x-ms-lease-duration",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "15"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-proposed-lease-id",
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "11111111-2222-3333-4444-555555555555"
+ "value": "text/plain"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-id": "11111111-2222-3333-4444-555555555555"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
"encoding": "empty"
@@ -38188,31 +38180,55 @@
}
},
{
- "at": "/value/lease_id",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "11111111-2222-3333-4444-555555555555"
+ "value": "success"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "content_type"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure/put-with-tags",
+ "id": "operations/azure/copy-other-account",
"profile": "azure",
"lane": "core",
- "purpose": "Write an object with tags",
+ "purpose": "Report an asynchronous Copy Blob from another storage account as an error. It reads such a source only with a SAS, so with Entra ID Azure answers 401 CannotVerifyCopySource, with a bearer token in x-ms-copy-source-authorization or without. Copy between accounts with Copy Blob From URL, Put Blob From URL or Put Block From URL",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "Zmlyc3Q=",
- "key": "object-tests/tags/object.txt",
- "op": "put",
- "tags": {
- "project": "object-tests"
- }
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -38232,7 +38248,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38240,40 +38256,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Zmlyc3Q="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-tags",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "project=object-tests"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 401,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "CannotVerifyCopySource"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "CannotVerifyCopySourceFixture error"
}
}
}
@@ -38286,27 +38302,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 401
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "CannotVerifyCopySource"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-with-tags-special-characters",
+ "id": "operations/azure/put-from-url",
"profile": "azure",
"lane": "core",
- "purpose": "Write a blob with an index tag that holds a space and each of + - = . _ : /, percent-encoded in x-ms-tags",
+ "purpose": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
- "body_base64": "Zmlyc3Q=",
- "key": "object-tests/tags/object.txt",
- "op": "put",
- "tags": {
- "a b+c-d=e.f_g:h/i": "k l+m-n=o.p_q:r/s"
- }
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -38326,7 +38355,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38334,7 +38363,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Zmlyc3Q="
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
@@ -38346,18 +38383,17 @@
}
},
{
- "at": "/headers/x-ms-tags",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "one_of",
- "values": [
- "a%20b%2Bc-d%3De.f_g%3Ah%2Fi=k%20l%2Bm-n%3Do.p_q%3Ar%2Fs",
- "a%20b%2Bc-d%3De.f_g:h/i=k%20l%2Bm-n%3Do.p_q:r/s"
- ]
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
"status": 201,
@@ -38385,32 +38421,32 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-etag\""
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-with-tags-duplicate-key",
+ "id": "operations/azure/put-from-url-content-properties",
"profile": "azure",
"lane": "core",
- "purpose": "Report a write whose x-ms-tags names one key twice as an error. A client may refuse it, or report it unsupported where its API cannot repeat a key",
+ "purpose": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
- "body_base64": "Zmlyc3Q=",
- "key": "object-tests/tags/object.txt",
- "op": "put",
- "tags": [
- {
- "key": "project",
- "value": "a"
- },
- {
- "key": "project",
- "value": "b"
- }
- ]
+ "cache_control": "max-age=3600",
+ "content_type": "text/plain",
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -38430,7 +38466,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38438,7 +38474,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Zmlyc3Q="
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
@@ -38450,28 +38494,46 @@
}
},
{
- "at": "/headers/x-ms-tags",
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "project=a&project=b"
+ "value": "text/plain"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "DuplicateTagNames"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "DuplicateTagNamesFixture error"
+ "encoding": "empty"
}
}
}
@@ -38484,81 +38546,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "DuplicateTagNames"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
+ "value": "ok"
}
},
{
- "at": "/parameter",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "DuplicateTagNames"
+ "value": "\"fixture-etag\""
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure/get-tags",
+ "id": "operations/azure/put-from-url-missing-source",
"profile": "azure",
"lane": "core",
- "purpose": "Read the tags of an object",
+ "purpose": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.get_tags"
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/absent.txt"
},
"exchanges": [
{
@@ -38570,7 +38583,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -38578,7 +38591,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38590,27 +38603,46 @@
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "CannotVerifyCopySource"
},
"body": {
"encoding": "utf8",
- "data": "projectobject-tests"
+ "data": "CannotVerifyCopySourceFixture error"
}
}
}
@@ -38623,33 +38655,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/tags",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "project": "object-tests"
- }
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "CannotVerifyCopySource"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-tags-none",
+ "id": "operations/azure/put-from-url-other-account",
"profile": "azure",
"lane": "core",
- "purpose": "Report no blob index tags for a blob without any, which Azure answers with an empty TagSet",
+ "purpose": "Write a block blob with Put Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.get_tags"
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.put_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -38661,7 +38701,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -38669,7 +38709,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38681,27 +38721,46 @@
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -38718,28 +38777,30 @@
}
},
{
- "at": "/value/tags",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": {}
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure/get-tags-version",
+ "id": "operations/azure/abort-copy",
"profile": "azure",
"lane": "core",
- "purpose": "Get the blob index tags of a previous version, named by versionid in the query",
+ "purpose": "Abort a pending copy by its copy ID, with x-ms-copy-action: abort",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
],
+ "origin": "transient",
+ "derived_from": "operations/azure/abort-copy-finished",
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.get_tags",
- "version": "2024-01-01T00:00:00.0000000Z"
+ "copy_id": "fixture-copy-id",
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.abort_copy"
},
"exchanges": [
{
@@ -38751,7 +38812,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -38759,7 +38820,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38775,31 +38836,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "copy"
}
},
{
- "at": "/query/versionid",
+ "at": "/query/copyid",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.0000000Z"
+ "value": "fixture-copy-id"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "abort"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 204,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
}
},
"body": {
- "encoding": "utf8",
- "data": "projectobject-tests"
+ "encoding": "empty"
}
}
}
@@ -38814,32 +38881,22 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/tags",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": {
- "project": "object-tests"
- }
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/get-tags-snapshot",
+ "id": "operations/azure/abort-copy-finished",
"profile": "azure",
"lane": "core",
- "purpose": "Get the blob index tags of a snapshot, named by snapshot in the query, which keeps the tags the blob had",
+ "purpose": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.get_tags",
- "snapshot": "2024-01-01T00:00:00.0000000Z"
+ "copy_id": "fixture-copy-id",
+ "key": "object-tests/copy/target.txt",
+ "op": "azure.abort_copy"
},
"exchanges": [
{
@@ -38851,7 +38908,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -38859,7 +38916,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -38875,31 +38932,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "copy"
}
},
{
- "at": "/query/snapshot",
+ "at": "/query/copyid",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.0000000Z"
+ "value": "fixture-copy-id"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "abort"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 409,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "NoPendingCopyOperation"
},
"body": {
"encoding": "utf8",
- "data": "projectobject-tests"
+ "data": "NoPendingCopyOperationFixture error"
}
}
}
@@ -38912,36 +38978,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/tags",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "project": "object-tests"
- }
+ "value": 409
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "NoPendingCopyOperation"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tags",
+ "id": "operations/azure/get-page-ranges",
"profile": "azure",
"lane": "core",
- "purpose": "Replace the tags of an object",
+ "purpose": "List the written ranges of a page blob",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-page-ranges"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "project": "object-tests"
- }
+ "key": "object-tests/pages/object.vhd",
+ "op": "azure.get_page_ranges"
},
"exchanges": [
{
@@ -38953,7 +39022,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -38961,15 +39030,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "projectobject-tests"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -38977,33 +39046,28 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "value": "pagelist"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-content-length": "1024"
},
"body": {
- "encoding": "empty"
- }
+ "encoding": "utf8",
+ "data": "0511"
+ },
+ "framing": "chunked"
}
}
]
@@ -39017,33 +39081,36 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/ranges",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ {
+ "end": 512,
+ "start": 0
+ }
+ ]
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tags-10-tags",
+ "id": "operations/azure/upload-pages-unaligned",
"profile": "azure",
"lane": "core",
- "purpose": "Set 10 tags, the most an object takes",
+ "purpose": "Refuse a page write that does not start on a 512-byte boundary",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "tag00": "value0",
- "tag01": "value1",
- "tag02": "value2",
- "tag03": "value3",
- "tag04": "value4",
- "tag05": "value5",
- "tag06": "value6",
- "tag07": "value7",
- "tag08": "value8",
- "tag09": "value9"
- }
+ "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
+ "key": "object-tests/pages/object.vhd",
+ "offset": 1,
+ "op": "azure.upload_pages"
},
"exchanges": [
{
@@ -39063,15 +39130,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "tag00value0tag01value1tag02value2tag03value3tag04value4tag05value5tag06value6tag07value7tag08value8tag09value9"
+ "is": "equal",
+ "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
}
},
{
@@ -39079,32 +39146,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "page"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "update"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=1-512"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -39117,36 +39192,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidHeaderValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tags-11-tags",
+ "id": "operations/azure/upload-pages",
"profile": "azure",
"lane": "core",
- "purpose": "Report 11 tags, one more than an object takes, as an error. A client may refuse them",
+ "purpose": "Write the first page of a page blob",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "tag00": "value0",
- "tag01": "value1",
- "tag02": "value2",
- "tag03": "value3",
- "tag04": "value4",
- "tag05": "value5",
- "tag06": "value6",
- "tag07": "value7",
- "tag08": "value8",
- "tag09": "value9",
- "tag10": "value10"
- }
+ "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
+ "key": "object-tests/pages/object.vhd",
+ "offset": 0,
+ "op": "azure.upload_pages"
},
"exchanges": [
{
@@ -39166,15 +39246,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "tag00value0tag01value1tag02value2tag03value3tag04value4tag05value5tag06value6tag07value7tag08value8tag09value9tag10value10"
+ "is": "equal",
+ "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
}
},
{
@@ -39182,35 +39262,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "page"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "update"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-511"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "TagsTooLarge"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-sequence-number": "0",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "TagsTooLargeFixture error"
+ "encoding": "empty"
}
}
}
@@ -39223,82 +39309,28 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "TagsTooLarge"
+ "value": "ok"
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "TagsTooLarge"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/set-tags-key-128",
+ "id": "operations/azure/upload-pages-from-url",
"profile": "azure",
"lane": "core",
- "purpose": "Set a tag whose key has 128 characters, the longest a key may be",
+ "purpose": "Write the first page of a page blob from the bytes at a URL with Put Page From URL: a PUT with comp=page, x-ms-copy-source and no body. Both x-ms-range and x-ms-source-range are required, each 512-byte aligned with an inclusive end",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk": "v"
+ "key": "object-tests/pages/object.vhd",
+ "offset": 0,
+ "op": "azure.upload_pages_from_url",
+ "source_key": "object-tests/pages/source.bin",
+ "source_range": {
+ "end": 512,
+ "start": 0
}
},
"exchanges": [
@@ -39319,15 +39351,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkv"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -39335,29 +39367,62 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "page"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "update"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-511"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/pages/source\\.bin"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-511"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 201,
"headers": {
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-sequence-number": "0",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -39380,18 +39445,22 @@
"refusal": null
},
{
- "id": "operations/azure/set-tags-key-129",
+ "id": "operations/azure/upload-pages-from-url-other-account",
"profile": "azure",
"lane": "core",
- "purpose": "Report a tag key of 129 characters, one more than a key may have, as an error. A client may refuse it",
+ "purpose": "Write a page with Put Page From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk": "v"
+ "key": "object-tests/pages/object.vhd",
+ "offset": 0,
+ "op": "azure.upload_pages_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/pages/source.bin",
+ "source_range": {
+ "end": 512,
+ "start": 0
}
},
"exchanges": [
@@ -39412,15 +39481,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkv"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -39428,35 +39497,65 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "page"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "update"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-511"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/pages/source\\.bin"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-511"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "TagsTooLarge"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-sequence-number": "0",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "TagsTooLargeFixture error"
+ "encoding": "empty"
}
}
}
@@ -39469,83 +39568,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "TagsTooLarge"
+ "value": "ok"
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "TagsTooLarge"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/set-tags-value-256",
+ "id": "operations/azure/create-page",
"profile": "azure",
"lane": "core",
- "purpose": "Set a tag whose value has 256 characters, the longest a value may be",
+ "purpose": "Create a page blob of 1,024 bytes",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "k": "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
- }
+ "key": "object-tests/pages/object.vhd",
+ "op": "azure.create_page",
+ "size": 1024
},
"exchanges": [
{
@@ -39565,45 +39605,45 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "kvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
+ "is": "equal",
+ "value": ""
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "PageBlob"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-blob-content-length",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "1024"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 201,
"headers": {
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -39626,19 +39666,17 @@
"refusal": null
},
{
- "id": "operations/azure/set-tags-value-257",
+ "id": "operations/azure/append-block-to-block-blob",
"profile": "azure",
"lane": "core",
- "purpose": "Report a tag value of 257 characters, one more than a value may have, as an error. A client may refuse it",
+ "purpose": "Refuse an append to a block blob",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "k": "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
- }
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -39658,15 +39696,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "kvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -39674,35 +39712,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "value": "appendblock"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 409,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "TagsTooLarge"
+ "x-ms-error-code": "InvalidBlobType"
},
"body": {
"encoding": "utf8",
- "data": "TagsTooLargeFixture error"
+ "data": "InvalidBlobTypeFixture error"
}
}
}
@@ -39723,7 +39750,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 409
}
},
{
@@ -39731,67 +39758,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "TagsTooLarge"
+ "value": "InvalidBlobType"
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "TagsTooLarge"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/set-tags-special-characters",
+ "id": "operations/azure/append-block-at-wrong-position",
"profile": "azure",
"lane": "core",
- "purpose": "Set a blob index tag with a space and each of + - = . _ : /, which Azure allows, escaped as XML text",
+ "purpose": "Refuse an append whose position condition does not match the blob length",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "a b+c-d=e.f_g:h/i": "k l+m-n=o.p_q:r/s"
- }
+ "append_position": 0,
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -39811,15 +39796,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "a b+c-d=e.f_g:h/ik l+m-n=o.p_q:r/s"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -39827,32 +39812,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "appendblock"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-blob-condition-appendpos",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "equal",
+ "value": "0"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 412,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "AppendPositionConditionNotMet"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "AppendPositionConditionNotMetFixture error"
}
}
}
@@ -39865,26 +39850,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 412
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "AppendPositionConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tags-invalid-character",
+ "id": "operations/azure/append-block",
"profile": "azure",
"lane": "core",
- "purpose": "Report a blob index tag key with @, which Azure does not allow, as an error. A client may refuse it",
+ "purpose": "Append a block to an append blob and report its offset",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "a@b": "c"
- }
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -39904,15 +39903,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "a@bc"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -39920,35 +39919,26 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "value": "appendblock"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidTag"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidTagFixture error"
+ "encoding": "empty"
}
}
}
@@ -39961,92 +39951,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/append_offset",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 5
}
},
{
- "at": "/code",
+ "at": "/value/committed_block_count",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidTag"
+ "value": 2
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "InvalidTag"
- }
- }
- ]
- },
- {
- "id": "operations/azure/set-tags-duplicate-key",
- "profile": "azure",
- "lane": "core",
- "purpose": "Report blob index tags that name one key twice as an error. A client may refuse them, or report them unsupported where its API cannot repeat a key",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
- ],
- "call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": [
- {
- "key": "project",
- "value": "a"
- },
- {
- "key": "project",
- "value": "b"
- }
- ]
- },
- "exchanges": [
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/append-block-from-url",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Append the bytes at a URL to an append blob with Append Block From URL: a PUT with comp=appendblock, x-ms-copy-source and no body. Report the offset the block starts at",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
+ ],
+ "call": {
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block_from_url",
+ "source_key": "object-tests/copy/source.txt"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -40064,15 +40004,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "projectaprojectb"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -40080,35 +40020,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "appendblock"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidXmlDocument"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidXmlDocumentFixture error"
+ "encoding": "empty"
}
}
}
@@ -40121,85 +40068,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidXmlDocument"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
+ "at": "/value/append_offset",
"optional": false,
"rule": {
"is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
+ "value": 5
}
},
{
- "at": "/parameter",
+ "at": "/value/committed_block_count",
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "InvalidXmlDocument"
+ "value": 2
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure/set-tags-version",
+ "id": "operations/azure/append-block-from-url-range",
"profile": "azure",
"lane": "core",
- "purpose": "Set blob index tags on a previous version, named by versionid in the query",
+ "purpose": "Append bytes 1 to 3 at a URL with Append Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=1-3",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "tags": {
- "project": "object-tests"
- },
- "version": "2024-01-01T00:00:00.0000000Z"
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block_from_url",
+ "source_key": "object-tests/copy/source.txt",
+ "source_range": {
+ "end": 4,
+ "start": 1
+ }
},
"exchanges": [
{
@@ -40219,15 +40125,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "projectobject-tests"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -40235,37 +40141,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "appendblock"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/query/versionid",
+ "at": "/headers/x-ms-source-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.0000000Z"
+ "value": "bytes=1-3"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 201,
"headers": {
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -40283,25 +40199,39 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/append_offset",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/committed_block_count",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tags-snapshot",
+ "id": "operations/azure/append-block-from-url-other-account",
"profile": "azure",
"lane": "core",
- "purpose": "Set the blob index tags of a snapshot, named by snapshot in the query, which leaves the blob's tags alone",
+ "purpose": "Append a block with Append Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
],
"call": {
- "key": "object-tests/tags/object.txt",
- "op": "azure.set_tags",
- "snapshot": "2024-01-01T00:00:00.0000000Z",
- "tags": {
- "project": "object-tests"
- }
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -40321,15 +40251,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tags/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "projectobject-tests"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -40337,37 +40267,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "tags"
+ "value": "appendblock"
}
},
{
- "at": "/headers/content-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/xml; charset=UTF-8"
- ]
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/query/snapshot",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.0000000Z"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 201,
"headers": {
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -40385,23 +40317,37 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/append_offset",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/committed_block_count",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-with-tier",
+ "id": "operations/azure/create-append",
"profile": "azure",
"lane": "core",
- "purpose": "Write an object straight into the Cool access tier",
+ "purpose": "Create an empty append blob",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "body_base64": "Zmlyc3Q=",
- "key": "object-tests/tiers/object.txt",
- "op": "put",
- "tier": "Cool"
+ "key": "object-tests/append/object.log",
+ "op": "azure.create_append"
},
"exchanges": [
{
@@ -40421,7 +40367,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tiers/object.txt"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
@@ -40429,7 +40375,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Zmlyc3Q="
+ "value": ""
}
},
{
@@ -40437,15 +40383,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
- }
- },
- {
- "at": "/headers/x-ms-access-tier",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Cool"
+ "value": "AppendBlob"
}
}
],
@@ -40482,17 +40420,18 @@
"refusal": null
},
{
- "id": "operations/azure/set-tier-unknown",
+ "id": "operations/azure/put-leased-if-match-without-lease-id",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse an access tier the service does not have",
+ "purpose": "Refuse a write to a leased object whose If-Match holds but that names no lease ID",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
],
"call": {
- "key": "object-tests/tiers/object.txt",
- "op": "azure.set_tier",
- "tier": "Warm"
+ "body_base64": "c2Vjb25k",
+ "if_match": "\"fixture-etag\"",
+ "key": "object-tests/leases/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -40512,7 +40451,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tiers/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40520,40 +40459,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "c2Vjb25k"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "tier"
+ "value": "BlockBlob"
}
},
{
- "at": "/headers/x-ms-access-tier",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "Warm"
+ "value": "\"fixture-etag\""
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidHeaderValue"
+ "x-ms-error-code": "LeaseIdMissing"
},
"body": {
"encoding": "utf8",
- "data": "InvalidHeaderValueFixture error"
+ "data": "LeaseIdMissingFixture error"
}
}
}
@@ -40574,7 +40513,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 412
}
},
{
@@ -40582,24 +40521,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidHeaderValue"
+ "value": "LeaseIdMissing"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/set-tier-cool",
+ "id": "operations/azure/put-leased-with-lease-id",
"profile": "azure",
"lane": "core",
- "purpose": "Move an object to the Cool access tier",
+ "purpose": "Write to a leased object with its lease ID",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
],
"call": {
- "key": "object-tests/tiers/object.txt",
- "op": "azure.set_tier",
- "tier": "Cool"
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/leases/object.txt",
+ "lease_id": "11111111-2222-3333-4444-555555555555",
+ "op": "put"
},
"exchanges": [
{
@@ -40619,7 +40559,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tiers/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40627,34 +40567,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "c2Vjb25k"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "tier"
+ "value": "BlockBlob"
}
},
{
- "at": "/headers/x-ms-access-tier",
+ "at": "/headers/x-ms-lease-id",
"optional": false,
"rule": {
"is": "equal",
- "value": "Cool"
+ "value": "11111111-2222-3333-4444-555555555555"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -40677,17 +40620,17 @@
"refusal": null
},
{
- "id": "operations/azure/set-tier-rehydrate",
+ "id": "operations/azure/put-leased-without-lease-id",
"profile": "azure",
"lane": "core",
- "purpose": "Report a tier change that Azure accepts with 202, as it does when an archived blob starts to rehydrate, as a success",
+ "purpose": "Refuse a write to a leased object that names no lease ID",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
],
"call": {
- "key": "object-tests/tiers/object.txt",
- "op": "azure.set_tier",
- "tier": "Hot"
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/leases/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -40707,7 +40650,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/tiers/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40715,37 +40658,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "tier"
+ "value": "c2Vjb25k"
}
},
{
- "at": "/headers/x-ms-access-tier",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "Hot"
+ "value": "BlockBlob"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 412,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "LeaseIdMissing"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "LeaseIdMissingFixture error"
}
}
}
@@ -40758,26 +40696,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 412
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "LeaseIdMissing"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-internal-error",
+ "id": "operations/azure/lease-break",
"profile": "azure",
"lane": "core",
- "purpose": "Report a 500 InternalError answer as an error, after at most 5 retries",
+ "purpose": "Break a lease at once",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
],
- "origin": "transient",
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "action": "break",
+ "break_period": 0,
+ "key": "object-tests/leases/object.txt",
+ "op": "azure.lease"
},
"exchanges": [
{
@@ -40797,7 +40750,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40805,39 +40758,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "lease"
+ }
+ },
+ {
+ "at": "/headers/x-ms-lease-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "break"
+ }
+ },
+ {
+ "at": "/headers/x-ms-lease-break-period",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "0"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InternalError"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-time": "0"
},
"body": {
- "encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
+ "encoding": "empty"
}
}
}
]
- },
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/lease-release",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Release a lease",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ ],
+ "call": {
+ "action": "release",
+ "key": "object-tests/leases/object.txt",
+ "lease_id": "11111111-2222-3333-4444-555555555555",
+ "op": "azure.lease"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -40855,7 +40850,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40863,40 +40858,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "lease"
+ }
+ },
+ {
+ "at": "/headers/x-ms-lease-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "release"
+ }
+ },
+ {
+ "at": "/headers/x-ms-lease-id",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "11111111-2222-3333-4444-555555555555"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InternalError"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
+ "encoding": "empty"
}
}
}
- ],
- "optional": true
- },
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/lease-acquire-leased",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Refuse a second lease while another lease holds the object",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ ],
+ "call": {
+ "action": "acquire",
+ "duration": 15,
+ "key": "object-tests/leases/object.txt",
+ "op": "azure.lease",
+ "proposed_lease_id": "66666666-7777-8888-9999-000000000000"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -40914,7 +40950,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -40922,99 +40958,106 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "value": ""
}
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 500,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "InternalError"
},
- "body": {
- "encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
{
- "at": "/method",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "lease"
}
},
{
- "at": "/path",
+ "at": "/headers/x-ms-lease-action",
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "acquire"
}
},
{
- "at": "/body_base64",
+ "at": "/headers/x-ms-lease-duration",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": "15"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-proposed-lease-id",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "66666666-7777-8888-9999-000000000000"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 409,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InternalError"
+ "x-ms-error-code": "LeaseAlreadyPresent"
},
"body": {
"encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
+ "data": "LeaseAlreadyPresentFixture error"
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 409
+ }
},
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "LeaseAlreadyPresent"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/lease-acquire",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Acquire a lease on an object with a proposed lease ID",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/lease-blob"
+ ],
+ "call": {
+ "action": "acquire",
+ "duration": 15,
+ "key": "object-tests/leases/object.txt",
+ "op": "azure.lease",
+ "proposed_lease_id": "11111111-2222-3333-4444-555555555555"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -41032,7 +41075,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/leases/object.txt"
}
},
{
@@ -41040,98 +41083,60 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "value": ""
}
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 500,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "InternalError"
},
- "body": {
- "encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
- }
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
- {
- "request": [
{
- "at": "/method",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "lease"
}
},
{
- "at": "/path",
+ "at": "/headers/x-ms-lease-action",
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "acquire"
}
},
{
- "at": "/body_base64",
+ "at": "/headers/x-ms-lease-duration",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": "15"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-proposed-lease-id",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "11111111-2222-3333-4444-555555555555"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 500,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InternalError"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-id": "11111111-2222-3333-4444-555555555555"
},
"body": {
- "encoding": "utf8",
- "data": "InternalErrorThe server encountered an internal error. Please retry the request."
+ "encoding": "empty"
}
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -41140,41 +41145,35 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 500
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/lease_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "InternalError"
+ "value": "11111111-2222-3333-4444-555555555555"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-if-unmodified-since-past",
+ "id": "operations/azure/put-with-tags",
"profile": "azure",
"lane": "core",
- "purpose": "Refuse a write with 412 when the object changed after If-Unmodified-Since",
+ "purpose": "Write an object with tags",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "body_base64": "Zmlyc3Q=",
+ "key": "object-tests/tags/object.txt",
+ "op": "put",
+ "tags": {
+ "project": "object-tests"
+ }
},
"exchanges": [
{
@@ -41194,7 +41193,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41202,7 +41201,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": "Zmlyc3Q="
}
},
{
@@ -41214,30 +41213,28 @@
}
},
{
- "at": "/headers/if-unmodified-since",
+ "at": "/headers/x-ms-tags",
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "project=object-tests"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "encoding": "empty"
}
}
}
@@ -41250,41 +41247,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ConditionNotMet"
+ "value": "ok"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-content-encoding-gzip",
+ "id": "operations/azure/put-with-tags-special-characters",
"profile": "azure",
"lane": "core",
- "purpose": "Store Content-Encoding: gzip with a write, and the gzip bytes unchanged",
+ "purpose": "Write a blob with an index tag that holds a space and each of + - = . _ : /, percent-encoded in x-ms-tags",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "body_base64": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA",
- "content_encoding": "gzip",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "body_base64": "Zmlyc3Q=",
+ "key": "object-tests/tags/object.txt",
+ "op": "put",
+ "tags": {
+ "a b+c-d=e.f_g:h/i": "k l+m-n=o.p_q:r/s"
+ }
},
"exchanges": [
{
@@ -41304,7 +41287,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41312,7 +41295,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
+ "value": "Zmlyc3Q="
}
},
{
@@ -41324,37 +41307,75 @@
}
},
{
- "at": "/headers/x-ms-blob-content-encoding",
+ "at": "/headers/x-ms-tags",
"optional": false,
"rule": {
- "is": "equal",
- "value": "gzip"
+ "is": "one_of",
+ "values": [
+ "a%20b%2Bc-d%3De.f_g%3Ah%2Fi=k%20l%2Bm-n%3Do.p_q%3Ar%2Fs",
+ "a%20b%2Bc-d%3De.f_g:h/i=k%20l%2Bm-n%3Do.p_q:r/s"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 201,
"headers": {
- "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
"date": {
"from": "now"
},
- "etag": "\"fixture-b9991ef94e3d\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
- },
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/put-with-tags-duplicate-key",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Report a write whose x-ms-tags names one key twice as an error. A client may refuse it, or report it unsupported where its API cannot repeat a key",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ ],
+ "call": {
+ "body_base64": "Zmlyc3Q=",
+ "key": "object-tests/tags/object.txt",
+ "op": "put",
+ "tags": [
+ {
+ "key": "project",
+ "value": "a"
+ },
+ {
+ "key": "project",
+ "value": "b"
+ }
+ ]
+ },
+ "exchanges": [
+ {
+ "alternatives": [
{
"request": [
{
@@ -41370,7 +41391,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41378,7 +41399,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
+ "value": "Zmlyc3Q="
}
},
{
@@ -41390,34 +41411,28 @@
}
},
{
- "at": "/headers/content-encoding",
+ "at": "/headers/x-ms-tags",
"optional": false,
"rule": {
"is": "equal",
- "value": "gzip"
+ "value": "project=a&project=b"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
- "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ "x-ms-error-code": "DuplicateTagNames"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "DuplicateTagNamesFixture error"
}
}
}
@@ -41430,44 +41445,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": 400
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": "DuplicateTagNames"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "DuplicateTagNames"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure/put-content-properties",
+ "id": "operations/azure/get-tags",
"profile": "azure",
"lane": "core",
- "purpose": "Store Content-Type, Content-Language, Content-Disposition and Cache-Control with a write",
+ "purpose": "Read the tags of an object",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "cache_control": "max-age=3600",
- "content_disposition": "attachment; filename=\"report.txt\"",
- "content_language": "nl-NL",
- "content_type": "text/plain; charset=utf-8",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.get_tags"
},
"exchanges": [
{
@@ -41479,7 +41531,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -41487,7 +41539,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41495,73 +41547,74 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
}
- },
- {
- "at": "/headers/x-ms-blob-content-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain; charset=utf-8"
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
}
},
- {
- "at": "/headers/x-ms-blob-content-language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
- }
- },
- {
- "at": "/headers/x-ms-blob-content-disposition",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "attachment; filename=\"report.txt\""
- }
- },
- {
- "at": "/headers/x-ms-blob-cache-control",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "max-age=3600"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 201,
- "headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
- },
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "projectobject-tests"
}
}
- },
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/tags",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "project": "object-tests"
+ }
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/get-tags-none",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Report no blob index tags for a blob without any, which Azure answers with an empty TagSet",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
+ ],
+ "call": {
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.get_tags"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
{
"request": [
{
@@ -41569,7 +41622,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -41577,7 +41630,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41585,70 +41638,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain; charset=utf-8"
- }
- },
- {
- "at": "/headers/content-language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
- }
- },
- {
- "at": "/headers/x-ms-blob-content-disposition",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "attachment; filename=\"report.txt\""
+ "value": ""
}
},
{
- "at": "/headers/cache-control",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "max-age=3600"
+ "value": "tags"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": ""
}
}
}
@@ -41665,37 +41679,28 @@
}
},
{
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
- }
- },
- {
- "at": "/value/version",
+ "at": "/value/tags",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": {}
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-content-type-non-ascii",
+ "id": "operations/azure/get-tags-version",
"profile": "azure",
"lane": "core",
- "purpose": "Write a Content-Type with a parameter outside ASCII as its UTF-8 bytes. A flat account returns them as it got them, so they read back",
+ "purpose": "Get the blob index tags of a previous version, named by versionid in the query",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "content_type": "text/plain; name=\"été.txt\"",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.get_tags",
+ "version": "2024-01-01T00:00:00.0000000Z"
},
"exchanges": [
{
@@ -41707,7 +41712,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -41715,7 +41720,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41723,46 +41728,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-content-type",
+ "at": "/query/versionid",
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain; name=\"été.txt\""
+ "value": "2024-01-01T00:00:00.0000000Z"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "projectobject-tests"
}
}
}
@@ -41779,37 +41777,30 @@
}
},
{
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
- }
- },
- {
- "at": "/value/version",
+ "at": "/value/tags",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": {
+ "project": "object-tests"
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-content-disposition-non-ascii",
+ "id": "operations/azure/get-tags-snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "Write a Content-Disposition whose filename is outside ASCII. Azure refuses a disposition byte outside ASCII with 400 InvalidMetadata, so send an RFC 6266 filename*, which any reader decodes, or refuse the value",
+ "purpose": "Get the blob index tags of a snapshot, named by snapshot in the query, which keeps the tags the blob had",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob-tags"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "content_disposition": "attachment; filename=\"été.txt\"",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.get_tags",
+ "snapshot": "2024-01-01T00:00:00.0000000Z"
},
"exchanges": [
{
@@ -41821,7 +41812,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -41829,7 +41820,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
@@ -41837,46 +41828,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-content-disposition",
+ "at": "/query/snapshot",
"optional": false,
"rule": {
"is": "equal",
- "value": "attachment; filename*=UTF-8''%C3%A9t%C3%A9.txt"
+ "value": "2024-01-01T00:00:00.0000000Z"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "projectobject-tests"
}
}
}
@@ -41893,78 +41877,32 @@
}
},
{
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
- }
- },
- {
- "at": "/value/version",
+ "at": "/value/tags",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
+ "value": {
+ "project": "object-tests"
+ }
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "content_disposition"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "InvalidMetadata"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/put-content-type-edge-spaces",
+ "id": "operations/azure/set-tags",
"profile": "azure",
"lane": "core",
- "purpose": "Write a content type with spaces at either end, which HTTP drops, so the service stores it trimmed. A client may refuse it",
+ "purpose": "Replace the tags of an object",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "content_type": " text/plain ",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "project": "object-tests"
+ }
},
"exchanges": [
{
@@ -41984,57 +41922,93 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "is": "xml",
+ "value": "projectobject-tests"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-content-type",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "text/plain"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
- },
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure/set-tags-10-tags",
+ "profile": "azure",
+ "lane": "core",
+ "purpose": "Set 10 tags, the most an object takes",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
+ ],
+ "call": {
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "tag00": "value0",
+ "tag01": "value1",
+ "tag02": "value2",
+ "tag03": "value3",
+ "tag04": "value4",
+ "tag05": "value5",
+ "tag06": "value6",
+ "tag07": "value7",
+ "tag08": "value8",
+ "tag09": "value9"
+ }
+ },
+ "exchanges": [
+ {
+ "alternatives": [
{
"request": [
{
@@ -42050,54 +42024,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "is": "xml",
+ "value": "tag00value0tag01value1tag02value2tag03value3tag04value4tag05value5tag06value6tag07value7tag08value8tag09value9"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
}
},
{
"at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "text/plain"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-b9991ef94e3d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -42112,63 +42080,34 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.2084665Z"
- }
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "content_type"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/put-first-version",
+ "id": "operations/azure/set-tags-11-tags",
"profile": "azure",
"lane": "core",
- "purpose": "put first version",
+ "purpose": "Report 11 tags, one more than an object takes, as an error. A client may refuse them",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "djE=",
- "key": "object-tests/versions-mtydohr2/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "tag00": "value0",
+ "tag01": "value1",
+ "tag02": "value2",
+ "tag03": "value3",
+ "tag04": "value4",
+ "tag05": "value5",
+ "tag06": "value6",
+ "tag07": "value7",
+ "tag08": "value8",
+ "tag09": "value9",
+ "tag10": "value10"
+ }
},
"exchanges": [
{
@@ -42188,46 +42127,51 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "djE="
+ "is": "xml",
+ "value": "tag00value0tag01value1tag02value2tag03value3tag04value4tag05value5tag06value6tag07value7tag08value8tag09value9tag10value10"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
- "content-md5": "ZlTHNMyrj0QP8IJetEPcfw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-5769a0807b46\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2318906Z"
+ "x-ms-error-code": "TagsTooLarge"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "TagsTooLargeFixture error"
}
}
}
@@ -42240,41 +42184,83 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-5769a0807b46\""
+ "value": 400
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2318906Z"
+ "value": "TagsTooLarge"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "TagsTooLarge"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/put-if-match-current",
+ "id": "operations/azure/set-tags-key-128",
"profile": "azure",
"lane": "core",
- "purpose": "put if match current",
+ "purpose": "Set a tag whose key has 128 characters, the longest a key may be",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "cmVwbGFjZWQ=",
- "if_match": "\"fixture-b9991ef94e3d\"",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk": "v"
+ }
},
"exchanges": [
{
@@ -42294,54 +42280,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "cmVwbGFjZWQ="
+ "is": "xml",
+ "value": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkv"
}
},
{
- "at": "/headers/if-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-b9991ef94e3d\""
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "kbskg1kEP+mEFuJZyb3xDQ==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-3e075954b24b\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.3814952Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -42356,39 +42336,24 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-3e075954b24b\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3814952Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-if-none-match-missing",
+ "id": "operations/azure/set-tags-key-129",
"profile": "azure",
"lane": "core",
- "purpose": "put if none match missing",
+ "purpose": "Report a tag key of 129 characters, one more than a key may have, as an error. A client may refuse it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "ZnJlc2g=",
- "if_none_match": "*",
- "key": "object-tests/write/fresh.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk": "v"
+ }
},
"exchanges": [
{
@@ -42408,54 +42373,51 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/fresh.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "ZnJlc2g="
+ "is": "xml",
+ "value": "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkv"
}
},
{
- "at": "/headers/if-none-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "*"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
- "content-md5": "dgEIWMg2LXMC71+UNqpmOQ==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-0445b9b5a1dd\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2457093Z"
+ "x-ms-error-code": "TagsTooLarge"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "TagsTooLargeFixture error"
}
}
}
@@ -42468,40 +42430,83 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-0445b9b5a1dd\""
+ "value": 400
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.2457093Z"
+ "value": "TagsTooLarge"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "TagsTooLarge"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/put-key-1024",
+ "id": "operations/azure/set-tags-value-256",
"profile": "azure",
"lane": "core",
- "purpose": "put key 1024",
+ "purpose": "Set a tag whose value has 256 characters, the longest a value may be",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "k": "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
+ }
},
"exchanges": [
{
@@ -42521,46 +42526,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MQ=="
+ "is": "xml",
+ "value": "kvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-cf057aba568d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.8738118Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -42575,38 +42582,24 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-cf057aba568d\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.8738118Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-key-1025",
+ "id": "operations/azure/set-tags-value-257",
"profile": "azure",
"lane": "core",
- "purpose": "put key 1025",
+ "purpose": "Report a tag value of 257 characters, one more than a value may have, as an error. A client may refuse it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "k": "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
+ }
},
"exchanges": [
{
@@ -42626,29 +42619,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MQ=="
+ "is": "xml",
+ "value": "kvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 400,
@@ -42657,11 +42659,11 @@
"date": {
"from": "now"
},
- "x-ms-error-code": "OutOfRangeInput"
+ "x-ms-error-code": "TagsTooLarge"
},
"body": {
"encoding": "utf8",
- "data": "OutOfRangeInputFixture error"
+ "data": "TagsTooLargeFixture error"
}
}
}
@@ -42690,7 +42692,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "OutOfRangeInput"
+ "value": "TagsTooLarge"
}
}
],
@@ -42716,12 +42718,12 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "key"
+ "value": "tags"
}
},
{
"at": "/status",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
"value": 400
@@ -42729,26 +42731,28 @@
},
{
"at": "/code",
- "optional": false,
+ "optional": true,
"rule": {
"is": "equal",
- "value": "OutOfRangeInput"
+ "value": "TagsTooLarge"
}
}
]
},
{
- "id": "operations/azure/put-key-under-object",
+ "id": "operations/azure/set-tags-special-characters",
"profile": "azure",
"lane": "core",
- "purpose": "put key under object",
+ "purpose": "Set a blob index tag with a space and each of + - = . _ : /, which Azure allows, escaped as XML text",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/order/a/b",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "a b+c-d=e.f_g:h/i": "k l+m-n=o.p_q:r/s"
+ }
},
"exchanges": [
{
@@ -42768,46 +42772,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/order/a/b"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MQ=="
+ "is": "xml",
+ "value": "a b+c-d=e.f_g:h/ik l+m-n=o.p_q:r/s"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-17ced520f182\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.2584945Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -42822,39 +42828,24 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-17ced520f182\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.2584945Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-lost-the-race-to-create",
+ "id": "operations/azure/set-tags-invalid-character",
"profile": "azure",
"lane": "core",
- "purpose": "put lost the race to create",
+ "purpose": "Report a blob index tag key with @, which Azure does not allow, as an error. A client may refuse it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "YW5vdGhlciBvYmplY3Q=",
- "if_none_match": "*",
- "key": "object-tests/write/object.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "a@b": "c"
+ }
},
"exchanges": [
{
@@ -42874,50 +42865,51 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "YW5vdGhlciBvYmplY3Q="
+ "is": "xml",
+ "value": "a@bc"
}
},
{
- "at": "/headers/if-none-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "*"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobAlreadyExists"
+ "x-ms-error-code": "InvalidTag"
},
"body": {
"encoding": "utf8",
- "data": "BlobAlreadyExistsFixture error"
+ "data": "InvalidTagFixture error"
}
}
}
@@ -42938,7 +42930,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 400
}
},
{
@@ -42946,28 +42938,74 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobAlreadyExists"
+ "value": "InvalidTag"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidTag"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/put-md5-mismatch",
+ "id": "operations/azure/set-tags-duplicate-key",
"profile": "azure",
"lane": "core",
- "purpose": "put md5 mismatch",
+ "purpose": "Report blob index tags that name one key twice as an error. A client may refuse them, or report them unsupported where its API cannot repeat a key",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "ZGVjbGFyZWQtYm9keQ==",
- "checksum": {
- "algorithm": "md5",
- "value_base64": "eV8yArF8trw9S3cdjGyerw=="
- },
- "key": "object-tests/hashes/md5-mismatch.txt",
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": [
+ {
+ "key": "project",
+ "value": "a"
+ },
+ {
+ "key": "project",
+ "value": "b"
+ }
+ ]
},
"exchanges": [
{
@@ -42987,37 +43025,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/md5-mismatch.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "ZGVjbGFyZWQtYm9keQ=="
+ "is": "xml",
+ "value": "projectaprojectb"
}
},
{
- "at": "/headers/content-md5",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "eV8yArF8trw9S3cdjGyerw=="
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 400,
@@ -43026,11 +43065,11 @@
"date": {
"from": "now"
},
- "x-ms-error-code": "Md5Mismatch"
+ "x-ms-error-code": "InvalidXmlDocument"
},
"body": {
"encoding": "utf8",
- "data": "Md5MismatchFixture error"
+ "data": "InvalidXmlDocumentFixture error"
}
}
}
@@ -43059,27 +43098,69 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Md5Mismatch"
+ "value": "InvalidXmlDocument"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "tags"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidXmlDocument"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure/put-metadata-empty-value",
+ "id": "operations/azure/set-tags-version",
"profile": "azure",
"lane": "core",
- "purpose": "put metadata empty value",
+ "purpose": "Set blob index tags on a previous version, named by versionid in the query",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/metadata/empty-value.txt",
- "metadata": {
- "empty": ""
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "tags": {
+ "project": "object-tests"
},
- "op": "put"
+ "version": "2024-01-01T00:00:00.0000000Z"
},
"exchanges": [
{
@@ -43099,54 +43180,56 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/empty-value.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MQ=="
+ "is": "xml",
+ "value": "projectobject-tests"
}
},
{
- "at": "/headers/x-ms-meta-empty",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
+ }
+ },
+ {
+ "at": "/query/versionid",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "2024-01-01T00:00:00.0000000Z"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 204,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-333d95b64818\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.9480929Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -43161,41 +43244,25 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-333d95b64818\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.9480929Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-metadata-invalid-name",
+ "id": "operations/azure/set-tags-snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "put metadata invalid name",
+ "purpose": "Set the blob index tags of a snapshot, named by snapshot in the query, which leaves the blob's tags alone",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tags"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/metadata/invalid-name.txt",
- "metadata": {
- "not-valid": "1"
- },
- "op": "put"
+ "key": "object-tests/tags/object.txt",
+ "op": "azure.set_tags",
+ "snapshot": "2024-01-01T00:00:00.0000000Z",
+ "tags": {
+ "project": "object-tests"
+ }
},
"exchanges": [
{
@@ -43215,50 +43282,56 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/invalid-name.txt"
+ "value": "/fixture/object-tests/tags/object.txt"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "MQ=="
+ "is": "xml",
+ "value": "projectobject-tests"
}
},
{
- "at": "/headers/x-ms-meta-not-valid",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "1"
+ "value": "tags"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/xml; charset=UTF-8"
+ ]
+ }
+ },
+ {
+ "at": "/query/snapshot",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "2024-01-01T00:00:00.0000000Z"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 204,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "InvalidMetadata"
+ }
},
"body": {
- "encoding": "utf8",
- "data": "InvalidMetadataFixture error"
+ "encoding": "empty"
}
}
}
@@ -43271,81 +43344,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidMetadata"
+ "value": "ok"
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "metadata"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "InvalidMetadata"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/azure/put-metadata-replaced",
+ "id": "operations/azure/put-with-tier",
"profile": "azure",
"lane": "core",
- "purpose": "put metadata replaced",
+ "purpose": "Write an object straight into the Cool access tier",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "body_base64": "Mg==",
- "key": "object-tests/metadata/replaced.txt",
- "op": "put"
+ "body_base64": "Zmlyc3Q=",
+ "key": "object-tests/tiers/object.txt",
+ "op": "put",
+ "tier": "Cool"
},
"exchanges": [
{
@@ -43365,7 +43382,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/replaced.txt"
+ "value": "/fixture/object-tests/tiers/object.txt"
}
},
{
@@ -43373,7 +43390,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Mg=="
+ "value": "Zmlyc3Q="
}
},
{
@@ -43383,28 +43400,30 @@
"is": "equal",
"value": "BlockBlob"
}
+ },
+ {
+ "at": "/headers/x-ms-access-tier",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Cool"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 201,
"headers": {
- "content-md5": "yB5yjZ1ML2NvBn+JzBSGLA==",
"date": {
"from": "now"
},
- "etag": "\"fixture-37b036d8c13f\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7487600Z"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -43419,42 +43438,22 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-37b036d8c13f\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7487600Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-metadata",
+ "id": "operations/azure/set-tier-unknown",
"profile": "azure",
"lane": "core",
- "purpose": "put metadata",
+ "purpose": "Refuse an access tier the service does not have",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/metadata/object.txt",
- "metadata": {
- "name": "value",
- "second": "2"
- },
- "op": "put"
+ "key": "object-tests/tiers/object.txt",
+ "op": "azure.set_tier",
+ "tier": "Warm"
},
"exchanges": [
{
@@ -43474,7 +43473,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/object.txt"
+ "value": "/fixture/object-tests/tiers/object.txt"
}
},
{
@@ -43482,54 +43481,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
- }
- },
- {
- "at": "/headers/x-ms-meta-name",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "value"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-meta-second",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "tier"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "Warm"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-9abbc5e374ca\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -43542,43 +43527,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-9abbc5e374ca\""
+ "value": 400
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7035036Z"
+ "value": "InvalidHeaderValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-metadata-identifier-name",
+ "id": "operations/azure/set-tier-cool",
"profile": "azure",
"lane": "core",
- "purpose": "An Azure metadata name must be a C# identifier, which may start with an underscore and hold digits. Send _a1; only a name that is no identifier may be refused.",
+ "purpose": "Move an object to the Cool access tier",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
],
"call": {
- "body_base64": "MQ==",
- "key": "object-tests/metadata/identifier-name.txt",
- "metadata": {
- "_a1": "1"
- },
- "op": "put"
+ "key": "object-tests/tiers/object.txt",
+ "op": "azure.set_tier",
+ "tier": "Cool"
},
"exchanges": [
{
@@ -43598,7 +43580,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/identifier-name.txt"
+ "value": "/fixture/object-tests/tiers/object.txt"
}
},
{
@@ -43606,46 +43588,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-meta-_a1",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "1"
+ "value": "tier"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-access-tier",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "Cool"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-9abbc5e374ca\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -43660,38 +43633,22 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-9abbc5e374ca\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7035036Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-over-snapshotted",
+ "id": "operations/azure/set-tier-rehydrate",
"profile": "azure",
"lane": "core",
- "purpose": "put over snapshotted",
+ "purpose": "Report a tier change that Azure accepts with 202, as it does when an archived blob starts to rehydrate, as a success",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-tier"
],
"call": {
- "body_base64": "dHdv",
- "key": "object-tests/snapshots/object.txt",
- "op": "put"
+ "key": "object-tests/tiers/object.txt",
+ "op": "azure.set_tier",
+ "tier": "Hot"
},
"exchanges": [
{
@@ -43711,7 +43668,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/snapshots/object.txt"
+ "value": "/fixture/object-tests/tiers/object.txt"
}
},
{
@@ -43719,38 +43676,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "dHdv"
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "tier"
+ }
+ },
+ {
+ "at": "/headers/x-ms-access-tier",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Hot"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
- "content-md5": "uKn3Fdu2T9XFbneDxoIKYQ==",
"date": {
"from": "now"
- },
- "etag": "\"fixture-937c89bb7b5c\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.6268993Z"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -43765,36 +43721,22 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-937c89bb7b5c\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.6268993Z"
- }
}
],
"refusal": null
},
{
- "id": "operations/azure/put-overwrite",
+ "id": "operations/azure/put-internal-error",
"profile": "azure",
"lane": "core",
- "purpose": "put overwrite",
+ "purpose": "Report a 500 InternalError answer as an error, after at most 5 retries",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "transient",
"call": {
- "body_base64": "b3ZlcndyaXR0ZW4=",
+ "body_base64": "MDEyMzQ1Njc4OQ==",
"key": "object-tests/write/object.txt",
"op": "put"
},
@@ -43824,7 +43766,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "b3ZlcndyaXR0ZW4="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -43841,70 +43783,22 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 500,
"headers": {
- "content-md5": "UJ/0v/8wp3EDqsNAaOpGxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-cf4724500964\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7758823Z"
+ "x-ms-error-code": "InternalError"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-cf4724500964\""
- }
},
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7758823Z"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-precondition-failed",
- "profile": "azure",
- "lane": "core",
- "purpose": "put precondition failed",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "YW5vdGhlciBvYmplY3Q=",
- "if_match": "\"fixture-088e5dc109cf\"",
- "key": "object-tests/write/object.txt",
- "op": "put"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -43930,15 +43824,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "YW5vdGhlciBvYmplY3Q="
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-088e5dc109cf\""
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -43955,69 +43841,23 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 500,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "x-ms-error-code": "InternalError"
},
"body": {
"encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
- }
+ ],
+ "optional": true
},
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ConditionNotMet"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-precondition-failed-code-in-body",
- "profile": "azure",
- "lane": "core",
- "purpose": "put precondition failed, with the error code only in the XML body",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
- ],
- "origin": "constructed",
- "call": {
- "body_base64": "YW5vdGhlciBvYmplY3Q=",
- "if_match": "\"fixture-088e5dc109cf\"",
- "key": "object-tests/write/object.txt",
- "op": "put"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -44043,15 +43883,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "YW5vdGhlciBvYmplY3Q="
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-088e5dc109cf\""
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -44068,64 +43900,23 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 500,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "InternalError"
},
"body": {
"encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
- }
+ ],
+ "optional": true
},
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ConditionNotMet"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-refused",
- "profile": "azure",
- "lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
- "key": "object.txt",
- "op": "put"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -44143,7 +43934,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44151,7 +43942,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bm90aGluZyBpcyBzdG9yZWQ="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -44168,65 +43959,23 @@
],
"allow_query": [],
"response": {
- "status": 403,
+ "status": 500,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "AuthorizationPermissionMismatch"
+ "x-ms-error-code": "InternalError"
},
"body": {
"encoding": "utf8",
- "data": "AuthorizationPermissionMismatchFixture error"
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 403
- }
+ ],
+ "optional": true
},
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "AuthorizationPermissionMismatch"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-second-version",
- "profile": "azure",
- "lane": "core",
- "purpose": "put second version",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "djI=",
- "key": "object-tests/versions-mtydohr2/object.txt",
- "op": "put"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -44244,7 +43993,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44252,7 +44001,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "djI="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -44269,69 +44018,23 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 500,
"headers": {
- "content-md5": "GyZ2GcSBLMRu4oF0eITKUA==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-4768de772705\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.3326281Z"
+ "x-ms-error-code": "InternalError"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-4768de772705\""
- }
+ ],
+ "optional": true
},
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.3326281Z"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/put-unauthenticated",
- "profile": "azure",
- "lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
- "key": "object-tests/write/object.txt",
- "op": "put"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -44357,7 +44060,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bm90aGluZyBpcyBzdG9yZWQ="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
@@ -44374,21 +44077,22 @@
],
"allow_query": [],
"response": {
- "status": 401,
+ "status": 500,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidAuthenticationInfo"
+ "x-ms-error-code": "InternalError"
},
"body": {
"encoding": "utf8",
- "data": "InvalidAuthenticationInfoFixture error"
+ "data": "InternalErrorThe server encountered an internal error. Please retry the request."
}
}
}
- ]
+ ],
+ "optional": true
}
],
"expect": [
@@ -44405,7 +44109,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 401
+ "value": 500
}
},
{
@@ -44413,27 +44117,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidAuthenticationInfo"
+ "value": "InternalError"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-with-crc64",
+ "id": "operations/azure/put-if-unmodified-since-past",
"profile": "azure",
"lane": "core",
- "purpose": "put with crc64",
+ "purpose": "Refuse a write with 412 when the object changed after If-Unmodified-Since",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "ZGVjbGFyZWQtYm9keQ==",
- "checksum": {
- "algorithm": "azure_crc64",
- "value_base64": "9XBvAwWoR9o="
- },
- "key": "object-tests/hashes/crc64.txt",
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "key": "object-tests/write/object.txt",
"op": "put"
},
"exchanges": [
@@ -44454,7 +44155,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/crc64.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44462,23 +44163,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ZGVjbGFyZWQtYm9keQ=="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/headers/x-ms-content-crc64",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "9XBvAwWoR9o="
+ "value": "BlockBlob"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/if-unmodified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
}
}
],
@@ -44487,21 +44188,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 412,
"headers": {
- "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-90cfcb93036b\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.1153123Z"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "ConditionNotMetFixture error"
}
}
}
@@ -44514,43 +44211,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-90cfcb93036b\""
+ "value": 412
}
},
{
- "at": "/value/version",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1153123Z"
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/put-with-md5",
+ "id": "operations/azure/put-content-encoding-gzip",
"profile": "azure",
"lane": "core",
- "purpose": "put with md5",
+ "purpose": "Store Content-Encoding: gzip with a write, and the gzip bytes unchanged",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "body_base64": "ZGVjbGFyZWQtYm9keQ==",
- "checksum": {
- "algorithm": "md5",
- "value_base64": "N6YZkbg+Lyfxtskwn8iRCg=="
- },
- "key": "object-tests/hashes/md5.txt",
+ "body_base64": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA",
+ "content_encoding": "gzip",
+ "key": "object-tests/write/object.txt",
"op": "put"
},
"exchanges": [
@@ -44571,7 +44265,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/md5.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44579,23 +44273,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ZGVjbGFyZWQtYm9keQ=="
+ "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
}
},
{
- "at": "/headers/content-md5",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ "value": "BlockBlob"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-blob-content-encoding",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "gzip"
}
}
],
@@ -44606,68 +44300,22 @@
"response": {
"status": 201,
"headers": {
- "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
"date": {
"from": "now"
},
- "etag": "\"fixture-494ad7275bf7\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true",
- "x-ms-version-id": "2024-01-01T00:00:00.7803759Z"
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
"encoding": "base64",
"data": ""
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-494ad7275bf7\""
- }
- },
- {
- "at": "/value/version",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2024-01-01T00:00:00.7803759Z"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/snapshot",
- "profile": "azure",
- "lane": "core",
- "purpose": "snapshot",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/snapshots/object.txt",
- "op": "azure.snapshot"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -44683,7 +44331,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/snapshots/object.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44691,15 +44339,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "H4sIAAAAAAACA0vOzy0oSi0uTk1RyM9TKCgtKsgvTuUCAAHVPIcWAAAA"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "snapshot"
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/content-encoding",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "gzip"
}
}
],
@@ -44710,15 +44366,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "CVsDGvNMZH4SPA4MSLswrA==",
"date": {
"from": "now"
},
- "etag": "\"fixture-e3698635ab53\"",
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "false",
- "x-ms-snapshot": "2024-01-01T00:00:00.7351568Z",
- "x-ms-version-id": "2024-01-01T00:00:00.8746441Z"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
"encoding": "base64",
@@ -44739,29 +44395,40 @@
}
},
{
- "at": "/value/snapshot",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.7351568Z"
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-empty",
+ "id": "operations/azure/put-content-properties",
"profile": "azure",
"lane": "core",
- "purpose": "stage empty",
+ "purpose": "Store Content-Type, Content-Language, Content-Disposition and Cache-Control with a write",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAz",
- "body_base64": "",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "cache_control": "max-age=3600",
+ "content_disposition": "attachment; filename=\"report.txt\"",
+ "content_language": "nl-NL",
+ "content_type": "text/plain; charset=utf-8",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -44781,7 +44448,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44789,23 +44456,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "BlockBlob"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAz"
+ "value": "text/plain; charset=utf-8"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl-NL"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
@@ -44814,17 +44505,111 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidHeaderValue"
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidHeaderValueFixture error"
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/write/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain; charset=utf-8"
+ }
+ },
+ {
+ "at": "/headers/content-language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl-NL"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/headers/cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -44837,41 +44622,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidHeaderValue"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-escaped-id",
+ "id": "operations/azure/put-content-type-non-ascii",
"profile": "azure",
"lane": "core",
- "purpose": "stage escaped id",
+ "purpose": "Write a Content-Type with a parameter outside ASCII as its UTF-8 bytes. A flat account returns them as it got them, so they read back",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "+/8=",
- "body_base64": "b25l",
- "key": "object-tests/multipart/escaped.bin",
- "op": "azure.stage_block"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "content_type": "text/plain; name=\"été.txt\"",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -44891,7 +44676,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/escaped.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -44899,23 +44684,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "b25l"
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "BlockBlob"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "+/8="
+ "value": "text/plain; name=\"été.txt\""
}
}
],
@@ -44926,12 +44711,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-b9991ef94e3d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
"encoding": "base64",
@@ -44953,31 +44741,36 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-b9991ef94e3d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-id-too-long",
+ "id": "operations/azure/put-content-disposition-non-ascii",
"profile": "azure",
"lane": "core",
- "purpose": "stage id too long",
+ "purpose": "Write a Content-Disposition whose filename is outside ASCII. Azure refuses a disposition byte outside ASCII with 400 InvalidMetadata, so send an RFC 6266 filename*, which any reader decodes, or refuse the value",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg=",
- "body_base64": "dGhpcmQ=",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "content_disposition": "attachment; filename=\"été.txt\"",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -44997,7 +44790,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -45005,23 +44798,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "dGhpcmQ="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "BlockBlob"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-content-disposition",
"optional": false,
"rule": {
"is": "equal",
- "value": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg="
+ "value": "attachment; filename*=UTF-8''%C3%A9t%C3%A9.txt"
}
}
],
@@ -45030,17 +44823,21 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "OutOfRangeInput"
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "OutOfRangeInputBlock ID exceeds 64 decoded bytes."
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -45053,23 +44850,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "OutOfRangeInput"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
@@ -45095,7 +44892,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "block_id_base64"
+ "value": "content_disposition"
}
},
{
@@ -45111,24 +44908,24 @@
"optional": true,
"rule": {
"is": "equal",
- "value": "OutOfRangeInput"
+ "value": "InvalidMetadata"
}
}
]
},
{
- "id": "operations/azure/stage-mixed-length-id",
+ "id": "operations/azure/put-content-type-edge-spaces",
"profile": "azure",
"lane": "core",
- "purpose": "stage mixed length id",
+ "purpose": "Write a content type with spaces at either end, which HTTP drops, so the service stores it trimmed. A client may refuse it",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy",
- "body_base64": "dGhpcmQ=",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "content_type": " text/plain ",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -45148,7 +44945,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -45156,23 +44953,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "dGhpcmQ="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "BlockBlob"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy"
+ "value": "text/plain"
}
}
],
@@ -45181,71 +44978,24 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidBlobOrBlock"
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidBlobOrBlockFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidBlobOrBlock"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure/stage-mixed-length-id-code-in-body",
- "profile": "azure",
- "lane": "core",
- "purpose": "stage mixed length id, with the error code only in the XML body",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
- ],
- "origin": "constructed",
- "call": {
- "block_id_base64": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy",
- "body_base64": "dGhpcmQ=",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -45261,7 +45011,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -45269,23 +45019,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "dGhpcmQ="
+ "value": "MDEyMzQ1Njc4OQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "BlockBlob"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/content-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy"
+ "value": "text/plain"
}
}
],
@@ -45294,16 +45044,21 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-b9991ef94e3d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2084665Z"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidBlobOrBlockFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -45316,41 +45071,65 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidBlobOrBlock"
+ "value": "2024-01-01T00:00:00.2084665Z"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "content_type"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/stage-unauthenticated",
+ "id": "operations/azure/put-first-version",
"profile": "azure",
"lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
+ "purpose": "put first version",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAx",
- "body_base64": "Zmlyc3Q=",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "djE=",
+ "key": "object-tests/versions-mtydohr2/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -45370,7 +45149,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
}
},
{
@@ -45378,23 +45157,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Zmlyc3Q="
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "block"
+ "value": "djE="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAx"
+ "value": "BlockBlob"
}
}
],
@@ -45403,17 +45174,21 @@
],
"allow_query": [],
"response": {
- "status": 401,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "ZlTHNMyrj0QP8IJetEPcfw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidAuthenticationInfo"
+ "etag": "\"fixture-5769a0807b46\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2318906Z"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidAuthenticationInfoFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -45426,41 +45201,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 401
+ "value": "\"fixture-5769a0807b46\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidAuthenticationInfo"
+ "value": "2024-01-01T00:00:00.2318906Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage",
+ "id": "operations/azure/put-if-match-current",
"profile": "azure",
"lane": "core",
- "purpose": "stage",
+ "purpose": "put if match current",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "cmVwbGFjZWQ=",
+ "if_match": "\"fixture-b9991ef94e3d\"",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -45480,7 +45255,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -45488,23 +45263,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "cmVwbGFjZWQ="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "\"fixture-b9991ef94e3d\""
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -45515,12 +45290,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "kbskg1kEP+mEFuJZyb3xDQ==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-3e075954b24b\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.3814952Z"
},
"body": {
"encoding": "base64",
@@ -45542,31 +45320,36 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-3e075954b24b\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.3814952Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-id-64-bytes",
+ "id": "operations/azure/put-if-none-match-missing",
"profile": "azure",
"lane": "core",
- "purpose": "A block ID decodes to at most 64 bytes, and Azure stages a block whose ID decodes to exactly 64. Send it; only a longer ID may be refused.",
+ "purpose": "put if none match missing",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block"
+ "body_base64": "ZnJlc2g=",
+ "if_none_match": "*",
+ "key": "object-tests/write/fresh.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -45586,7 +45369,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/write/fresh.txt"
}
},
{
@@ -45594,23 +45377,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "ZnJlc2g="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "*"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=="
+ "value": "BlockBlob"
}
}
],
@@ -45621,12 +45404,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "dgEIWMg2LXMC71+UNqpmOQ==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-0445b9b5a1dd\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2457093Z"
},
"body": {
"encoding": "base64",
@@ -45648,31 +45434,35 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-0445b9b5a1dd\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2457093Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-question",
+ "id": "operations/azure/put-key-1024",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"question?mark.txt\"",
+ "purpose": "put key 1024",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/question?mark.txt",
- "op": "azure.stage_block"
+ "body_base64": "MQ==",
+ "key": "object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
+ "op": "put"
},
"exchanges": [
{
@@ -45692,7 +45482,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
+ "value": "/fixture/object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
}
},
{
@@ -45700,23 +45490,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "block"
+ "value": "MQ=="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -45727,12 +45509,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-cf057aba568d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.8738118Z"
},
"body": {
"encoding": "base64",
@@ -45754,31 +45539,35 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-cf057aba568d\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.8738118Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-hash",
+ "id": "operations/azure/put-key-1025",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"hash#tag.txt\"",
+ "purpose": "put key 1025",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/hash#tag.txt",
- "op": "azure.stage_block"
+ "body_base64": "MQ==",
+ "key": "object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk",
+ "op": "put"
},
"exchanges": [
{
@@ -45798,7 +45587,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
+ "value": "/fixture/object-tests/long/kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
}
},
{
@@ -45806,23 +45595,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "block"
+ "value": "MQ=="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -45831,18 +45612,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "OutOfRangeInput"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "OutOfRangeInputFixture error"
}
}
}
@@ -45855,36 +45635,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
- "optional": true,
+ "at": "/status",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "OutOfRangeInput"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "key"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "OutOfRangeInput"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/stage-key-percent",
+ "id": "operations/azure/put-key-under-object",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"percent%20.txt\"",
+ "purpose": "put key under object",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/percent%20.txt",
- "op": "azure.stage_block"
+ "body_base64": "MQ==",
+ "key": "object-tests/order/a/b",
+ "op": "put"
},
"exchanges": [
{
@@ -45904,7 +45729,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
+ "value": "/fixture/object-tests/order/a/b"
}
},
{
@@ -45912,23 +45737,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "block"
+ "value": "MQ=="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -45939,12 +45756,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-17ced520f182\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.2584945Z"
},
"body": {
"encoding": "base64",
@@ -45966,31 +45786,36 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-17ced520f182\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.2584945Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-plus",
+ "id": "operations/azure/put-lost-the-race-to-create",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"plus+plus.txt\"",
+ "purpose": "put lost the race to create",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/plus+plus.txt",
- "op": "azure.stage_block"
+ "body_base64": "YW5vdGhlciBvYmplY3Q=",
+ "if_none_match": "*",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -46010,7 +45835,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -46018,23 +45843,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "YW5vdGhlciBvYmplY3Q="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "*"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -46043,18 +45868,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 409,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "BlobAlreadyExists"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "BlobAlreadyExistsFixture error"
}
}
}
@@ -46067,36 +45891,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
- "optional": true,
+ "at": "/status",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": 409
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobAlreadyExists"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-space",
+ "id": "operations/azure/put-md5-mismatch",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"space name.txt\"",
+ "purpose": "put md5 mismatch",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/space name.txt",
- "op": "azure.stage_block"
+ "body_base64": "ZGVjbGFyZWQtYm9keQ==",
+ "checksum": {
+ "algorithm": "md5",
+ "value_base64": "eV8yArF8trw9S3cdjGyerw=="
+ },
+ "key": "object-tests/hashes/md5-mismatch.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -46116,7 +45948,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture/object-tests/hashes/md5-mismatch.txt"
}
},
{
@@ -46124,23 +45956,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "ZGVjbGFyZWQtYm9keQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/content-md5",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "eV8yArF8trw9S3cdjGyerw=="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -46149,18 +45981,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "Md5Mismatch"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "Md5MismatchFixture error"
}
}
}
@@ -46173,36 +46004,43 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
- "optional": true,
+ "at": "/status",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Md5Mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-non-ascii",
+ "id": "operations/azure/put-metadata-empty-value",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"café/雪.txt\"",
+ "purpose": "put metadata empty value",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/café/雪.txt",
- "op": "azure.stage_block"
+ "body_base64": "MQ==",
+ "key": "object-tests/metadata/empty-value.txt",
+ "metadata": {
+ "empty": ""
+ },
+ "op": "put"
},
"exchanges": [
{
@@ -46222,7 +46060,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture/object-tests/metadata/empty-value.txt"
}
},
{
@@ -46230,23 +46068,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "MQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-meta-empty",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": ""
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -46257,12 +46095,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-333d95b64818\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.9480929Z"
},
"body": {
"encoding": "base64",
@@ -46284,31 +46125,38 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-333d95b64818\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.9480929Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-key-double-slash",
+ "id": "operations/azure/put-metadata-invalid-name",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"double//slash.txt\"",
+ "purpose": "put metadata invalid name",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/double//slash.txt",
- "op": "azure.stage_block"
+ "body_base64": "MQ==",
+ "key": "object-tests/metadata/invalid-name.txt",
+ "metadata": {
+ "not-valid": "1"
+ },
+ "op": "put"
},
"exchanges": [
{
@@ -46328,7 +46176,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture/object-tests/metadata/invalid-name.txt"
}
},
{
@@ -46336,23 +46184,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": "MQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-meta-not-valid",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "1"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -46361,18 +46209,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "InvalidMetadata"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InvalidMetadataFixture error"
}
}
}
@@ -46385,36 +46232,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
- "optional": true,
+ "at": "/status",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidMetadata"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidMetadata"
+ }
+ }
+ ]
},
{
- "id": "operations/azure/stage-key-trailing-slash",
+ "id": "operations/azure/put-metadata-replaced",
"profile": "azure",
"lane": "core",
- "purpose": "stage, with the key \"trailing-slash/\"",
+ "purpose": "put metadata replaced",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "body_base64": "c2Vjb25k",
- "key": "object-tests/keys/trailing-slash/",
- "op": "azure.stage_block"
+ "body_base64": "Mg==",
+ "key": "object-tests/metadata/replaced.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -46434,7 +46326,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
+ "value": "/fixture/object-tests/metadata/replaced.txt"
}
},
{
@@ -46442,23 +46334,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "block"
+ "value": "Mg=="
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "BlockBlob"
}
}
],
@@ -46469,12 +46353,15 @@
"response": {
"status": 201,
"headers": {
+ "content-md5": "yB5yjZ1ML2NvBn+JzBSGLA==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-37b036d8c13f\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7487600Z"
},
"body": {
"encoding": "base64",
@@ -46496,35 +46383,39 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-37b036d8c13f\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7487600Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/stage-from-url",
+ "id": "operations/azure/put-metadata",
"profile": "azure",
"lane": "core",
- "purpose": "Stage a block from bytes 0 to 2 at a URL with Put Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=0-2",
+ "purpose": "put metadata",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-from-url"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "block_id_base64": "MDAwMDAy",
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.stage_block_from_url",
- "source_key": "object-tests/copy/source.txt",
- "source_range": {
- "end": 3,
- "start": 0
- }
+ "body_base64": "MQ==",
+ "key": "object-tests/metadata/object.txt",
+ "metadata": {
+ "name": "value",
+ "second": "2"
+ },
+ "op": "put"
},
"exchanges": [
{
@@ -46544,7 +46435,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/metadata/object.txt"
}
},
{
@@ -46552,56 +46443,50 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-meta-name",
"optional": false,
"rule": {
"is": "equal",
- "value": "block"
+ "value": "value"
}
},
{
- "at": "/query/blockid",
+ "at": "/headers/x-ms-meta-second",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
- }
- },
- {
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "value": "2"
}
},
{
- "at": "/headers/x-ms-source-range",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=0-2"
+ "value": "BlockBlob"
}
}
],
"allow_headers": [
- "content-type",
- "x-ms-copy-source-authorization"
+ "content-type"
],
"allow_query": [],
"response": {
"status": 201,
"headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-9abbc5e374ca\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
},
"body": {
"encoding": "base64",
@@ -46623,30 +46508,38 @@
},
{
"at": "/value/etag",
- "optional": true,
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "\"fixture-9abbc5e374ca\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.7035036Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-absent",
+ "id": "operations/azure/put-metadata-identifier-name",
"profile": "azure",
"lane": "core",
- "purpose": "staged absent",
+ "purpose": "An Azure metadata name must be a C# identifier, which may start with an underscore and hold digits. Send _a1; only a name that is no identifier may be refused.",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/absent.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "MQ==",
+ "key": "object-tests/metadata/identifier-name.txt",
+ "metadata": {
+ "_a1": "1"
+ },
+ "op": "put"
},
"exchanges": [
{
@@ -46658,7 +46551,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -46666,7 +46559,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/absent.bin"
+ "value": "/fixture/object-tests/metadata/identifier-name.txt"
}
},
{
@@ -46674,40 +46567,46 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-meta-_a1",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "1"
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "etag": "\"fixture-9abbc5e374ca\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7035036Z"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -46720,43 +46619,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-9abbc5e374ca\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "2024-01-01T00:00:00.7035036Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-absent-code-in-body",
+ "id": "operations/azure/put-over-snapshotted",
"profile": "azure",
"lane": "core",
- "purpose": "staged absent, with the error code only in the XML body",
+ "purpose": "put over snapshotted",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
"call": {
- "key": "object-tests/multipart/absent.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "dHdv",
+ "key": "object-tests/snapshots/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -46768,7 +46664,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -46776,7 +46672,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/absent.bin"
+ "value": "/fixture/object-tests/snapshots/object.txt"
}
},
{
@@ -46784,39 +46680,38 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blocklist"
+ "value": "dHdv"
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "uKn3Fdu2T9XFbneDxoIKYQ==",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-937c89bb7b5c\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.6268993Z"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -46829,40 +46724,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-937c89bb7b5c\""
}
},
{
- "at": "/code",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "2024-01-01T00:00:00.6268993Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-after-commit",
+ "id": "operations/azure/put-overwrite",
"profile": "azure",
"lane": "core",
- "purpose": "staged after commit",
+ "purpose": "put overwrite",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/committed.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "b3ZlcndyaXR0ZW4=",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -46874,7 +46769,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -46882,7 +46777,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/committed.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -46890,44 +46785,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blocklist"
+ "value": "b3ZlcndyaXR0ZW4="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "UJ/0v/8wp3EDqsNAaOpGxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-be8efdb79010\"",
+ "etag": "\"fixture-cf4724500964\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7758823Z"
},
"body": {
- "encoding": "utf8",
- "data": "MDAwMDAx5MDAwMDAy6"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -46943,68 +46833,37 @@
}
},
{
- "at": "/value/committed/0/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAx"
- }
- },
- {
- "at": "/value/committed/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/committed/1/id_base64",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "\"fixture-cf4724500964\""
}
},
{
- "at": "/value/committed/1/size",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": 6
- }
- },
- {
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
+ "value": "2024-01-01T00:00:00.7758823Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-after-replacement",
+ "id": "operations/azure/put-precondition-failed",
"profile": "azure",
"lane": "core",
- "purpose": "staged after replacement",
+ "purpose": "put precondition failed",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/replaced.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "YW5vdGhlciBvYmplY3Q=",
+ "if_match": "\"fixture-088e5dc109cf\"",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47016,7 +46875,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47024,7 +46883,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/replaced.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -47032,44 +46891,43 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "YW5vdGhlciBvYmplY3Q="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "\"fixture-088e5dc109cf\""
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-2184b3e6c2c3\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "MDAwMDAx5"
- },
- "framing": "chunked"
+ "data": "ConditionNotMetFixture error"
+ }
}
}
]
@@ -47081,56 +46939,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/committed/0/id_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAx"
+ "value": 412
}
},
{
- "at": "/value/committed/0/size",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-after-whole-write",
+ "id": "operations/azure/put-precondition-failed-code-in-body",
"profile": "azure",
"lane": "core",
- "purpose": "staged after whole write",
+ "purpose": "put precondition failed, with the error code only in the XML body",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "constructed",
"call": {
- "key": "object-tests/multipart/whole.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "YW5vdGhlciBvYmplY3Q=",
+ "if_match": "\"fixture-088e5dc109cf\"",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47142,7 +46988,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47150,7 +46996,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/whole.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -47158,44 +47004,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "YW5vdGhlciBvYmplY3Q="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "\"fixture-088e5dc109cf\""
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-f439b54167cb\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
"encoding": "utf8",
- "data": ""
- },
- "framing": "chunked"
+ "data": "ConditionNotMetFixture error"
+ }
}
}
]
@@ -47207,40 +47051,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/committed",
+ "at": "/status",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 412
}
},
{
- "at": "/value/uncommitted",
+ "at": "/code",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-committed-empty",
+ "id": "operations/azure/put-refused",
"profile": "azure",
"lane": "core",
- "purpose": "staged committed empty",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/staged.bin",
- "kind": "committed",
- "op": "azure.list_blocks"
+ "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
+ "key": "object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47252,7 +47096,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47260,7 +47104,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object.txt"
}
},
{
@@ -47268,43 +47112,35 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blocklist"
+ "value": "bm90aGluZyBpcyBzdG9yZWQ="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "committed"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 403,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "AuthorizationPermissionMismatch"
},
"body": {
"encoding": "utf8",
- "data": ""
- },
- "framing": "chunked"
+ "data": "AuthorizationPermissionMismatchFixture error"
+ }
}
}
]
@@ -47316,40 +47152,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/committed",
+ "at": "/status",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": 403
}
},
{
- "at": "/value/uncommitted",
+ "at": "/code",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "AuthorizationPermissionMismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-committed-nothing",
+ "id": "operations/azure/put-second-version",
"profile": "azure",
"lane": "core",
- "purpose": "staged committed nothing",
+ "purpose": "put second version",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/empty.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "djI=",
+ "key": "object-tests/versions-mtydohr2/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47361,7 +47197,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47369,7 +47205,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/empty.bin"
+ "value": "/fixture/object-tests/versions-mtydohr2/object.txt"
}
},
{
@@ -47377,44 +47213,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blocklist"
+ "value": "djI="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "GyZ2GcSBLMRu4oF0eITKUA==",
"date": {
"from": "now"
},
- "etag": "\"fixture-265df060a55b\"",
+ "etag": "\"fixture-4768de772705\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.3326281Z"
},
"body": {
- "encoding": "utf8",
- "data": ""
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -47430,36 +47261,36 @@
}
},
{
- "at": "/value/committed",
+ "at": "/value/etag",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "\"fixture-4768de772705\""
}
},
{
- "at": "/value/uncommitted",
+ "at": "/value/version",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.3326281Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-escaped-id",
+ "id": "operations/azure/put-unauthenticated",
"profile": "azure",
"lane": "core",
- "purpose": "staged escaped id",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/escaped.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "bm90aGluZyBpcyBzdG9yZWQ=",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47471,7 +47302,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47479,7 +47310,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/escaped.bin"
+ "value": "/fixture/object-tests/write/object.txt"
}
},
{
@@ -47487,43 +47318,35 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blocklist"
+ "value": "bm90aGluZyBpcyBzdG9yZWQ="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 401,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "InvalidAuthenticationInfo"
},
"body": {
"encoding": "utf8",
- "data": "+/8=3"
- },
- "framing": "chunked"
+ "data": "InvalidAuthenticationInfoFixture error"
+ }
}
}
]
@@ -47535,56 +47358,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
+ "value": "error"
}
},
{
- "at": "/value/uncommitted/0/id_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "+/8="
+ "value": 401
}
},
{
- "at": "/value/uncommitted/0/size",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": 3
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "InvalidAuthenticationInfo"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-replacement",
+ "id": "operations/azure/put-with-crc64",
"profile": "azure",
"lane": "core",
- "purpose": "staged replacement",
+ "purpose": "put with crc64",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/pending.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "ZGVjbGFyZWQtYm9keQ==",
+ "checksum": {
+ "algorithm": "azure_crc64",
+ "value_base64": "9XBvAwWoR9o="
+ },
+ "key": "object-tests/hashes/crc64.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47596,7 +47407,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47604,7 +47415,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/pending.bin"
+ "value": "/fixture/object-tests/hashes/crc64.txt"
}
},
{
@@ -47612,44 +47423,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "ZGVjbGFyZWQtYm9keQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-content-crc64",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "9XBvAwWoR9o="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
"date": {
"from": "now"
},
- "etag": "\"fixture-9c5ca12bcfc9\"",
+ "etag": "\"fixture-90cfcb93036b\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.1153123Z"
},
"body": {
- "encoding": "utf8",
- "data": "MDAwMDAx5MDAwMDAy6MDAwMDAx5"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -47665,84 +47479,40 @@
}
},
{
- "at": "/value/committed/0/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAx"
- }
- },
- {
- "at": "/value/committed/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/committed/1/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAy"
- }
- },
- {
- "at": "/value/committed/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 6
- }
- },
- {
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/uncommitted/0/id_base64",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAx"
+ "value": "\"fixture-90cfcb93036b\""
}
},
{
- "at": "/value/uncommitted/0/size",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "2024-01-01T00:00:00.1153123Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-uncommitted-only",
+ "id": "operations/azure/put-with-md5",
"profile": "azure",
"lane": "core",
- "purpose": "staged uncommitted only",
+ "purpose": "put with md5",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/staged.bin",
- "kind": "all",
- "op": "azure.list_blocks"
+ "body_base64": "ZGVjbGFyZWQtYm9keQ==",
+ "checksum": {
+ "algorithm": "md5",
+ "value_base64": "N6YZkbg+Lyfxtskwn8iRCg=="
+ },
+ "key": "object-tests/hashes/md5.txt",
+ "op": "put"
},
"exchanges": [
{
@@ -47754,7 +47524,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47762,7 +47532,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/hashes/md5.txt"
}
},
{
@@ -47770,43 +47540,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "ZGVjbGFyZWQtYm9keQ=="
}
},
{
- "at": "/query/comp",
+ "at": "/headers/content-md5",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
}
},
{
- "at": "/query/blocklisttype",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "all"
+ "value": "BlockBlob"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
+ "content-md5": "N6YZkbg+Lyfxtskwn8iRCg==",
"date": {
"from": "now"
},
+ "etag": "\"fixture-494ad7275bf7\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-version-id": "2024-01-01T00:00:00.7803759Z"
},
"body": {
- "encoding": "utf8",
- "data": "MDAwMDAx5MDAwMDAy6"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -47822,68 +47596,35 @@
}
},
{
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/uncommitted/0/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAx"
- }
- },
- {
- "at": "/value/uncommitted/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/uncommitted/1/id_base64",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDAwMDAy"
+ "value": "\"fixture-494ad7275bf7\""
}
},
{
- "at": "/value/uncommitted/1/size",
+ "at": "/value/version",
"optional": false,
"rule": {
"is": "equal",
- "value": 6
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
+ "value": "2024-01-01T00:00:00.7803759Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure/staged-uncommitted",
+ "id": "operations/azure/snapshot",
"profile": "azure",
"lane": "core",
- "purpose": "staged uncommitted",
+ "purpose": "snapshot",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/multipart/staged.bin",
- "kind": "uncommitted",
- "op": "azure.list_blocks"
+ "key": "object-tests/snapshots/object.txt",
+ "op": "azure.snapshot"
},
"exchanges": [
{
@@ -47895,7 +47636,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -47903,7 +47644,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/snapshots/object.txt"
}
},
{
@@ -47919,35 +47660,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
- }
- },
- {
- "at": "/query/blocklisttype",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "uncommitted"
+ "value": "snapshot"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
+ "etag": "\"fixture-e3698635ab53\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "false",
+ "x-ms-snapshot": "2024-01-01T00:00:00.7351568Z",
+ "x-ms-version-id": "2024-01-01T00:00:00.8746441Z"
},
"body": {
- "encoding": "utf8",
- "data": "MDAwMDAx5MDAwMDAy6"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -47963,68 +47700,29 @@
}
},
{
- "at": "/value/committed",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- },
- {
- "at": "/value/uncommitted/0/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAx"
- }
- },
- {
- "at": "/value/uncommitted/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 5
- }
- },
- {
- "at": "/value/uncommitted/1/id_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDAwMDAy"
- }
- },
- {
- "at": "/value/uncommitted/1/size",
+ "at": "/value/snapshot",
"optional": false,
"rule": {
"is": "equal",
- "value": 6
- }
- },
- {
- "at": "/value/uncommitted",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
+ "value": "2024-01-01T00:00:00.7351568Z"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-container-missing",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-empty",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
+ "purpose": "stage empty",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [],
- "key": "object.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAz",
+ "body_base64": "",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48044,15 +47742,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": ""
+ "is": "equal",
+ "value": ""
}
},
{
@@ -48060,7 +47758,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAz"
}
}
],
@@ -48069,17 +47775,17 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ContainerNotFound"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
"encoding": "utf8",
- "data": "ContainerNotFoundFixture error"
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -48100,7 +47806,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 400
}
},
{
@@ -48108,38 +47814,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ContainerNotFound"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "container_not_found"
+ "value": "InvalidHeaderValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-declaring-md5",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-escaped-id",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit declaring md5",
+ "purpose": "stage escaped id",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "content_md5_base64": "N6YZkbg+Lyfxtskwn8iRCg==",
- "key": "object-tests/hashes/committed.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "+/8=",
+ "body_base64": "b25l",
+ "key": "object-tests/multipart/escaped.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48159,31 +47852,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/hashes/committed.bin"
+ "value": "/fixture/object-tests/multipart/escaped.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAx"
+ "is": "equal",
+ "value": "b25l"
}
},
{
- "at": "/headers/x-ms-blob-content-md5",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ "value": "block"
}
},
{
- "at": "/query/comp",
+ "at": "/query/blockid",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "+/8="
}
}
],
@@ -48197,7 +47890,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-9a581bc70e20\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -48222,14 +47914,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-9a581bc70e20\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -48243,26 +47927,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-duplicate-id",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-id-too-long",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit duplicate id",
+ "purpose": "stage id too long",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/duplicate.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg=",
+ "body_base64": "dGhpcmQ=",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48282,15 +47958,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/duplicate.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAx"
+ "is": "equal",
+ "value": "dGhpcmQ="
}
},
{
@@ -48298,7 +47974,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg="
}
}
],
@@ -48307,19 +47991,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-a8581b642c5f\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "OutOfRangeInput"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "OutOfRangeInputBlock ID exceeds 64 decoded bytes."
}
}
}
@@ -48332,48 +48014,82 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-a8581b642c5f\""
+ "value": 400
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "OutOfRangeInput"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "block_id_base64"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "OutOfRangeInput"
+ }
+ }
+ ]
},
{
- "id": "operations/azure-hns/commit-escaped-id",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-mixed-length-id",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit escaped id",
+ "purpose": "stage mixed length id",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "+/8=",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/escaped.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy",
+ "body_base64": "dGhpcmQ=",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48393,15 +48109,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/escaped.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "+/8="
+ "is": "equal",
+ "value": "dGhpcmQ="
}
},
{
@@ -48409,7 +48125,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy"
}
}
],
@@ -48418,19 +48142,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-77b5e2317b8a\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "InvalidBlobOrBlock"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InvalidBlobOrBlockFixture error"
}
}
}
@@ -48443,49 +48165,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-77b5e2317b8a\""
+ "value": 400
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "InvalidBlobOrBlock"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-lost-the-race-to-create",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-mixed-length-id-code-in-body",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit lost the race to create",
+ "purpose": "stage mixed length id, with the error code only in the XML body",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "constructed",
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "if_none_match": "*",
- "key": "object-tests/multipart/pending.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy",
+ "body_base64": "dGhpcmQ=",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48505,31 +48222,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/pending.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAx"
+ "is": "equal",
+ "value": "dGhpcmQ="
}
},
{
- "at": "/headers/if-none-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "*"
+ "value": "block"
}
},
{
- "at": "/query/comp",
+ "at": "/query/blockid",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "YS1tdWNoLWxvbmdlci1ibG9jay1pZGVudGlmaWVy"
}
}
],
@@ -48538,17 +48255,16 @@
],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "BlobAlreadyExists"
+ }
},
"body": {
"encoding": "utf8",
- "data": "BlobAlreadyExistsFixture error"
+ "data": "InvalidBlobOrBlockFixture error"
}
}
}
@@ -48569,7 +48285,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 400
}
},
{
@@ -48577,24 +48293,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobAlreadyExists"
+ "value": "InvalidBlobOrBlock"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-nothing",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-unauthenticated",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit nothing",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [],
- "key": "object-tests/multipart/empty.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAx",
+ "body_base64": "Zmlyc3Q=",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48614,15 +48331,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/empty.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": ""
+ "is": "equal",
+ "value": "Zmlyc3Q="
}
},
{
@@ -48630,7 +48347,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAx"
}
}
],
@@ -48639,19 +48364,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 401,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-072bed78cc6a\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "InvalidAuthenticationInfo"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InvalidAuthenticationInfoFixture error"
}
}
}
@@ -48664,48 +48387,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-072bed78cc6a\""
+ "value": 401
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "InvalidAuthenticationInfo"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-over-whole-object",
- "profile": "azure-hns",
+ "id": "operations/azure/stage",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit over whole object",
+ "purpose": "stage",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/over.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48725,15 +48441,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/over.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAx"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -48741,7 +48457,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -48755,7 +48479,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-7dc650e58291\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -48780,14 +48503,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-7dc650e58291\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -48801,23 +48516,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-precondition-failed",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-id-64-bytes",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit precondition failed",
+ "purpose": "A block ID decodes to at most 64 bytes, and Azure stages a block whose ID decodes to exactly 64. Send it; only a longer ID may be refused.",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "if_match": "\"fixture-088e5dc109cf\"",
- "key": "object-tests/multipart/pending.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48837,31 +48547,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/pending.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAx"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
- "at": "/headers/if-match",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-088e5dc109cf\""
+ "value": "block"
}
},
{
- "at": "/query/comp",
+ "at": "/query/blockid",
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=="
}
}
],
@@ -48870,17 +48580,18 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -48893,40 +48604,36 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/etag",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "ConditionNotMet"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-refused",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-question",
+ "profile": "azure",
"lane": "core",
- "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
+ "purpose": "stage, with the key \"question?mark.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [],
- "key": "object.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/question?mark.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -48946,15 +48653,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object.bin"
+ "value": "/fixture/object-tests/keys/question?mark.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": ""
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -48962,7 +48669,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -48971,17 +48686,18 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ContainerNotFound"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ContainerNotFoundFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -48994,49 +48710,36 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 404
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/etag",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "ContainerNotFound"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-reordered",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-hash",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit reordered",
+ "purpose": "stage, with the key \"hash#tag.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/reordered.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/hash#tag.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49056,15 +48759,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/reordered.bin"
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAyMDAwMDAx"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49072,7 +48775,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49086,7 +48797,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-446301cfeaef\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49111,14 +48821,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-446301cfeaef\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49132,22 +48834,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-replacement",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-percent",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit replacement",
+ "purpose": "stage, with the key \"percent%20.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/replaced.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/percent%20.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49167,15 +48865,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/replaced.bin"
+ "value": "/fixture/object-tests/keys/percent%20.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAx"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49183,7 +48881,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49197,7 +48903,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-9c5e55ff559c\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49222,14 +48927,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-9c5e55ff559c\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49243,26 +48940,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-unstaged-id",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-plus",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit unstaged id",
+ "purpose": "stage, with the key \"plus+plus.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDA5",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49282,15 +48971,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDA5"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49298,7 +48987,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49307,17 +49004,18 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidBlockList"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidBlockListFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -49330,52 +49028,36 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/etag",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "InvalidBlockList"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-unstaged-id-code-in-body",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-space",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit unstaged id, with the error code only in the XML body",
+ "purpose": "stage, with the key \"space name.txt\"",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDA5",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/staged.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/space name.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49395,15 +49077,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/staged.bin"
+ "value": "/fixture/object-tests/keys/space name.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDA5"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49411,7 +49093,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49420,16 +49110,18 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidBlockListFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -49442,49 +49134,36 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/etag",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "InvalidBlockList"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-non-ascii",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit",
+ "purpose": "stage, with the key \"café/雪.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/committed.bin",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49504,15 +49183,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/committed.bin"
+ "value": "/fixture/object-tests/keys/café/雪.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49520,7 +49199,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49534,7 +49221,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49559,14 +49245,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49580,26 +49258,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-question",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-double-slash",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"question?mark.txt\"",
+ "purpose": "stage, with the key \"double//slash.txt\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/question?mark.txt",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49619,15 +49289,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
+ "value": "/fixture/object-tests/keys/double//slash.txt"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49635,7 +49305,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49649,7 +49327,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49674,14 +49351,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49695,26 +49364,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-hash",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-key-trailing-slash",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"hash#tag.txt\"",
+ "purpose": "stage, with the key \"trailing-slash/\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/hash#tag.txt",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/keys/trailing-slash/",
+ "op": "azure.stage_block"
},
"exchanges": [
{
@@ -49734,15 +49395,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
+ "value": "/fixture/object-tests/keys/trailing-slash/"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": "c2Vjb25k"
}
},
{
@@ -49750,7 +49411,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
}
}
],
@@ -49764,7 +49433,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49789,14 +49457,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49810,26 +49470,22 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-percent",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-from-url",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"percent%20.txt\"",
+ "purpose": "Stage a block from bytes 0 to 2 at a URL with Put Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=0-2",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-from-url"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/percent%20.txt",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block_from_url",
+ "source_key": "object-tests/copy/source.txt",
+ "source_range": {
+ "end": 3,
+ "start": 0
+ }
},
"exchanges": [
{
@@ -49849,15 +49505,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -49865,7 +49521,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-2"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
@@ -49879,7 +49567,6 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -49904,14 +49591,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -49925,26 +49604,23 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-plus",
- "profile": "azure-hns",
+ "id": "operations/azure/stage-from-url-other-account",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"plus+plus.txt\"",
+ "purpose": "Stage a block with Put Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-from-url"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/plus+plus.txt",
- "op": "azure.commit_blocks"
+ "block_id_base64": "MDAwMDAy",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt",
+ "source_range": {
+ "end": 3,
+ "start": 0
+ }
},
"exchanges": [
{
@@ -49964,15 +49640,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -49980,21 +49656,52 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "blocklist"
+ "value": "block"
}
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-2"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
"status": 201,
"headers": {
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-request-server-encrypted": "true"
@@ -50019,14 +49726,6 @@
},
{
"at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
- }
- },
- {
- "at": "/value/version",
"optional": true,
"rule": {
"is": "one_of",
@@ -50040,26 +49739,17 @@
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-space",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-absent",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"space name.txt\"",
+ "purpose": "staged absent",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/space name.txt",
- "op": "azure.commit_blocks"
+ "key": "object-tests/multipart/absent.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50071,7 +49761,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50079,15 +49769,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture/object-tests/multipart/absent.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50097,26 +49787,30 @@
"is": "equal",
"value": "blocklist"
}
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -50129,52 +49823,43 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
+ "value": 404
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-non-ascii",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-absent-code-in-body",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"café/雪.txt\"",
+ "purpose": "staged absent, with the error code only in the XML body",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "constructed",
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/café/雪.txt",
- "op": "azure.commit_blocks"
+ "key": "object-tests/multipart/absent.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50186,7 +49871,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50194,15 +49879,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture/object-tests/multipart/absent.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50212,26 +49897,29 @@
"is": "equal",
"value": "blocklist"
}
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-8ec031f3abfa\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -50244,52 +49932,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
+ "value": 404
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-double-slash",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-after-commit",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"double//slash.txt\"",
+ "purpose": "staged after commit",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/double//slash.txt",
- "op": "azure.commit_blocks"
+ "key": "object-tests/multipart/committed.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50301,7 +49977,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50309,15 +49985,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture/object-tests/multipart/committed.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50327,27 +50003,34 @@
"is": "equal",
"value": "blocklist"
}
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
+ "etag": "\"fixture-be8efdb79010\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "MDAwMDAx5MDAwMDAy6"
+ },
+ "framing": "chunked"
}
}
]
@@ -50363,48 +50046,68 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/committed/0/id_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
+ "value": "MDAwMDAx"
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/value/committed/0/size",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/committed/1/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/value/committed/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-key-trailing-slash",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-after-replacement",
+ "profile": "azure",
"lane": "core",
- "purpose": "commit, with the key \"trailing-slash/\"",
+ "purpose": "staged after replacement",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/keys/trailing-slash/",
- "op": "azure.commit_blocks"
+ "key": "object-tests/multipart/replaced.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50416,7 +50119,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50424,15 +50127,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
+ "value": "/fixture/object-tests/multipart/replaced.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50442,25 +50145,34 @@
"is": "equal",
"value": "blocklist"
}
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidBlockList"
+ "etag": "\"fixture-2184b3e6c2c3\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "InvalidBlockListFixture error"
- }
+ "data": "MDAwMDAx5"
+ },
+ "framing": "chunked"
}
}
]
@@ -50472,53 +50184,56 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/committed/0/id_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "MDAwMDAx"
}
},
{
- "at": "/code",
+ "at": "/value/committed/0/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidBlockList"
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-content-properties",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-after-whole-write",
+ "profile": "azure",
"lane": "core",
- "purpose": "Commit a block list with content properties, sent as x-ms-blob-content-type, -language, -disposition and x-ms-blob-cache-control",
+ "purpose": "staged after whole write",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "cache_control": "max-age=3600",
- "content_disposition": "attachment; filename=\"report.txt\"",
- "content_language": "nl-NL",
- "content_type": "text/plain; charset=utf-8",
- "key": "object-tests/multipart/committed.bin",
- "op": "azure.commit_blocks"
+ "key": "object-tests/multipart/whole.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50530,7 +50245,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50538,15 +50253,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/committed.bin"
+ "value": "/fixture/object-tests/multipart/whole.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50558,57 +50273,32 @@
}
},
{
- "at": "/headers/x-ms-blob-content-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain; charset=utf-8"
- }
- },
- {
- "at": "/headers/x-ms-blob-content-language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
- }
- },
- {
- "at": "/headers/x-ms-blob-content-disposition",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "attachment; filename=\"report.txt\""
- }
- },
- {
- "at": "/headers/x-ms-blob-cache-control",
+ "at": "/query/blocklisttype",
"optional": false,
"rule": {
"is": "equal",
- "value": "max-age=3600"
+ "value": "all"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
+ "etag": "\"fixture-f439b54167cb\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": ""
+ },
+ "framing": "chunked"
}
}
]
@@ -50624,49 +50314,36 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/committed",
"optional": false,
"rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/value/uncommitted",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "array_length",
+ "value": 0
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/commit-with-tier",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-committed-empty",
+ "profile": "azure",
"lane": "core",
- "purpose": "Commit a block list into an access tier, named in x-ms-access-tier",
+ "purpose": "staged committed empty",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "blocks": [
- {
- "id_base64": "MDAwMDAx",
- "kind": "latest"
- },
- {
- "id_base64": "MDAwMDAy",
- "kind": "latest"
- }
- ],
- "key": "object-tests/multipart/committed.bin",
- "op": "azure.commit_blocks",
- "tier": "Cool"
+ "key": "object-tests/multipart/staged.bin",
+ "kind": "committed",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50678,7 +50355,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -50686,15 +50363,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/multipart/committed.bin"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/body_text",
+ "at": "/body_base64",
"optional": false,
"rule": {
- "is": "xml",
- "value": "MDAwMDAxMDAwMDAy"
+ "is": "equal",
+ "value": ""
}
},
{
@@ -50706,33 +50383,31 @@
}
},
{
- "at": "/headers/x-ms-access-tier",
+ "at": "/query/blocklisttype",
"optional": false,
"rule": {
"is": "equal",
- "value": "Cool"
+ "value": "committed"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-8ec031f3abfa\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": ""
+ },
+ "framing": "chunked"
}
}
]
@@ -50748,38 +50423,36 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/committed",
"optional": false,
"rule": {
- "is": "equal",
- "value": "\"fixture-8ec031f3abfa\""
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/value/uncommitted",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "array_length",
+ "value": 0
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-committed-nothing",
+ "profile": "azure",
"lane": "core",
- "purpose": "delete accepted",
+ "purpose": "staged committed nothing",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/remove/present.txt",
- "op": "delete"
+ "key": "object-tests/multipart/empty.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50791,7 +50464,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -50799,7 +50472,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/remove/present.txt"
+ "value": "/fixture/object-tests/multipart/empty.bin"
}
},
{
@@ -50809,23 +50482,42 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
+ "etag": "\"fixture-265df060a55b\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": ""
+ },
+ "framing": "chunked"
}
}
]
@@ -50839,21 +50531,38 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-question",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-escaped-id",
+ "profile": "azure",
"lane": "core",
- "purpose": "delete accepted, with the key \"question?mark.txt\"",
+ "purpose": "staged escaped id",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/question?mark.txt",
- "op": "delete"
+ "key": "object-tests/multipart/escaped.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50865,7 +50574,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -50873,7 +50582,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
+ "value": "/fixture/object-tests/multipart/escaped.bin"
}
},
{
@@ -50883,13 +50592,30 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
@@ -50897,9 +50623,10 @@
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "+/8=3"
+ },
+ "framing": "chunked"
}
}
]
@@ -50913,21 +50640,54 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "+/8="
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 3
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-hash",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-replacement",
+ "profile": "azure",
"lane": "core",
- "purpose": "delete accepted, with the key \"hash#tag.txt\"",
+ "purpose": "staged replacement",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/hash#tag.txt",
- "op": "delete"
+ "key": "object-tests/multipart/pending.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -50939,7 +50699,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -50947,7 +50707,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
+ "value": "/fixture/object-tests/multipart/pending.bin"
}
},
{
@@ -50957,23 +50717,42 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
+ "etag": "\"fixture-9c5ca12bcfc9\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "MDAwMDAx5MDAwMDAy6MDAwMDAx5"
+ },
+ "framing": "chunked"
}
}
]
@@ -50987,21 +50766,86 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/committed/0/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAx"
+ }
+ },
+ {
+ "at": "/value/committed/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/committed/1/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/value/committed/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAx"
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-percent",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-uncommitted-only",
+ "profile": "azure",
"lane": "core",
- "purpose": "delete accepted, with the key \"percent%20.txt\"",
+ "purpose": "staged uncommitted only",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/percent%20.txt",
- "op": "delete"
+ "key": "object-tests/multipart/staged.bin",
+ "kind": "all",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -51013,7 +50857,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -51021,7 +50865,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
@@ -51031,13 +50875,30 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "all"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
@@ -51045,9 +50906,10 @@
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "MDAwMDAx5MDAwMDAy6"
+ },
+ "framing": "chunked"
}
}
]
@@ -51061,21 +50923,70 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAx"
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/uncommitted/1/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/value/uncommitted/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-plus",
- "profile": "azure-hns",
+ "id": "operations/azure/staged-uncommitted",
+ "profile": "azure",
"lane": "core",
- "purpose": "delete accepted, with the key \"plus+plus.txt\"",
+ "purpose": "staged uncommitted",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/plus+plus.txt",
- "op": "delete"
+ "key": "object-tests/multipart/staged.bin",
+ "kind": "uncommitted",
+ "op": "azure.list_blocks"
},
"exchanges": [
{
@@ -51087,7 +50998,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -51095,7 +51006,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
@@ -51105,13 +51016,30 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/query/blocklisttype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "uncommitted"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 200,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
@@ -51119,9 +51047,10 @@
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": ""
- }
+ "encoding": "utf8",
+ "data": "MDAwMDAx5MDAwMDAy6"
+ },
+ "framing": "chunked"
}
}
]
@@ -51135,21 +51064,70 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/committed",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAx"
+ }
+ },
+ {
+ "at": "/value/uncommitted/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5
+ }
+ },
+ {
+ "at": "/value/uncommitted/1/id_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/value/uncommitted/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/uncommitted",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-space",
+ "id": "operations/azure-hns/commit-container-missing",
"profile": "azure-hns",
"lane": "core",
- "purpose": "delete accepted, with the key \"space name.txt\"",
+ "purpose": "commit container missing. A client reports it as container_not_found: the bucket or container is absent, not the object",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/space name.txt",
- "op": "delete"
+ "blocks": [],
+ "key": "object.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51161,7 +51139,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "PUT"
}
},
{
@@ -51169,32 +51147,42 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture/object.bin"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 404,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-error-code": "ContainerNotFound"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "ContainerNotFoundFixture error"
}
}
}
@@ -51207,25 +51195,56 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/delete-accepted-key-non-ascii",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "delete accepted, with the key \"café/雪.txt\"",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/keys/café/雪.txt",
- "op": "delete"
- },
- "exchanges": [
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ContainerNotFound"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container_not_found"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-declaring-md5",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit declaring md5",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
+ ],
+ "content_md5_base64": "N6YZkbg+Lyfxtskwn8iRCg==",
+ "key": "object-tests/hashes/committed.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -51235,7 +51254,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "PUT"
}
},
{
@@ -51243,28 +51262,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture/object-tests/hashes/committed.bin"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAx"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-md5",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "N6YZkbg+Lyfxtskwn8iRCg=="
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
"date": {
"from": "now"
},
+ "etag": "\"fixture-9a581bc70e20\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "base64",
@@ -51283,21 +51322,50 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-9a581bc70e20\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-double-slash",
+ "id": "operations/azure-hns/commit-duplicate-id",
"profile": "azure-hns",
"lane": "core",
- "purpose": "delete accepted, with the key \"double//slash.txt\"",
+ "purpose": "commit duplicate id",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/double//slash.txt",
- "op": "delete"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/duplicate.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51309,7 +51377,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "PUT"
}
},
{
@@ -51317,28 +51385,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture/object-tests/multipart/duplicate.bin"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAx"
+ }
+ },
+ {
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
"date": {
"from": "now"
},
+ "etag": "\"fixture-a8581b642c5f\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "base64",
@@ -51357,21 +51437,46 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-a8581b642c5f\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-accepted-key-trailing-slash",
+ "id": "operations/azure-hns/commit-escaped-id",
"profile": "azure-hns",
"lane": "core",
- "purpose": "delete accepted, with the key \"trailing-slash/\"",
+ "purpose": "commit escaped id",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/keys/trailing-slash/",
- "op": "delete"
+ "blocks": [
+ {
+ "id_base64": "+/8=",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/escaped.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51383,7 +51488,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "PUT"
}
},
{
@@ -51391,32 +51496,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
+ "value": "/fixture/object-tests/multipart/escaped.bin"
}
},
{
- "at": "/body_base64",
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "+/8="
+ }
+ },
+ {
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidUri"
+ "etag": "\"fixture-77b5e2317b8a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidUriFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -51429,43 +51546,49 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-77b5e2317b8a\""
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "InvalidUri"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many",
+ "id": "operations/azure-hns/commit-lost-the-race-to-create",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Delete several objects in one batch and report each result",
+ "purpose": "commit lost the race to create",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
],
- "op": "delete_many"
+ "if_none_match": "*",
+ "key": "object-tests/multipart/pending.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51477,7 +51600,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -51485,23 +51608,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/multipart/pending.bin"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAx"
}
},
{
- "at": "/query/restype",
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "*"
}
},
{
@@ -51509,46 +51632,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 409,
"headers": {
- "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "BlobAlreadyExists"
},
"body": {
"encoding": "utf8",
- "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture-0\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture-1\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture-2\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\nServer: Windows-Azure-Blob/1.0\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture--"
- },
- "framing": "chunked"
+ "data": "BlobAlreadyExistsFixture error"
+ }
}
}
]
@@ -51560,52 +51664,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/deleted",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt"
- ]
+ "value": 409
}
},
{
- "at": "/value/errors",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- {
- "code": "BlobNotFound",
- "key": "object-tests/batch/absent.txt",
- "status": 404
- }
- ]
+ "value": "BlobAlreadyExists"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-denied",
+ "id": "operations/azure-hns/commit-nothing",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report each deletion of a batch that Azure refuses inside its 202 answer, here every one with 403 AuthorizationPermissionMismatch, as that key's error, not as deleted",
+ "purpose": "commit nothing",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
- ],
- "op": "delete_many"
+ "blocks": [],
+ "key": "object-tests/multipart/empty.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51617,7 +51709,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -51625,23 +51717,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object-tests/multipart/empty.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": ""
}
},
{
@@ -51649,46 +51733,29 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
- "content-type": "multipart/mixed; boundary=batchresponse_fixture",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-072bed78cc6a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture--"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -51704,34 +51771,21 @@
}
},
{
- "at": "/value/deleted",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": []
+ "value": "\"fixture-072bed78cc6a\""
}
},
{
- "at": "/value/errors",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": [
- {
- "code": "AuthorizationPermissionMismatch",
- "key": "object-tests/batch/a.txt",
- "status": 403
- },
- {
- "code": "AuthorizationPermissionMismatch",
- "key": "object-tests/batch/b.txt",
- "status": 403
- },
- {
- "code": "AuthorizationPermissionMismatch",
- "key": "object-tests/batch/absent.txt",
- "status": 403
- }
+ "is": "one_of",
+ "values": [
+ null,
+ ""
]
}
}
@@ -51739,22 +51793,22 @@
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-answers-out-of-order",
+ "id": "operations/azure-hns/commit-over-whole-object",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Match each part of a batch answer to its deletion by Content-ID, which links them, not by position. Azure has answered every recorded batch in order, up to 256 parts; this answer is written by hand",
+ "purpose": "commit over whole object",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
- "derived_from": "operations/azure-hns/delete-many",
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
],
- "op": "delete_many"
+ "key": "object-tests/multipart/over.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51766,7 +51820,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -51774,23 +51828,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object-tests/multipart/over.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": "MDAwMDAx"
}
},
{
@@ -51798,46 +51844,29 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
- "content-type": "multipart/mixed; boundary=batchresponse_fixture",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-7dc650e58291\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture--"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
}
]
@@ -51853,27 +51882,21 @@
}
},
{
- "at": "/value/deleted",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt"
- ]
+ "value": "\"fixture-7dc650e58291\""
}
},
{
- "at": "/value/errors",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": [
- {
- "code": "BlobNotFound",
- "key": "object-tests/batch/absent.txt",
- "status": 404
- }
+ "is": "one_of",
+ "values": [
+ null,
+ ""
]
}
}
@@ -51881,22 +51904,23 @@
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-lf-line-endings",
+ "id": "operations/azure-hns/commit-precondition-failed",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Read a batch answer whose lines end in LF alone correctly, or report it as an error, but never half-read it. Azure has not been seen to send it: HTTP and multipart require CRLF. This answer is the recorded one with every CR removed",
+ "purpose": "commit precondition failed",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
- "derived_from": "operations/azure-hns/delete-many",
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
],
- "op": "delete_many"
+ "if_match": "\"fixture-088e5dc109cf\"",
+ "key": "object-tests/multipart/pending.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -51908,7 +51932,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -51916,23 +51940,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/multipart/pending.bin"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAx"
}
},
{
- "at": "/query/restype",
+ "at": "/headers/if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "\"fixture-088e5dc109cf\""
}
},
{
@@ -51940,46 +51964,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 412,
"headers": {
- "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 0\n\nHTTP/1.1 202 Accepted\nx-ms-request-id: fixture\nx-ms-delete-type-permanent: true\nx-ms-version: 2023-11-03\n\n--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 1\n\nHTTP/1.1 202 Accepted\nx-ms-request-id: fixture\nx-ms-delete-type-permanent: true\nx-ms-version: 2023-11-03\n\n--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 2\n\nHTTP/1.1 404 The specified blob does not exist.\nx-ms-request-id: fixture\nx-ms-error-code: BlobNotFound\nx-ms-version: 2023-11-03\nContent-Length: 110\nContent-Type: application/xml\n\nBlobNotFoundFixture error\n--batchresponse_fixture--"
- },
- "framing": "chunked"
+ "data": "ConditionNotMetFixture error"
+ }
}
}
]
@@ -51990,58 +51995,41 @@
"at": "/outcome",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "ok",
- "error"
- ]
+ "is": "equal",
+ "value": "error"
}
},
{
- "at": "/value/deleted",
- "optional": true,
+ "at": "/status",
+ "optional": false,
"rule": {
"is": "equal",
- "value": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt"
- ]
+ "value": 412
}
},
{
- "at": "/value/errors",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
"is": "equal",
- "value": [
- {
- "code": "BlobNotFound",
- "key": "object-tests/batch/absent.txt",
- "status": 404
- }
- ]
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-without-content-id",
+ "id": "operations/azure-hns/commit-refused",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a batch answer whose parts carry no Content-ID as an error. Without one, only the order of the parts would link a result to its key, and a guess could report one key deleted when another failed. Azure echoes the Content-ID of every subrequest; this answer is the recorded one with them removed",
+ "purpose": "Report the service authorization error for this operation; signature acceptance is tested separately.",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
- "derived_from": "operations/azure-hns/delete-many",
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
- ],
- "op": "delete_many"
+ "blocks": [],
+ "key": "object.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -52053,7 +52041,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52061,23 +52049,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": ""
}
},
{
@@ -52085,46 +52065,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 404,
"headers": {
- "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "ContainerNotFound"
},
"body": {
"encoding": "utf8",
- "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture--"
- },
- "framing": "chunked"
+ "data": "ContainerNotFoundFixture error"
+ }
}
}
]
@@ -52138,27 +52099,47 @@
"is": "equal",
"value": "error"
}
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ContainerNotFound"
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-server-busy",
+ "id": "operations/azure-hns/commit-reordered",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a batch that Azure answers as a whole with 503 ServerBusy as an error, never as deleted keys. A client may retry up to five times first",
+ "purpose": "commit reordered",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "transient",
- "derived_from": "operations/azure-hns/delete-many",
"call": {
- "keys": [
- "object-tests/batch/a.txt",
- "object-tests/batch/b.txt",
- "object-tests/batch/absent.txt"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
],
- "op": "delete_many"
+ "key": "object-tests/multipart/reordered.bin",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -52170,7 +52151,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52178,23 +52159,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object-tests/multipart/reordered.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": "MDAwMDAyMDAwMDAx"
}
},
{
@@ -52202,50 +52175,84 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "etag": "\"fixture-446301cfeaef\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-446301cfeaef\""
+ }
},
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-replacement",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit replacement",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/replaced.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -52255,7 +52262,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52263,23 +52270,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object-tests/multipart/replaced.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": "MDAwMDAx"
}
},
{
@@ -52287,51 +52286,88 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "etag": "\"fixture-9c5e55ff559c\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-9c5e55ff559c\""
+ }
},
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-unstaged-id",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit unstaged id",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDA5",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -52341,7 +52377,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52349,23 +52385,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/query/restype",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "equal",
- "value": "container"
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDA5"
}
},
{
@@ -52373,61 +52401,96 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "x-ms-error-code": "InvalidBlockList"
},
"body": {
"encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "data": "InvalidBlockListFixture error"
}
}
}
- ],
- "optional": true
- },
+ ]
+ }
+ ],
+ "expect": [
{
- "alternatives": [
- {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidBlockList"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-unstaged-id-code-in-body",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit unstaged id, with the error code only in the XML body",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ ],
+ "origin": "constructed",
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDA5",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
"request": [
{
"at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52435,75 +52498,213 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/multipart/staged.bin"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDA5"
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "blocklist"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 400,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "InvalidBlockListFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidBlockList"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/committed.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
}
},
{
- "at": "/query/comp",
+ "at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
+ "value": "/fixture/object-tests/multipart/committed.bin"
}
},
{
- "at": "",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
},
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-question",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"question?mark.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/question?mark.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -52513,7 +52714,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52521,75 +52722,219 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/keys/question?mark.txt"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "blocklist"
}
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-hash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"hash#tag.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/hash#tag.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
{
- "at": "/query/comp",
+ "at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
+ "value": "PUT"
}
},
{
- "at": "",
+ "at": "/path",
"optional": false,
"rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
},
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-percent",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"percent%20.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/percent%20.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -52599,7 +52944,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52607,74 +52952,163 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/keys/percent%20.txt"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "blocklist"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-plus",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"plus+plus.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
}
},
{
- "at": "/query/comp",
+ "at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
}
},
{
- "at": "",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/a.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/b.txt"
- },
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/absent.txt"
- }
- ]
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "ServerBusy"
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ServerBusyFixture error"
+ "encoding": "base64",
+ "data": ""
}
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -52683,296 +53117,52 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 503
+ "value": "\"fixture-8ec031f3abfa\""
}
},
{
- "at": "/code",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "ServerBusy"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/delete-many-256",
+ "id": "operations/azure-hns/commit-key-space",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Delete 256 keys in one batch, the most Azure takes",
+ "purpose": "commit, with the key \"space name.txt\"",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "keys": [
- "object-tests/batch/many-0000.txt",
- "object-tests/batch/many-0001.txt",
- "object-tests/batch/many-0002.txt",
- "object-tests/batch/many-0003.txt",
- "object-tests/batch/many-0004.txt",
- "object-tests/batch/many-0005.txt",
- "object-tests/batch/many-0006.txt",
- "object-tests/batch/many-0007.txt",
- "object-tests/batch/many-0008.txt",
- "object-tests/batch/many-0009.txt",
- "object-tests/batch/many-0010.txt",
- "object-tests/batch/many-0011.txt",
- "object-tests/batch/many-0012.txt",
- "object-tests/batch/many-0013.txt",
- "object-tests/batch/many-0014.txt",
- "object-tests/batch/many-0015.txt",
- "object-tests/batch/many-0016.txt",
- "object-tests/batch/many-0017.txt",
- "object-tests/batch/many-0018.txt",
- "object-tests/batch/many-0019.txt",
- "object-tests/batch/many-0020.txt",
- "object-tests/batch/many-0021.txt",
- "object-tests/batch/many-0022.txt",
- "object-tests/batch/many-0023.txt",
- "object-tests/batch/many-0024.txt",
- "object-tests/batch/many-0025.txt",
- "object-tests/batch/many-0026.txt",
- "object-tests/batch/many-0027.txt",
- "object-tests/batch/many-0028.txt",
- "object-tests/batch/many-0029.txt",
- "object-tests/batch/many-0030.txt",
- "object-tests/batch/many-0031.txt",
- "object-tests/batch/many-0032.txt",
- "object-tests/batch/many-0033.txt",
- "object-tests/batch/many-0034.txt",
- "object-tests/batch/many-0035.txt",
- "object-tests/batch/many-0036.txt",
- "object-tests/batch/many-0037.txt",
- "object-tests/batch/many-0038.txt",
- "object-tests/batch/many-0039.txt",
- "object-tests/batch/many-0040.txt",
- "object-tests/batch/many-0041.txt",
- "object-tests/batch/many-0042.txt",
- "object-tests/batch/many-0043.txt",
- "object-tests/batch/many-0044.txt",
- "object-tests/batch/many-0045.txt",
- "object-tests/batch/many-0046.txt",
- "object-tests/batch/many-0047.txt",
- "object-tests/batch/many-0048.txt",
- "object-tests/batch/many-0049.txt",
- "object-tests/batch/many-0050.txt",
- "object-tests/batch/many-0051.txt",
- "object-tests/batch/many-0052.txt",
- "object-tests/batch/many-0053.txt",
- "object-tests/batch/many-0054.txt",
- "object-tests/batch/many-0055.txt",
- "object-tests/batch/many-0056.txt",
- "object-tests/batch/many-0057.txt",
- "object-tests/batch/many-0058.txt",
- "object-tests/batch/many-0059.txt",
- "object-tests/batch/many-0060.txt",
- "object-tests/batch/many-0061.txt",
- "object-tests/batch/many-0062.txt",
- "object-tests/batch/many-0063.txt",
- "object-tests/batch/many-0064.txt",
- "object-tests/batch/many-0065.txt",
- "object-tests/batch/many-0066.txt",
- "object-tests/batch/many-0067.txt",
- "object-tests/batch/many-0068.txt",
- "object-tests/batch/many-0069.txt",
- "object-tests/batch/many-0070.txt",
- "object-tests/batch/many-0071.txt",
- "object-tests/batch/many-0072.txt",
- "object-tests/batch/many-0073.txt",
- "object-tests/batch/many-0074.txt",
- "object-tests/batch/many-0075.txt",
- "object-tests/batch/many-0076.txt",
- "object-tests/batch/many-0077.txt",
- "object-tests/batch/many-0078.txt",
- "object-tests/batch/many-0079.txt",
- "object-tests/batch/many-0080.txt",
- "object-tests/batch/many-0081.txt",
- "object-tests/batch/many-0082.txt",
- "object-tests/batch/many-0083.txt",
- "object-tests/batch/many-0084.txt",
- "object-tests/batch/many-0085.txt",
- "object-tests/batch/many-0086.txt",
- "object-tests/batch/many-0087.txt",
- "object-tests/batch/many-0088.txt",
- "object-tests/batch/many-0089.txt",
- "object-tests/batch/many-0090.txt",
- "object-tests/batch/many-0091.txt",
- "object-tests/batch/many-0092.txt",
- "object-tests/batch/many-0093.txt",
- "object-tests/batch/many-0094.txt",
- "object-tests/batch/many-0095.txt",
- "object-tests/batch/many-0096.txt",
- "object-tests/batch/many-0097.txt",
- "object-tests/batch/many-0098.txt",
- "object-tests/batch/many-0099.txt",
- "object-tests/batch/many-0100.txt",
- "object-tests/batch/many-0101.txt",
- "object-tests/batch/many-0102.txt",
- "object-tests/batch/many-0103.txt",
- "object-tests/batch/many-0104.txt",
- "object-tests/batch/many-0105.txt",
- "object-tests/batch/many-0106.txt",
- "object-tests/batch/many-0107.txt",
- "object-tests/batch/many-0108.txt",
- "object-tests/batch/many-0109.txt",
- "object-tests/batch/many-0110.txt",
- "object-tests/batch/many-0111.txt",
- "object-tests/batch/many-0112.txt",
- "object-tests/batch/many-0113.txt",
- "object-tests/batch/many-0114.txt",
- "object-tests/batch/many-0115.txt",
- "object-tests/batch/many-0116.txt",
- "object-tests/batch/many-0117.txt",
- "object-tests/batch/many-0118.txt",
- "object-tests/batch/many-0119.txt",
- "object-tests/batch/many-0120.txt",
- "object-tests/batch/many-0121.txt",
- "object-tests/batch/many-0122.txt",
- "object-tests/batch/many-0123.txt",
- "object-tests/batch/many-0124.txt",
- "object-tests/batch/many-0125.txt",
- "object-tests/batch/many-0126.txt",
- "object-tests/batch/many-0127.txt",
- "object-tests/batch/many-0128.txt",
- "object-tests/batch/many-0129.txt",
- "object-tests/batch/many-0130.txt",
- "object-tests/batch/many-0131.txt",
- "object-tests/batch/many-0132.txt",
- "object-tests/batch/many-0133.txt",
- "object-tests/batch/many-0134.txt",
- "object-tests/batch/many-0135.txt",
- "object-tests/batch/many-0136.txt",
- "object-tests/batch/many-0137.txt",
- "object-tests/batch/many-0138.txt",
- "object-tests/batch/many-0139.txt",
- "object-tests/batch/many-0140.txt",
- "object-tests/batch/many-0141.txt",
- "object-tests/batch/many-0142.txt",
- "object-tests/batch/many-0143.txt",
- "object-tests/batch/many-0144.txt",
- "object-tests/batch/many-0145.txt",
- "object-tests/batch/many-0146.txt",
- "object-tests/batch/many-0147.txt",
- "object-tests/batch/many-0148.txt",
- "object-tests/batch/many-0149.txt",
- "object-tests/batch/many-0150.txt",
- "object-tests/batch/many-0151.txt",
- "object-tests/batch/many-0152.txt",
- "object-tests/batch/many-0153.txt",
- "object-tests/batch/many-0154.txt",
- "object-tests/batch/many-0155.txt",
- "object-tests/batch/many-0156.txt",
- "object-tests/batch/many-0157.txt",
- "object-tests/batch/many-0158.txt",
- "object-tests/batch/many-0159.txt",
- "object-tests/batch/many-0160.txt",
- "object-tests/batch/many-0161.txt",
- "object-tests/batch/many-0162.txt",
- "object-tests/batch/many-0163.txt",
- "object-tests/batch/many-0164.txt",
- "object-tests/batch/many-0165.txt",
- "object-tests/batch/many-0166.txt",
- "object-tests/batch/many-0167.txt",
- "object-tests/batch/many-0168.txt",
- "object-tests/batch/many-0169.txt",
- "object-tests/batch/many-0170.txt",
- "object-tests/batch/many-0171.txt",
- "object-tests/batch/many-0172.txt",
- "object-tests/batch/many-0173.txt",
- "object-tests/batch/many-0174.txt",
- "object-tests/batch/many-0175.txt",
- "object-tests/batch/many-0176.txt",
- "object-tests/batch/many-0177.txt",
- "object-tests/batch/many-0178.txt",
- "object-tests/batch/many-0179.txt",
- "object-tests/batch/many-0180.txt",
- "object-tests/batch/many-0181.txt",
- "object-tests/batch/many-0182.txt",
- "object-tests/batch/many-0183.txt",
- "object-tests/batch/many-0184.txt",
- "object-tests/batch/many-0185.txt",
- "object-tests/batch/many-0186.txt",
- "object-tests/batch/many-0187.txt",
- "object-tests/batch/many-0188.txt",
- "object-tests/batch/many-0189.txt",
- "object-tests/batch/many-0190.txt",
- "object-tests/batch/many-0191.txt",
- "object-tests/batch/many-0192.txt",
- "object-tests/batch/many-0193.txt",
- "object-tests/batch/many-0194.txt",
- "object-tests/batch/many-0195.txt",
- "object-tests/batch/many-0196.txt",
- "object-tests/batch/many-0197.txt",
- "object-tests/batch/many-0198.txt",
- "object-tests/batch/many-0199.txt",
- "object-tests/batch/many-0200.txt",
- "object-tests/batch/many-0201.txt",
- "object-tests/batch/many-0202.txt",
- "object-tests/batch/many-0203.txt",
- "object-tests/batch/many-0204.txt",
- "object-tests/batch/many-0205.txt",
- "object-tests/batch/many-0206.txt",
- "object-tests/batch/many-0207.txt",
- "object-tests/batch/many-0208.txt",
- "object-tests/batch/many-0209.txt",
- "object-tests/batch/many-0210.txt",
- "object-tests/batch/many-0211.txt",
- "object-tests/batch/many-0212.txt",
- "object-tests/batch/many-0213.txt",
- "object-tests/batch/many-0214.txt",
- "object-tests/batch/many-0215.txt",
- "object-tests/batch/many-0216.txt",
- "object-tests/batch/many-0217.txt",
- "object-tests/batch/many-0218.txt",
- "object-tests/batch/many-0219.txt",
- "object-tests/batch/many-0220.txt",
- "object-tests/batch/many-0221.txt",
- "object-tests/batch/many-0222.txt",
- "object-tests/batch/many-0223.txt",
- "object-tests/batch/many-0224.txt",
- "object-tests/batch/many-0225.txt",
- "object-tests/batch/many-0226.txt",
- "object-tests/batch/many-0227.txt",
- "object-tests/batch/many-0228.txt",
- "object-tests/batch/many-0229.txt",
- "object-tests/batch/many-0230.txt",
- "object-tests/batch/many-0231.txt",
- "object-tests/batch/many-0232.txt",
- "object-tests/batch/many-0233.txt",
- "object-tests/batch/many-0234.txt",
- "object-tests/batch/many-0235.txt",
- "object-tests/batch/many-0236.txt",
- "object-tests/batch/many-0237.txt",
- "object-tests/batch/many-0238.txt",
- "object-tests/batch/many-0239.txt",
- "object-tests/batch/many-0240.txt",
- "object-tests/batch/many-0241.txt",
- "object-tests/batch/many-0242.txt",
- "object-tests/batch/many-0243.txt",
- "object-tests/batch/many-0244.txt",
- "object-tests/batch/many-0245.txt",
- "object-tests/batch/many-0246.txt",
- "object-tests/batch/many-0247.txt",
- "object-tests/batch/many-0248.txt",
- "object-tests/batch/many-0249.txt",
- "object-tests/batch/many-0250.txt",
- "object-tests/batch/many-0251.txt",
- "object-tests/batch/many-0252.txt",
- "object-tests/batch/many-0253.txt",
- "object-tests/batch/many-0254.txt",
- "object-tests/batch/many-0255.txt"
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
],
- "op": "delete_many"
+ "key": "object-tests/keys/space name.txt",
+ "op": "azure.commit_blocks"
},
"exchanges": [
{
@@ -52984,7 +53174,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "POST"
+ "value": "PUT"
}
},
{
@@ -52992,42 +53182,2955 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture"
+ "value": "/fixture/object-tests/keys/space name.txt"
}
},
{
- "at": "/headers/content-type",
+ "at": "/body_text",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
}
},
{
- "at": "/query/restype",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "container"
+ "value": "blocklist"
}
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
},
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-non-ascii",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"café/雪.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
{
- "at": "/query/comp",
+ "at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": "batch"
+ "value": "PUT"
}
},
{
- "at": "",
+ "at": "/path",
"optional": false,
"rule": {
- "is": "blob_batch",
- "subrequests": [
- {
- "method": "DELETE",
- "path": "/fixture/object-tests/batch/many-0000.txt"
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/café/雪.txt"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-double-slash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"double//slash.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/double//slash.txt"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-key-trailing-slash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "commit, with the key \"trailing-slash/\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/keys/trailing-slash/",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/trailing-slash/"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 400,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "InvalidBlockList"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "InvalidBlockListFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidBlockList"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-content-properties",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Commit a block list with content properties, sent as x-ms-blob-content-type, -language, -disposition and x-ms-blob-cache-control",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "cache_control": "max-age=3600",
+ "content_disposition": "attachment; filename=\"report.txt\"",
+ "content_language": "nl-NL",
+ "content_type": "text/plain; charset=utf-8",
+ "key": "object-tests/multipart/committed.bin",
+ "op": "azure.commit_blocks"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/multipart/committed.bin"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain; charset=utf-8"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl-NL"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/commit-with-tier",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Commit a block list into an access tier, named in x-ms-access-tier",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "blocks": [
+ {
+ "id_base64": "MDAwMDAx",
+ "kind": "latest"
+ },
+ {
+ "id_base64": "MDAwMDAy",
+ "kind": "latest"
+ }
+ ],
+ "key": "object-tests/multipart/committed.bin",
+ "op": "azure.commit_blocks",
+ "tier": "Cool"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/multipart/committed.bin"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": "MDAwMDAxMDAwMDAy"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "blocklist"
+ }
+ },
+ {
+ "at": "/headers/x-ms-access-tier",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Cool"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-8ec031f3abfa\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-8ec031f3abfa\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/remove/present.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-question",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"question?mark.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/question?mark.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/question?mark.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-hash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"hash#tag.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/hash#tag.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-percent",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"percent%20.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/percent%20.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/percent%20.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-plus",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"plus+plus.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-space",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"space name.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/space name.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/space name.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-non-ascii",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"café/雪.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/café/雪.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-double-slash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"double//slash.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/double//slash.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-accepted-key-trailing-slash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "delete accepted, with the key \"trailing-slash/\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/keys/trailing-slash/",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/trailing-slash/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 400,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "InvalidUri"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "InvalidUriFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidUri"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Delete several objects in one batch and report each result",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture-0\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture-1\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\nServer: Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture-2\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\nServer: Windows-Azure-Blob/1.0\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture--"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/deleted",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt"
+ ]
+ }
+ },
+ {
+ "at": "/value/errors",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ {
+ "code": "BlobNotFound",
+ "key": "object-tests/batch/absent.txt",
+ "status": 404
+ }
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-denied",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Report each deletion of a batch that Azure refuses inside its 202 answer, here every one with 403 AuthorizationPermissionMismatch, as that key's error, not as deleted",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 403 This request is not authorized to perform this operation using this permission.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: AuthorizationPermissionMismatch\r\nx-ms-version: 2023-11-03\r\nContent-Length: 129\r\nContent-Type: application/xml\r\n\r\nAuthorizationPermissionMismatchFixture error\r\n--batchresponse_fixture--"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/deleted",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": []
+ }
+ },
+ {
+ "at": "/value/errors",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ {
+ "code": "AuthorizationPermissionMismatch",
+ "key": "object-tests/batch/a.txt",
+ "status": 403
+ },
+ {
+ "code": "AuthorizationPermissionMismatch",
+ "key": "object-tests/batch/b.txt",
+ "status": 403
+ },
+ {
+ "code": "AuthorizationPermissionMismatch",
+ "key": "object-tests/batch/absent.txt",
+ "status": 403
+ }
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-answers-out-of-order",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Match each part of a batch answer to its deletion by Content-ID, which links them, not by position. Azure has answered every recorded batch in order, up to 256 parts; this answer is written by hand",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "origin": "constructed",
+ "derived_from": "operations/azure-hns/delete-many",
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture--"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/deleted",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt"
+ ]
+ }
+ },
+ {
+ "at": "/value/errors",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": [
+ {
+ "code": "BlobNotFound",
+ "key": "object-tests/batch/absent.txt",
+ "status": 404
+ }
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-lf-line-endings",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Read a batch answer whose lines end in LF alone correctly, or report it as an error, but never half-read it. Azure has not been seen to send it: HTTP and multipart require CRLF. This answer is the recorded one with every CR removed",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "origin": "constructed",
+ "derived_from": "operations/azure-hns/delete-many",
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 0\n\nHTTP/1.1 202 Accepted\nx-ms-request-id: fixture\nx-ms-delete-type-permanent: true\nx-ms-version: 2023-11-03\n\n--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 1\n\nHTTP/1.1 202 Accepted\nx-ms-request-id: fixture\nx-ms-delete-type-permanent: true\nx-ms-version: 2023-11-03\n\n--batchresponse_fixture\nContent-Type: application/http\nContent-ID: 2\n\nHTTP/1.1 404 The specified blob does not exist.\nx-ms-request-id: fixture\nx-ms-error-code: BlobNotFound\nx-ms-version: 2023-11-03\nContent-Length: 110\nContent-Type: application/xml\n\nBlobNotFoundFixture error\n--batchresponse_fixture--"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "ok",
+ "error"
+ ]
+ }
+ },
+ {
+ "at": "/value/deleted",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt"
+ ]
+ }
+ },
+ {
+ "at": "/value/errors",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": [
+ {
+ "code": "BlobNotFound",
+ "key": "object-tests/batch/absent.txt",
+ "status": 404
+ }
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-without-content-id",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Report a batch answer whose parts carry no Content-ID as an error. Without one, only the order of the parts would link a result to its key, and a guess could report one key deleted when another failed. Azure echoes the Content-ID of every subrequest; this answer is the recorded one with them removed",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "origin": "constructed",
+ "derived_from": "operations/azure-hns/delete-many",
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 202,
+ "headers": {
+ "content-type": "multipart/mixed; boundary=batchresponse_fixture",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 202 Accepted\r\nx-ms-request-id: fixture\r\nx-ms-delete-type-permanent: true\r\nx-ms-version: 2023-11-03\r\n\r\n--batchresponse_fixture\r\nContent-Type: application/http\r\n\r\nHTTP/1.1 404 The specified blob does not exist.\r\nx-ms-request-id: fixture\r\nx-ms-error-code: BlobNotFound\r\nx-ms-version: 2023-11-03\r\nContent-Length: 110\r\nContent-Type: application/xml\r\n\r\nBlobNotFoundFixture error\r\n--batchresponse_fixture--"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-server-busy",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Report a batch that Azure answers as a whole with 503 ServerBusy as an error, never as deleted keys. A client may retry up to five times first",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "origin": "transient",
+ "derived_from": "operations/azure-hns/delete-many",
+ "call": {
+ "keys": [
+ "object-tests/batch/a.txt",
+ "object-tests/batch/b.txt",
+ "object-tests/batch/absent.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/a.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/b.txt"
+ },
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/absent.txt"
+ }
+ ]
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ServerBusy"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ServerBusyFixture error"
+ }
+ }
+ }
+ ],
+ "optional": true
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 503
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ServerBusy"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/delete-many-256",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Delete 256 keys in one batch, the most Azure takes",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-batch"
+ ],
+ "call": {
+ "keys": [
+ "object-tests/batch/many-0000.txt",
+ "object-tests/batch/many-0001.txt",
+ "object-tests/batch/many-0002.txt",
+ "object-tests/batch/many-0003.txt",
+ "object-tests/batch/many-0004.txt",
+ "object-tests/batch/many-0005.txt",
+ "object-tests/batch/many-0006.txt",
+ "object-tests/batch/many-0007.txt",
+ "object-tests/batch/many-0008.txt",
+ "object-tests/batch/many-0009.txt",
+ "object-tests/batch/many-0010.txt",
+ "object-tests/batch/many-0011.txt",
+ "object-tests/batch/many-0012.txt",
+ "object-tests/batch/many-0013.txt",
+ "object-tests/batch/many-0014.txt",
+ "object-tests/batch/many-0015.txt",
+ "object-tests/batch/many-0016.txt",
+ "object-tests/batch/many-0017.txt",
+ "object-tests/batch/many-0018.txt",
+ "object-tests/batch/many-0019.txt",
+ "object-tests/batch/many-0020.txt",
+ "object-tests/batch/many-0021.txt",
+ "object-tests/batch/many-0022.txt",
+ "object-tests/batch/many-0023.txt",
+ "object-tests/batch/many-0024.txt",
+ "object-tests/batch/many-0025.txt",
+ "object-tests/batch/many-0026.txt",
+ "object-tests/batch/many-0027.txt",
+ "object-tests/batch/many-0028.txt",
+ "object-tests/batch/many-0029.txt",
+ "object-tests/batch/many-0030.txt",
+ "object-tests/batch/many-0031.txt",
+ "object-tests/batch/many-0032.txt",
+ "object-tests/batch/many-0033.txt",
+ "object-tests/batch/many-0034.txt",
+ "object-tests/batch/many-0035.txt",
+ "object-tests/batch/many-0036.txt",
+ "object-tests/batch/many-0037.txt",
+ "object-tests/batch/many-0038.txt",
+ "object-tests/batch/many-0039.txt",
+ "object-tests/batch/many-0040.txt",
+ "object-tests/batch/many-0041.txt",
+ "object-tests/batch/many-0042.txt",
+ "object-tests/batch/many-0043.txt",
+ "object-tests/batch/many-0044.txt",
+ "object-tests/batch/many-0045.txt",
+ "object-tests/batch/many-0046.txt",
+ "object-tests/batch/many-0047.txt",
+ "object-tests/batch/many-0048.txt",
+ "object-tests/batch/many-0049.txt",
+ "object-tests/batch/many-0050.txt",
+ "object-tests/batch/many-0051.txt",
+ "object-tests/batch/many-0052.txt",
+ "object-tests/batch/many-0053.txt",
+ "object-tests/batch/many-0054.txt",
+ "object-tests/batch/many-0055.txt",
+ "object-tests/batch/many-0056.txt",
+ "object-tests/batch/many-0057.txt",
+ "object-tests/batch/many-0058.txt",
+ "object-tests/batch/many-0059.txt",
+ "object-tests/batch/many-0060.txt",
+ "object-tests/batch/many-0061.txt",
+ "object-tests/batch/many-0062.txt",
+ "object-tests/batch/many-0063.txt",
+ "object-tests/batch/many-0064.txt",
+ "object-tests/batch/many-0065.txt",
+ "object-tests/batch/many-0066.txt",
+ "object-tests/batch/many-0067.txt",
+ "object-tests/batch/many-0068.txt",
+ "object-tests/batch/many-0069.txt",
+ "object-tests/batch/many-0070.txt",
+ "object-tests/batch/many-0071.txt",
+ "object-tests/batch/many-0072.txt",
+ "object-tests/batch/many-0073.txt",
+ "object-tests/batch/many-0074.txt",
+ "object-tests/batch/many-0075.txt",
+ "object-tests/batch/many-0076.txt",
+ "object-tests/batch/many-0077.txt",
+ "object-tests/batch/many-0078.txt",
+ "object-tests/batch/many-0079.txt",
+ "object-tests/batch/many-0080.txt",
+ "object-tests/batch/many-0081.txt",
+ "object-tests/batch/many-0082.txt",
+ "object-tests/batch/many-0083.txt",
+ "object-tests/batch/many-0084.txt",
+ "object-tests/batch/many-0085.txt",
+ "object-tests/batch/many-0086.txt",
+ "object-tests/batch/many-0087.txt",
+ "object-tests/batch/many-0088.txt",
+ "object-tests/batch/many-0089.txt",
+ "object-tests/batch/many-0090.txt",
+ "object-tests/batch/many-0091.txt",
+ "object-tests/batch/many-0092.txt",
+ "object-tests/batch/many-0093.txt",
+ "object-tests/batch/many-0094.txt",
+ "object-tests/batch/many-0095.txt",
+ "object-tests/batch/many-0096.txt",
+ "object-tests/batch/many-0097.txt",
+ "object-tests/batch/many-0098.txt",
+ "object-tests/batch/many-0099.txt",
+ "object-tests/batch/many-0100.txt",
+ "object-tests/batch/many-0101.txt",
+ "object-tests/batch/many-0102.txt",
+ "object-tests/batch/many-0103.txt",
+ "object-tests/batch/many-0104.txt",
+ "object-tests/batch/many-0105.txt",
+ "object-tests/batch/many-0106.txt",
+ "object-tests/batch/many-0107.txt",
+ "object-tests/batch/many-0108.txt",
+ "object-tests/batch/many-0109.txt",
+ "object-tests/batch/many-0110.txt",
+ "object-tests/batch/many-0111.txt",
+ "object-tests/batch/many-0112.txt",
+ "object-tests/batch/many-0113.txt",
+ "object-tests/batch/many-0114.txt",
+ "object-tests/batch/many-0115.txt",
+ "object-tests/batch/many-0116.txt",
+ "object-tests/batch/many-0117.txt",
+ "object-tests/batch/many-0118.txt",
+ "object-tests/batch/many-0119.txt",
+ "object-tests/batch/many-0120.txt",
+ "object-tests/batch/many-0121.txt",
+ "object-tests/batch/many-0122.txt",
+ "object-tests/batch/many-0123.txt",
+ "object-tests/batch/many-0124.txt",
+ "object-tests/batch/many-0125.txt",
+ "object-tests/batch/many-0126.txt",
+ "object-tests/batch/many-0127.txt",
+ "object-tests/batch/many-0128.txt",
+ "object-tests/batch/many-0129.txt",
+ "object-tests/batch/many-0130.txt",
+ "object-tests/batch/many-0131.txt",
+ "object-tests/batch/many-0132.txt",
+ "object-tests/batch/many-0133.txt",
+ "object-tests/batch/many-0134.txt",
+ "object-tests/batch/many-0135.txt",
+ "object-tests/batch/many-0136.txt",
+ "object-tests/batch/many-0137.txt",
+ "object-tests/batch/many-0138.txt",
+ "object-tests/batch/many-0139.txt",
+ "object-tests/batch/many-0140.txt",
+ "object-tests/batch/many-0141.txt",
+ "object-tests/batch/many-0142.txt",
+ "object-tests/batch/many-0143.txt",
+ "object-tests/batch/many-0144.txt",
+ "object-tests/batch/many-0145.txt",
+ "object-tests/batch/many-0146.txt",
+ "object-tests/batch/many-0147.txt",
+ "object-tests/batch/many-0148.txt",
+ "object-tests/batch/many-0149.txt",
+ "object-tests/batch/many-0150.txt",
+ "object-tests/batch/many-0151.txt",
+ "object-tests/batch/many-0152.txt",
+ "object-tests/batch/many-0153.txt",
+ "object-tests/batch/many-0154.txt",
+ "object-tests/batch/many-0155.txt",
+ "object-tests/batch/many-0156.txt",
+ "object-tests/batch/many-0157.txt",
+ "object-tests/batch/many-0158.txt",
+ "object-tests/batch/many-0159.txt",
+ "object-tests/batch/many-0160.txt",
+ "object-tests/batch/many-0161.txt",
+ "object-tests/batch/many-0162.txt",
+ "object-tests/batch/many-0163.txt",
+ "object-tests/batch/many-0164.txt",
+ "object-tests/batch/many-0165.txt",
+ "object-tests/batch/many-0166.txt",
+ "object-tests/batch/many-0167.txt",
+ "object-tests/batch/many-0168.txt",
+ "object-tests/batch/many-0169.txt",
+ "object-tests/batch/many-0170.txt",
+ "object-tests/batch/many-0171.txt",
+ "object-tests/batch/many-0172.txt",
+ "object-tests/batch/many-0173.txt",
+ "object-tests/batch/many-0174.txt",
+ "object-tests/batch/many-0175.txt",
+ "object-tests/batch/many-0176.txt",
+ "object-tests/batch/many-0177.txt",
+ "object-tests/batch/many-0178.txt",
+ "object-tests/batch/many-0179.txt",
+ "object-tests/batch/many-0180.txt",
+ "object-tests/batch/many-0181.txt",
+ "object-tests/batch/many-0182.txt",
+ "object-tests/batch/many-0183.txt",
+ "object-tests/batch/many-0184.txt",
+ "object-tests/batch/many-0185.txt",
+ "object-tests/batch/many-0186.txt",
+ "object-tests/batch/many-0187.txt",
+ "object-tests/batch/many-0188.txt",
+ "object-tests/batch/many-0189.txt",
+ "object-tests/batch/many-0190.txt",
+ "object-tests/batch/many-0191.txt",
+ "object-tests/batch/many-0192.txt",
+ "object-tests/batch/many-0193.txt",
+ "object-tests/batch/many-0194.txt",
+ "object-tests/batch/many-0195.txt",
+ "object-tests/batch/many-0196.txt",
+ "object-tests/batch/many-0197.txt",
+ "object-tests/batch/many-0198.txt",
+ "object-tests/batch/many-0199.txt",
+ "object-tests/batch/many-0200.txt",
+ "object-tests/batch/many-0201.txt",
+ "object-tests/batch/many-0202.txt",
+ "object-tests/batch/many-0203.txt",
+ "object-tests/batch/many-0204.txt",
+ "object-tests/batch/many-0205.txt",
+ "object-tests/batch/many-0206.txt",
+ "object-tests/batch/many-0207.txt",
+ "object-tests/batch/many-0208.txt",
+ "object-tests/batch/many-0209.txt",
+ "object-tests/batch/many-0210.txt",
+ "object-tests/batch/many-0211.txt",
+ "object-tests/batch/many-0212.txt",
+ "object-tests/batch/many-0213.txt",
+ "object-tests/batch/many-0214.txt",
+ "object-tests/batch/many-0215.txt",
+ "object-tests/batch/many-0216.txt",
+ "object-tests/batch/many-0217.txt",
+ "object-tests/batch/many-0218.txt",
+ "object-tests/batch/many-0219.txt",
+ "object-tests/batch/many-0220.txt",
+ "object-tests/batch/many-0221.txt",
+ "object-tests/batch/many-0222.txt",
+ "object-tests/batch/many-0223.txt",
+ "object-tests/batch/many-0224.txt",
+ "object-tests/batch/many-0225.txt",
+ "object-tests/batch/many-0226.txt",
+ "object-tests/batch/many-0227.txt",
+ "object-tests/batch/many-0228.txt",
+ "object-tests/batch/many-0229.txt",
+ "object-tests/batch/many-0230.txt",
+ "object-tests/batch/many-0231.txt",
+ "object-tests/batch/many-0232.txt",
+ "object-tests/batch/many-0233.txt",
+ "object-tests/batch/many-0234.txt",
+ "object-tests/batch/many-0235.txt",
+ "object-tests/batch/many-0236.txt",
+ "object-tests/batch/many-0237.txt",
+ "object-tests/batch/many-0238.txt",
+ "object-tests/batch/many-0239.txt",
+ "object-tests/batch/many-0240.txt",
+ "object-tests/batch/many-0241.txt",
+ "object-tests/batch/many-0242.txt",
+ "object-tests/batch/many-0243.txt",
+ "object-tests/batch/many-0244.txt",
+ "object-tests/batch/many-0245.txt",
+ "object-tests/batch/many-0246.txt",
+ "object-tests/batch/many-0247.txt",
+ "object-tests/batch/many-0248.txt",
+ "object-tests/batch/many-0249.txt",
+ "object-tests/batch/many-0250.txt",
+ "object-tests/batch/many-0251.txt",
+ "object-tests/batch/many-0252.txt",
+ "object-tests/batch/many-0253.txt",
+ "object-tests/batch/many-0254.txt",
+ "object-tests/batch/many-0255.txt"
+ ],
+ "op": "delete_many"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "multipart/mixed; boundary=batch_[0-9A-Za-z-]+"
+ }
+ },
+ {
+ "at": "/query/restype",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "container"
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "batch"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "blob_batch",
+ "subrequests": [
+ {
+ "method": "DELETE",
+ "path": "/fixture/object-tests/batch/many-0000.txt"
},
{
"method": "DELETE",
@@ -60936,7 +64039,1008 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-percent",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key with percent",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/names/percent%20.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/names/percent%20.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-c4ca668cf15e\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MQ=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-c4ca668cf15e\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-plus",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key with plus",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/names/plus+plus.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/names/plus+plus.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-f09c0f273191\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MQ=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-f09c0f273191\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-space",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key space",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ ],
+ "call": {
+ "key": "a b",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/a b"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "aGVsbG8="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "aGVsbG8="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-question",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key question",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ ],
+ "call": {
+ "key": "a?b",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/a?b"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "aGVsbG8="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "aGVsbG8="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-non-ascii",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key unicode",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ ],
+ "call": {
+ "key": "café/雪",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/café/雪"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "aGVsbG8="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "aGVsbG8="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-key-with-separators",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get key separators",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ ],
+ "call": {
+ "key": "a//b/",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/a//b/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 404,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "BlobNotFound"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-metadata-empty-value",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get metadata empty value",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/metadata/empty-value.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/metadata/empty-value.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-18852ad86043\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-meta-empty": "",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MQ=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-18852ad86043\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "xMpCOKC5I4INzFCab3WEmw=="
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
+ }
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "empty": ""
+ }
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-metadata-of-snapshot",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get metadata of snapshot",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/metadata/snapshotted.txt",
+ "op": "get",
+ "snapshot": "2024-01-01T00:00:00.1577201Z"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/metadata/snapshotted.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/snapshot",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2024-01-01T00:00:00.1577201Z"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 404,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "BlobNotFound"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/get-metadata-replaced",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "get metadata replaced",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "key": "object-tests/metadata/replaced.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/metadata/replaced.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "yB5yjZ1ML2NvBn+JzBSGLA==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-c24dabf9e117\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "Mg=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-c24dabf9e117\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/content_md5_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "yB5yjZ1ML2NvBn+JzBSGLA=="
}
},
{
@@ -60955,22 +65059,22 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "Mg=="
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-percent",
+ "id": "operations/azure-hns/get-metadata",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key with percent",
+ "purpose": "get metadata",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/names/percent%20.txt",
+ "key": "object-tests/metadata/object.txt",
"op": "get"
},
"exchanges": [
@@ -60991,7 +65095,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/names/percent%20.txt"
+ "value": "/fixture/object-tests/metadata/object.txt"
}
},
{
@@ -61013,12 +65117,14 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-c4ca668cf15e\"",
+ "etag": "\"fixture-4d04dba3441e\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
+ "x-ms-meta-name": "value",
+ "x-ms-meta-second": "2",
"x-ms-server-encrypted": "true"
},
"body": {
@@ -61044,7 +65150,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-c4ca668cf15e\""
+ "value": "\"fixture-4d04dba3441e\""
}
},
{
@@ -61089,20 +65195,31 @@
"is": "equal",
"value": "MQ=="
}
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "name": "value",
+ "second": "2"
+ }
+ }
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-plus",
+ "id": "operations/azure-hns/get-metadata-ignores-unknown-headers",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key with plus",
+ "purpose": "Surface user metadata; unknown headers must not become metadata.",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
- "key": "object-tests/names/plus+plus.txt",
+ "key": "object",
"op": "get"
},
"exchanges": [
@@ -61123,7 +65240,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/names/plus+plus.txt"
+ "value": "/fixture/object"
}
},
{
@@ -61140,22 +65257,26 @@
"response": {
"status": 200,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-f09c0f273191\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true"
+ "x-ms-meta-author": "Ada",
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03",
+ "x-unrelated": "not metadata"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "aGVsbG8="
}
}
}
@@ -61172,69 +65293,36 @@
}
},
{
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-f09c0f273191\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
+ "at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "aGVsbG8="
}
},
{
- "at": "/value/body_base64",
+ "at": "/value/metadata",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": {
+ "author": "Ada"
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-space",
+ "id": "operations/azure-hns/get-missing",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key space",
+ "purpose": "get missing. A client reports it as not_found: the object is absent",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "a b",
+ "key": "object-tests/read/absent.txt",
"op": "get"
},
"exchanges": [
@@ -61255,7 +65343,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/a b"
+ "value": "/fixture/object-tests/read/absent.txt"
}
},
{
@@ -61270,26 +65358,17 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -61302,30 +65381,49 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-question",
+ "id": "operations/azure-hns/get-missing-code-in-body",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key question",
+ "purpose": "get missing, with the error code only in the XML body. A client reports it as not_found: the object is absent",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
],
+ "origin": "constructed",
"call": {
- "key": "a?b",
+ "key": "object-tests/read/absent.txt",
"op": "get"
},
"exchanges": [
@@ -61346,7 +65444,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/a?b"
+ "value": "/fixture/object-tests/read/absent.txt"
}
},
{
@@ -61361,26 +65459,16 @@
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ }
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -61393,30 +65481,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-non-ascii",
+ "id": "operations/azure-hns/get-not-modified",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key unicode",
+ "purpose": "get not modified",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "café/雪",
+ "if_none_match": "\"fixture-5295cdfd25ff\"",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -61437,7 +65542,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/café/雪"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -61447,31 +65552,29 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/if-none-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-5295cdfd25ff\""
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 304,
"headers": {
- "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": ""
}
}
}
@@ -61484,30 +65587,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": 304
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-key-with-separators",
+ "id": "operations/azure-hns/get-precondition-failed",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get key separators",
+ "purpose": "get precondition failed",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "a//b/",
+ "if_match": "\"fixture-088e5dc109cf\"",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -61528,7 +65640,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/a//b/"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -61538,22 +65650,30 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-088e5dc109cf\""
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "x-ms-error-code": "ConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "data": "ConditionNotMetFixture error"
}
}
}
@@ -61574,7 +65694,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 412
}
},
{
@@ -61582,23 +65702,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "ConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-metadata-empty-value",
+ "id": "operations/azure-hns/get-previous-version-of-deleted-object",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get metadata empty value",
+ "purpose": "get previous version of deleted object",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/metadata/empty-value.txt",
- "op": "get"
+ "key": "object-tests/versions-mtypy4jp/deleted.txt",
+ "op": "get",
+ "version": "none-1"
},
"exchanges": [
{
@@ -61618,7 +65739,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/empty-value.txt"
+ "value": "/fixture/object-tests/versions-mtypy4jp/deleted.txt"
}
},
{
@@ -61628,30 +65749,29 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/query/versionid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "none-1"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 400,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-18852ad86043\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-meta-empty": "",
- "x-ms-server-encrypted": "true"
+ }
},
"body": {
- "encoding": "base64",
- "data": "MQ=="
+ "encoding": "utf8",
+ "data": "InvalidQueryParameterValueFixture error"
}
}
}
@@ -61664,85 +65784,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-18852ad86043\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": 400
}
},
{
- "at": "/value/metadata",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "empty": ""
- }
+ "value": "InvalidQueryParameterValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-metadata-of-snapshot",
+ "id": "operations/azure-hns/get-previous-version",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get metadata of snapshot",
+ "purpose": "get previous version",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/metadata/snapshotted.txt",
+ "key": "object-tests/versions-mtypy4jp/object.txt",
"op": "get",
- "snapshot": "2024-01-01T00:00:00.1577201Z"
+ "version": "none-1"
},
"exchanges": [
{
@@ -61762,7 +65837,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/snapshotted.txt"
+ "value": "/fixture/object-tests/versions-mtypy4jp/object.txt"
}
},
{
@@ -61774,28 +65849,27 @@
}
},
{
- "at": "/query/snapshot",
+ "at": "/query/versionid",
"optional": false,
"rule": {
"is": "equal",
- "value": "2024-01-01T00:00:00.1577201Z"
+ "value": "none-1"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "x-ms-error-code": "BlobNotFound"
+ }
},
"body": {
"encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "data": "InvalidQueryParameterValueFixture error"
}
}
}
@@ -61816,7 +65890,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 400
}
},
{
@@ -61824,23 +65898,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "InvalidQueryParameterValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-metadata-replaced",
+ "id": "operations/azure-hns/get-range-inverted",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get metadata replaced",
+ "purpose": "get range inverted",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/metadata/replaced.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 2,
+ "start": 6
+ }
},
"exchanges": [
{
@@ -61860,7 +65938,66 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/replaced.txt"
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=6-1"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -61870,6 +66007,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=6-1"
+ }
}
],
"allow_headers": [],
@@ -61877,12 +66022,12 @@
"response": {
"status": 200,
"headers": {
- "content-md5": "yB5yjZ1ML2NvBn+JzBSGLA==",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-c24dabf9e117\"",
+ "etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
@@ -61892,7 +66037,7 @@
},
"body": {
"encoding": "base64",
- "data": "Mg=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -61913,7 +66058,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-c24dabf9e117\""
+ "value": "\"fixture-5295cdfd25ff\""
}
},
{
@@ -61921,7 +66066,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -61937,7 +66082,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "yB5yjZ1ML2NvBn+JzBSGLA=="
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
}
},
{
@@ -61956,23 +66101,53 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Mg=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure-hns/get-metadata",
+ "id": "operations/azure-hns/get-range-empty",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get metadata",
+ "purpose": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/metadata/object.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 5,
+ "start": 5
+ }
},
"exchanges": [
{
@@ -61992,7 +66167,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/metadata/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62002,6 +66177,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=5-4"
+ }
}
],
"allow_headers": [],
@@ -62009,24 +66192,81 @@
"response": {
"status": 200,
"headers": {
- "content-md5": "xMpCOKC5I4INzFCab3WEmw==",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-4d04dba3441e\"",
+ "etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-meta-name": "value",
- "x-ms-meta-second": "2",
"x-ms-server-encrypted": "true"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=5-4"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -62047,7 +66287,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-4d04dba3441e\""
+ "value": "\"fixture-5295cdfd25ff\""
}
},
{
@@ -62055,7 +66295,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -62071,7 +66311,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "xMpCOKC5I4INzFCab3WEmw=="
+ "value": "H1VC0PNTmj+yaCRN4U931g=="
}
},
{
@@ -62090,34 +66330,52 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ ],
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
}
},
{
- "at": "/value/metadata",
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "name": "value",
- "second": "2"
- }
+ "value": "range"
}
}
],
- "refusal": null
+ "decline_permitted": true
},
{
- "id": "operations/azure-hns/get-metadata-ignores-unknown-headers",
+ "id": "operations/azure-hns/get-range-not-satisfiable",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Surface user metadata; unknown headers must not become metadata.",
+ "purpose": "get range not satisfiable",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "start": 40
+ }
},
"exchanges": [
{
@@ -62137,7 +66395,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62147,84 +66405,34 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=40-"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 416,
"headers": {
- "content-type": "application/octet-stream",
+ "content-range": "bytes */30",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-meta-author": "Ada",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03",
- "x-unrelated": "not metadata"
+ "x-ms-error-code": "InvalidRange"
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
+ "encoding": "utf8",
+ "data": "InvalidRangeFixture error"
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "aGVsbG8="
- }
- },
- {
- "at": "/value/metadata",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": {
- "author": "Ada"
- }
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/get-missing",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "get missing. A client reports it as not_found: the object is absent",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/read/absent.txt",
- "op": "get"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -62240,7 +66448,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/absent.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62250,22 +66458,31 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=40-"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 416,
"headers": {
+ "content-range": "bytes */30",
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "x-ms-error-code": "InvalidRange"
},
"body": {
"encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "data": "InvalidRangeFixture error"
}
}
}
@@ -62286,7 +66503,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 416
}
},
{
@@ -62294,34 +66511,27 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "not_found"
+ "value": "InvalidRange"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-missing-code-in-body",
+ "id": "operations/azure-hns/get-range-past-the-end",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get missing, with the error code only in the XML body. A client reports it as not_found: the object is absent",
+ "purpose": "Read a range that ends past the object, which the service clips to the object's end. Report the window it served from Content-Range, bytes 28-29/30, so that the caller sees the range was clipped",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/common-rest-api-error-codes",
- "https://learn.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes"
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
- "origin": "constructed",
"call": {
- "key": "object-tests/read/absent.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 64,
+ "start": 28
+ }
},
"exchanges": [
{
@@ -62341,7 +66551,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/absent.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62351,21 +66561,96 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=28-63"
+ }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 28-29/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "Y3Q="
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=28-63"
}
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 28-29/30",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "base64",
+ "data": "Y3Q="
}
}
}
@@ -62378,48 +66663,78 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-5295cdfd25ff\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": 2
}
},
{
- "at": "/kind",
+ "at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": "not_found"
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Y3Q="
+ }
+ },
+ {
+ "at": "/value/content_range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes 28-29/30"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-not-modified",
+ "id": "operations/azure-hns/get-range-single-byte",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get not modified",
+ "purpose": "get range single byte",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "if_none_match": "\"fixture-5295cdfd25ff\"",
"key": "object-tests/read/object.txt",
- "op": "get"
+ "op": "get",
+ "range": {
+ "end": 1,
+ "start": 0
+ }
},
"exchanges": [
{
@@ -62451,77 +66766,38 @@
}
},
{
- "at": "/headers/if-none-match",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-5295cdfd25ff\""
+ "value": "bytes=0-0"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 304,
+ "status": 206,
"headers": {
+ "content-range": "bytes 0-0/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MA=="
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 304
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ConditionNotMet"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/get-precondition-failed",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "get precondition failed",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "if_match": "\"fixture-088e5dc109cf\"",
- "key": "object-tests/read/object.txt",
- "op": "get"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -62549,28 +66825,35 @@
}
},
{
- "at": "/headers/if-match",
+ "at": "/headers/x-ms-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-088e5dc109cf\""
+ "value": "bytes=0-0"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-0/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "ConditionNotMet"
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "ConditionNotMetFixture error"
+ "encoding": "base64",
+ "data": "MA=="
}
}
}
@@ -62583,40 +66866,70 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-5295cdfd25ff\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "ConditionNotMet"
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MA=="
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-previous-version-of-deleted-object",
+ "id": "operations/azure-hns/get-range",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get previous version of deleted object",
+ "purpose": "get range",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
- "key": "object-tests/versions-mtypy4jp/deleted.txt",
+ "key": "object-tests/read/object.txt",
"op": "get",
- "version": "none-1"
+ "range": {
+ "end": 6,
+ "start": 2
+ }
},
"exchanges": [
{
@@ -62636,7 +66949,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtypy4jp/deleted.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62648,77 +66961,38 @@
}
},
{
- "at": "/query/versionid",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "equal",
- "value": "none-1"
+ "value": "bytes=2-5"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidQueryParameterValueFixture error"
+ "encoding": "base64",
+ "data": "MjM0NQ=="
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidQueryParameterValue"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/get-previous-version",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "get previous version",
- "sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
- ],
- "call": {
- "key": "object-tests/versions-mtypy4jp/object.txt",
- "op": "get",
- "version": "none-1"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -62734,7 +67008,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/versions-mtypy4jp/object.txt"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -62746,27 +67020,35 @@
}
},
{
- "at": "/query/versionid",
+ "at": "/headers/x-ms-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "none-1"
+ "value": "bytes=2-5"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidQueryParameterValueFixture error"
+ "encoding": "base64",
+ "data": "MjM0NQ=="
}
}
}
@@ -62779,42 +67061,68 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": "\"fixture-5295cdfd25ff\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidQueryParameterValue"
+ "value": 4
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MjM0NQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-range-inverted",
+ "id": "operations/azure-hns/get-range-open",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get range inverted",
+ "purpose": "get range open",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object",
"op": "get",
"range": {
- "end": 2,
- "start": 6
+ "start": 3
}
},
"exchanges": [
@@ -62835,7 +67143,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object"
}
},
{
@@ -62851,31 +67159,34 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=6-1"
+ "value": "bytes=3-"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 3-4/5",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-5295cdfd25ff\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true"
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "bG8="
}
}
},
@@ -62894,7 +67205,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/read/object.txt"
+ "value": "/fixture/object"
}
},
{
@@ -62910,31 +67221,34 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=6-1"
+ "value": "bytes=3-"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 3-4/5",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-5295cdfd25ff\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
- "x-ms-server-encrypted": "true"
+ "x-ms-request-id": "fixture-request-id",
+ "x-ms-request-server-encrypted": "true",
+ "x-ms-server-encrypted": "true",
+ "x-ms-version": "2023-11-03"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "bG8="
}
}
}
@@ -62950,101 +67264,33 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-5295cdfd25ff\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "range"
+ "value": "bG8="
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure-hns/get-range-empty",
+ "id": "operations/azure-hns/get-range-md5",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
+ "purpose": "Ask for the MD5 of a range with x-ms-range-get-content-md5: true, which Azure sends in content-md5. Check the body against it, and report it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 5,
- "start": 5
- }
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -63080,16 +67326,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=5-4"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63104,7 +67359,7 @@
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MjM0NQ=="
}
}
},
@@ -63139,16 +67394,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=5-4"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63163,7 +67427,7 @@
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MjM0NQ=="
}
}
}
@@ -63192,7 +67456,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 4
}
},
{
@@ -63203,14 +67467,6 @@
"value": "application/octet-stream"
}
},
- {
- "at": "/value/content_md5_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "H1VC0PNTmj+yaCRN4U931g=="
- }
- },
{
"at": "/value/version",
"optional": true,
@@ -63227,52 +67483,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
+ "value": "MjM0NQ=="
}
},
{
- "at": "/parameter",
+ "at": "/value/checksum",
"optional": false,
"rule": {
"is": "equal",
- "value": "range"
+ "value": {
+ "algorithm": "md5",
+ "value_base64": "gbBz3pNw6oc/VI4xuK3AgQ=="
+ }
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure-hns/get-range-not-satisfiable",
+ "id": "operations/azure-hns/get-range-md5-mismatch",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get range not satisfiable",
+ "purpose": "Report a range whose body does not match the MD5 Azure sent for it as an error of kind checksum_mismatch",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
+ "origin": "constructed",
+ "derived_from": "operations/azure-hns/get-range-md5",
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "start": 40
- }
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -63308,25 +67553,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=40-"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 206,
"headers": {
- "content-range": "bytes */30",
- "content-type": "application/xml",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidRange"
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidRangeFixture error"
+ "encoding": "base64",
+ "data": "MjM0YQ=="
}
}
},
@@ -63361,25 +67621,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=40-"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 206,
"headers": {
- "content-range": "bytes */30",
- "content-type": "application/xml",
+ "content-md5": "gbBz3pNw6oc/VI4xuK3AgQ==",
+ "content-range": "bytes 2-5/30",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidRange"
+ "etag": "\"fixture-5295cdfd25ff\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-type": "BlockBlob",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-lease-state": "available",
+ "x-ms-lease-status": "unlocked",
+ "x-ms-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidRangeFixture error"
+ "encoding": "base64",
+ "data": "MjM0YQ=="
}
}
}
@@ -63396,39 +67671,32 @@
}
},
{
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 416
- }
- },
- {
- "at": "/code",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidRange"
+ "value": "checksum_mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-range-past-the-end",
+ "id": "operations/azure-hns/get-range-crc64",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Read a range that ends past the object, which the service clips to the object's end. Report the window it served from Content-Range, bytes 28-29/30, so that the caller sees the range was clipped",
+ "purpose": "Ask for the CRC64 of a range with x-ms-range-get-content-crc64: true, which Azure sends in x-ms-content-crc64. Check the body against it, and report it",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 64,
- "start": 28
- }
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "azure_crc64"
},
"exchanges": [
{
@@ -63464,7 +67732,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=28-63"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63473,7 +67749,7 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 28-29/30",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63481,6 +67757,7 @@
"etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -63488,7 +67765,7 @@
},
"body": {
"encoding": "base64",
- "data": "Y3Q="
+ "data": "MjM0NQ=="
}
}
},
@@ -63523,7 +67800,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=28-63"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63532,7 +67817,7 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 28-29/30",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63540,6 +67825,7 @@
"etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -63547,7 +67833,7 @@
},
"body": {
"encoding": "base64",
- "data": "Y3Q="
+ "data": "MjM0NQ=="
}
}
}
@@ -63576,7 +67862,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 2
+ "value": 4
}
},
{
@@ -63603,35 +67889,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Y3Q="
+ "value": "MjM0NQ=="
}
},
{
- "at": "/value/content_range",
+ "at": "/value/checksum",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes 28-29/30"
+ "value": {
+ "algorithm": "azure_crc64",
+ "value_base64": "0F+fuGFLNdI="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-range-single-byte",
+ "id": "operations/azure-hns/get-range-crc64-mismatch",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get range single byte",
+ "purpose": "Report a range whose body does not match the CRC64 Azure sent for it as an error of kind checksum_mismatch",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
+ "origin": "constructed",
+ "derived_from": "operations/azure-hns/get-range-crc64",
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 1,
- "start": 0
- }
+ "end": 6,
+ "start": 2
+ },
+ "range_checksum": "azure_crc64"
},
"exchanges": [
{
@@ -63667,7 +67959,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=0-0"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63676,7 +67976,7 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/30",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63684,6 +67984,7 @@
"etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -63691,7 +67992,7 @@
},
"body": {
"encoding": "base64",
- "data": "MA=="
+ "data": "MjM0YQ=="
}
}
},
@@ -63726,7 +68027,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=0-0"
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-crc64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63735,7 +68044,7 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/30",
+ "content-range": "bytes 2-5/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63743,6 +68052,7 @@
"etag": "\"fixture-5295cdfd25ff\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-blob-type": "BlockBlob",
+ "x-ms-content-crc64": "0F+fuGFLNdI=",
"x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
"x-ms-lease-state": "available",
"x-ms-lease-status": "unlocked",
@@ -63750,7 +68060,7 @@
},
"body": {
"encoding": "base64",
- "data": "MA=="
+ "data": "MjM0YQ=="
}
}
}
@@ -63763,70 +68073,36 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-5295cdfd25ff\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "application/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "MA=="
+ "value": "checksum_mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-range",
+ "id": "operations/azure-hns/get-range-md5-largest",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get range",
+ "purpose": "Ask for the MD5 of a 4 MiB range, the largest Azure checksums. Azure serves what the blob holds of it, here all 30 bytes, and their MD5",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 6,
- "start": 2
- }
+ "end": 4194304,
+ "start": 0
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -63862,7 +68138,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=2-5"
+ "value": "bytes=0-4194303"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63871,7 +68155,8 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 2-5/30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 0-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63886,7 +68171,7 @@
},
"body": {
"encoding": "base64",
- "data": "MjM0NQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
},
@@ -63921,7 +68206,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=2-5"
+ "value": "bytes=0-4194303"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
@@ -63930,7 +68223,8 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 2-5/30",
+ "content-md5": "H1VC0PNTmj+yaCRN4U931g==",
+ "content-range": "bytes 0-29/30",
"content-type": "application/octet-stream",
"date": {
"from": "now"
@@ -63945,7 +68239,7 @@
},
"body": {
"encoding": "base64",
- "data": "MjM0NQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -63974,7 +68268,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 4
+ "value": 30
}
},
{
@@ -64001,26 +68295,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MjM0NQ=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "md5",
+ "value_base64": "H1VC0PNTmj+yaCRN4U931g=="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-range-open",
+ "id": "operations/azure-hns/get-range-md5-too-large",
"profile": "azure-hns",
"lane": "core",
- "purpose": "get range open",
+ "purpose": "Report the MD5 of a range one byte over 4 MiB as an error: Azure refuses it with 400 InvalidHeaderValue. A client may refuse it before sending",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob"
],
"call": {
- "key": "object",
+ "key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "start": 3
- }
+ "end": 4194305,
+ "start": 0
+ },
+ "range_checksum": "md5"
},
"exchanges": [
{
@@ -64040,7 +68347,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -64056,34 +68363,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=3-"
+ "value": "bytes=0-4194304"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 400,
"headers": {
- "content-range": "bytes 3-4/5",
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
- "encoding": "base64",
- "data": "bG8="
+ "encoding": "utf8",
+ "data": "InvalidHeaderValueFixture error"
}
}
},
@@ -64102,7 +68407,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object"
+ "value": "/fixture/object-tests/read/object.txt"
}
},
{
@@ -64118,34 +68423,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=3-"
+ "value": "bytes=0-4194304"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range-get-content-md5",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "true"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 400,
"headers": {
- "content-range": "bytes 3-4/5",
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-blob-type": "BlockBlob",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-lease-state": "available",
- "x-ms-lease-status": "unlocked",
- "x-ms-request-id": "fixture-request-id",
- "x-ms-request-server-encrypted": "true",
- "x-ms-server-encrypted": "true",
- "x-ms-version": "2023-11-03"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
- "encoding": "base64",
- "data": "bG8="
+ "encoding": "utf8",
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -64158,19 +68461,68 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "bG8="
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidHeaderValue"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidHeaderValue"
+ }
+ }
+ ]
},
{
"id": "operations/azure-hns/get-reordered",
@@ -69402,6 +73754,673 @@
],
"refusal": null
},
+ {
+ "id": "operations/azure-hns/set-properties-all",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Set every content property with Set Blob Properties, each in its x-ms-blob- header: content type, encoding, language, disposition and cache control",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-properties"
+ ],
+ "call": {
+ "cache_control": "no-cache",
+ "content_disposition": "attachment; filename=\"data.json\"",
+ "content_encoding": "gzip",
+ "content_language": "nl",
+ "content_type": "application/json",
+ "key": "object-tests/properties/object.txt",
+ "op": "azure.set_properties"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "properties"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/json"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-encoding",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "gzip"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"data.json\""
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "no-cache"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-etag\""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/set-properties",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Set a blob's content type with Set Blob Properties: a PUT with comp=properties and x-ms-blob-content-type. It replaces all content properties, so the cache control and the stored Content-MD5 it does not name are cleared",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-properties"
+ ],
+ "call": {
+ "content_type": "application/json",
+ "key": "object-tests/properties/object.txt",
+ "op": "azure.set_properties"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "properties"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "application/json"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-etag\""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/set-metadata-missing",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Report Set Blob Metadata on a blob that does not exist as not found, 404 BlobNotFound",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
+ ],
+ "call": {
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ },
+ {
+ "at": "/headers/x-ms-meta-shape",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "round"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 404,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "BlobNotFound"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 404
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlobNotFound"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "not_found"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/set-metadata-if-match-failed",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Report Set Blob Metadata with an If-Match the blob does not have as a failed condition, 412 ConditionNotMet, which leaves the metadata as it was",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
+ ],
+ "call": {
+ "if_match": "\"0x8DEADBEEF000000\"",
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ },
+ {
+ "at": "/headers/x-ms-meta-shape",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "round"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"0x8DEADBEEF000000\""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 412,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "x-ms-error-code": "ConditionNotMet"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "ConditionNotMetFixture error"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 412
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ConditionNotMet"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "precondition"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/set-metadata-empty",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Clear a blob's metadata with Set Blob Metadata and no x-ms-meta- header",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
+ ],
+ "call": {
+ "key": "object-tests/properties/object.txt",
+ "metadata": {},
+ "op": "azure.set_metadata"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-etag\""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/set-metadata",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Replace a blob's metadata with Set Blob Metadata: a PUT with comp=metadata and an x-ms-meta- header for each pair. It replaces all metadata, so a name it leaves out is gone",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata"
+ ],
+ "call": {
+ "key": "object-tests/properties/object.txt",
+ "metadata": {
+ "shape": "round"
+ },
+ "op": "azure.set_metadata"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/properties/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "metadata"
+ }
+ },
+ {
+ "at": "/headers/x-ms-meta-shape",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "round"
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-etag\""
+ }
+ }
+ ],
+ "refusal": null
+ },
{
"id": "operations/azure-hns/head-access-tier",
"profile": "azure-hns",
@@ -82708,7 +87727,863 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-9373f0410116\""
+ "value": "\"fixture-9373f0410116\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/write/object.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/write/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-question",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"question?mark.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/question?mark.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/question?mark.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-hash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"hash#tag.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/hash#tag.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/hash#tag.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-percent",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"percent%20.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/percent%20.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/percent%20.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-plus",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"plus+plus.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/plus+plus.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/plus+plus.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-space",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"space name.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/space name.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/space name.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-non-ascii",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"café/雪.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/café/雪.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/café/雪.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/put-created-key-double-slash",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "put created, with the key \"double//slash.txt\"",
+ "sources": [
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ ],
+ "call": {
+ "body_base64": "MDEyMzQ1Njc4OQ==",
+ "key": "object-tests/keys/double//slash.txt",
+ "op": "put"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/keys/double//slash.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OQ=="
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-bf139483d631\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bf139483d631\""
}
},
{
@@ -82726,16 +88601,16 @@
"refusal": null
},
{
- "id": "operations/azure-hns/put-created",
+ "id": "operations/azure-hns/put-created-key-trailing-slash",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created",
+ "purpose": "put created, with the key \"trailing-slash/\"",
"sources": [
"azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
],
"call": {
"body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/write/object.txt",
+ "key": "object-tests/keys/trailing-slash/",
"op": "put"
},
"exchanges": [
@@ -82756,7 +88631,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/write/object.txt"
+ "value": "/fixture/object-tests/keys/trailing-slash/"
}
},
{
@@ -82781,20 +88656,17 @@
],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 400,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "InvalidUri"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "InvalidUriFixture error"
}
}
}
@@ -82807,43 +88679,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
+ "value": 400
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "InvalidUri"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-question",
+ "id": "operations/azure-hns/copy-missing-source",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"question?mark.txt\"",
+ "purpose": "Refuse a copy whose source does not exist",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/question?mark.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/absent.txt"
},
"exchanges": [
{
@@ -82863,7 +88732,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/question?mark.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -82871,37 +88740,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 404,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "BlobNotFound"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "BlobNotFoundFixture error"
}
}
}
@@ -82914,43 +88778,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
+ "value": 404
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "BlobNotFound"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-hash",
+ "id": "operations/azure-hns/copy",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"hash#tag.txt\"",
+ "purpose": "Copy an object to another key in the same container",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/hash#tag.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -82970,7 +88831,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/hash#tag.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -82978,37 +88839,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -83025,39 +88882,31 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-percent",
+ "id": "operations/azure-hns/copy-replace-metadata",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"percent%20.txt\"",
+ "purpose": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/percent%20.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "metadata": {
+ "colour": "blue"
+ },
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83077,7 +88926,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/percent%20.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83085,37 +88934,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-meta-colour",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "blue"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -83132,39 +88985,29 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-plus",
+ "id": "operations/azure-hns/copy-source-if-match",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"plus+plus.txt\"",
+ "purpose": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/plus+plus.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_match": "\"fixture-etag\"",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83184,7 +89027,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/plus+plus.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83192,37 +89035,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "\"fixture-etag\""
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 202,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -83239,39 +89086,29 @@
}
},
{
- "at": "/value/etag",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-space",
+ "id": "operations/azure-hns/copy-source-if-match-failed",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"space name.txt\"",
+ "purpose": "Report a copy whose source does not have the ETag in x-ms-source-if-match as a failed condition, 412 SourceConditionNotMet",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/space name.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_match": "\"fixture-0123456789ab\"",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83291,7 +89128,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/space name.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83299,37 +89136,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-if-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "\"fixture-0123456789ab\""
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 412,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "SourceConditionNotMet"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "SourceConditionNotMetFixture error"
}
}
}
@@ -83342,43 +89182,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
+ "value": 412
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "SourceConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-non-ascii",
+ "id": "operations/azure-hns/copy-source-if-unmodified-since-failed",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"café/雪.txt\"",
+ "purpose": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/café/雪.txt",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_if_unmodified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83398,7 +89236,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/café/雪.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83406,37 +89244,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-if-unmodified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "Mon, 01 Jan 2024 00:00:00 GMT"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 412,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "SourceConditionNotMet"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "SourceConditionNotMetFixture error"
}
}
}
@@ -83449,43 +89290,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
+ "value": 412
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "SourceConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-double-slash",
+ "id": "operations/azure-hns/copy-if-none-match-exists",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"double//slash.txt\"",
+ "purpose": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/double//slash.txt",
- "op": "put"
+ "if_none_match": "*",
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83505,7 +89344,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/double//slash.txt"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83513,37 +89352,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "*"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 409,
"headers": {
- "content-md5": "eB5eJF1ptWaXm4bijSPyxw==",
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-bf139483d631\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "BlobAlreadyExists"
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "utf8",
+ "data": "BlobAlreadyExistsFixture error"
}
}
}
@@ -83556,43 +89398,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-bf139483d631\""
+ "value": 409
}
},
{
- "at": "/value/version",
- "optional": true,
+ "at": "/code",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "is": "equal",
+ "value": "BlobAlreadyExists"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-created-key-trailing-slash",
+ "id": "operations/azure-hns/copy-across-containers",
"profile": "azure-hns",
"lane": "core",
- "purpose": "put created, with the key \"trailing-slash/\"",
+ "purpose": "Copy a blob from another container of the same account, which x-ms-copy-source names in its URL",
"sources": [
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_rest_client.cpp"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
- "body_base64": "MDEyMzQ1Njc4OQ==",
- "key": "object-tests/keys/trailing-slash/",
- "op": "put"
+ "key": "object-tests/copy/target.txt",
+ "op": "copy",
+ "source_container": "source",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -83612,7 +89452,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/keys/trailing-slash/"
+ "value": "/fixture/object-tests/copy/target.txt"
}
},
{
@@ -83620,34 +89460,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OQ=="
+ "value": ""
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "BlockBlob"
+ "is": "matches",
+ "pattern": "https?://[^/]+/source/object-tests/copy/source\\.txt"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidUri"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "InvalidUriFixture error"
+ "encoding": "empty"
}
}
}
@@ -83660,40 +89499,33 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidUri"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-missing-source",
+ "id": "operations/azure-hns/copy-tier",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Refuse a copy whose source does not exist",
+ "purpose": "Copy a blob into another access tier, named in x-ms-access-tier",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_key": "object-tests/copy/absent.txt"
+ "source_key": "object-tests/copy/source.txt",
+ "tier": "Cool"
},
"exchanges": [
{
@@ -83729,24 +89561,33 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-access-tier",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Cool"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobNotFound"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "BlobNotFoundFixture error"
+ "encoding": "empty"
}
}
}
@@ -83759,40 +89600,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 404
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobNotFound"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy",
+ "id": "operations/azure-hns/copy-source-key-encoded",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy an object to another key in the same container",
+ "purpose": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "source_key": "object-tests/copy/a b+c%é?#.txt"
},
"exchanges": [
{
@@ -83828,7 +89661,7 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/a%20b%2[Bb]c%25%[Cc]3%[Aa]9%3[Ff]%23\\.txt"
}
}
],
@@ -83874,20 +89707,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/copy-replace-metadata",
+ "id": "operations/azure-hns/copy-sync",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy a blob with new metadata, which replaces all of the source's. A copy that names no metadata keeps the source's",
+ "purpose": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. Azure reads the source by URL as the caller, or with the bearer token in x-ms-copy-source-authorization",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
"key": "object-tests/copy/target.txt",
- "metadata": {
- "colour": "blue"
- },
"op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "source_key": "object-tests/copy/source.txt",
+ "sync": true
},
"exchanges": [
{
@@ -83927,112 +89758,19 @@
}
},
{
- "at": "/headers/x-ms-meta-colour",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "blue"
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 202,
- "headers": {
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
- },
- "body": {
- "encoding": "empty"
- }
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/copy_status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "success"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/copy-source-if-match",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "Copy a blob only if the source still has this ETag, named in x-ms-source-if-match",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
- ],
- "call": {
- "key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_if_match": "\"fixture-etag\"",
- "source_key": "object-tests/copy/source.txt"
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
- }
- },
- {
- "at": "/body_base64",
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "true"
}
},
{
- "at": "/headers/x-ms-copy-source",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
- }
- },
- {
- "at": "/headers/x-ms-source-if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-etag\""
+ "pattern": "Bearer [^ ]+"
}
}
],
@@ -84078,18 +89816,18 @@
"refusal": null
},
{
- "id": "operations/azure-hns/copy-source-if-match-failed",
+ "id": "operations/azure-hns/copy-sync-missing-source",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a copy whose source does not have the ETag in x-ms-source-if-match as a failed condition, 412 SourceConditionNotMet",
+ "purpose": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_if_match": "\"fixture-0123456789ab\"",
- "source_key": "object-tests/copy/source.txt"
+ "source_key": "object-tests/copy/absent.txt",
+ "sync": true
},
"exchanges": [
{
@@ -84125,32 +89863,40 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
}
},
{
- "at": "/headers/x-ms-source-if-match",
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-0123456789ab\""
+ "value": "true"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 404,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "SourceConditionNotMet"
+ "x-ms-error-code": "CannotVerifyCopySource"
},
"body": {
"encoding": "utf8",
- "data": "SourceConditionNotMetFixture error"
+ "data": "CannotVerifyCopySourceFixture error"
}
}
}
@@ -84171,7 +89917,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": 404
}
},
{
@@ -84179,25 +89925,26 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "SourceConditionNotMet"
+ "value": "CannotVerifyCopySource"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-source-if-unmodified-since-failed",
+ "id": "operations/azure-hns/copy-sync-other-account",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a copy whose source changed after the time in x-ms-source-if-unmodified-since as a failed condition, 412 SourceConditionNotMet",
+ "purpose": "Copy a blob with Copy Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
],
"call": {
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_if_unmodified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
- "source_key": "object-tests/copy/source.txt"
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt",
+ "sync": true
},
"exchanges": [
{
@@ -84233,32 +89980,41 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-source-if-unmodified-since",
+ "at": "/headers/x-ms-requires-sync",
"optional": false,
"rule": {
"is": "equal",
- "value": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "value": "true"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "SourceConditionNotMet"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "success"
},
"body": {
- "encoding": "utf8",
- "data": "SourceConditionNotMetFixture error"
+ "encoding": "empty"
}
}
}
@@ -84271,38 +90027,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 412
+ "value": "ok"
}
},
{
- "at": "/code",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": "SourceConditionNotMet"
+ "value": "success"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-if-none-match-exists",
+ "id": "operations/azure-hns/copy-pending",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a copy with If-None-Match: * onto a blob that exists as a failed condition on the destination",
+ "purpose": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
+ "origin": "transient",
+ "derived_from": "operations/azure-hns/copy",
"call": {
- "if_none_match": "*",
"key": "object-tests/copy/target.txt",
"op": "copy",
"source_key": "object-tests/copy/source.txt"
@@ -84343,30 +90092,23 @@
"is": "matches",
"pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
- },
- {
- "at": "/headers/if-none-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "*"
- }
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 202,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "BlobAlreadyExists"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-copy-id": "fixture-copy-id",
+ "x-ms-copy-status": "pending"
},
"body": {
- "encoding": "utf8",
- "data": "BlobAlreadyExistsFixture error"
+ "encoding": "empty"
}
}
}
@@ -84379,40 +90121,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/copy_status",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": "pending"
}
},
{
- "at": "/code",
+ "at": "/value/copy_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlobAlreadyExists"
+ "value": "fixture-copy-id"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-across-containers",
+ "id": "operations/azure-hns/copy-content-properties",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy a blob from another container of the same account, which x-ms-copy-source names in its URL",
+ "purpose": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
+ "content_type": "text/plain",
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_container": "source",
"source_key": "object-tests/copy/source.txt"
},
"exchanges": [
@@ -84449,7 +90191,15 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/source/object-tests/copy/source\\.txt"
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain"
}
}
],
@@ -84492,21 +90242,47 @@
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "content_type"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/azure-hns/copy-tier",
+ "id": "operations/azure-hns/copy-other-account",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy a blob into another access tier, named in x-ms-access-tier",
+ "purpose": "Report an asynchronous Copy Blob from another storage account as an error. It reads such a source only with a SAS, so with Entra ID Azure answers 401 CannotVerifyCopySource, with a bearer token in x-ms-copy-source-authorization or without. Copy between accounts with Copy Blob From URL, Put Blob From URL or Put Block From URL",
"sources": [
"https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
],
"call": {
"key": "object-tests/copy/target.txt",
"op": "copy",
- "source_key": "object-tests/copy/source.txt",
- "tier": "Cool"
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -84542,33 +90318,32 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/headers/x-ms-access-tier",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "Cool"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 401,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-error-code": "CannotVerifyCopySource"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "CannotVerifyCopySourceFixture error"
}
}
}
@@ -84581,32 +90356,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/copy_status",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": 401
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "CannotVerifyCopySource"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-source-key-encoded",
+ "id": "operations/azure-hns/put-from-url",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy from a key with a space, +, %, é, ? and #. The x-ms-copy-source URL percent-encodes every byte of the key outside letters, digits, -._~ and /",
+ "purpose": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
"key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/a b+c%é?#.txt"
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -84642,22 +90425,39 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/a%20b%2[Bb]c%25%[Cc]3%[Aa]9%3[Ff]%23\\.txt"
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -84677,29 +90477,30 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-sync",
+ "id": "operations/azure-hns/put-from-url-content-properties",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy a blob with Copy Blob From URL, x-ms-requires-sync: true, which answers once the copy is done. The source must be readable by URL: by a SAS, or by a bearer token in x-ms-copy-source-authorization",
+ "purpose": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
+ "cache_control": "max-age=3600",
+ "content_type": "text/plain",
"key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt",
- "sync": true
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -84739,28 +90540,51 @@
}
},
{
- "at": "/headers/x-ms-requires-sync",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "true"
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-content-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-cache-control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
"allow_headers": [
- "x-ms-copy-source-authorization"
+ "x-ms-copy-source-blob-properties"
],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -84780,29 +90604,28 @@
}
},
{
- "at": "/value/copy_status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "success"
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-sync-missing-source",
+ "id": "operations/azure-hns/put-from-url-missing-source",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a Copy Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "purpose": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
"call": {
"key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/absent.txt",
- "sync": true
+ "op": "azure.put_from_url",
+ "source_key": "object-tests/copy/absent.txt"
},
"exchanges": [
{
@@ -84842,16 +90665,24 @@
}
},
{
- "at": "/headers/x-ms-requires-sync",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "true"
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [
- "x-ms-copy-source-authorization"
+ "x-ms-copy-source-blob-properties"
],
"allow_query": [],
"response": {
@@ -84901,18 +90732,17 @@
"refusal": null
},
{
- "id": "operations/azure-hns/copy-pending",
+ "id": "operations/azure-hns/put-from-url-other-account",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a copy that Azure answers as pending with its copy ID, so that a caller can follow it with a HEAD or abort it",
+ "purpose": "Write a block blob with Put Blob From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
],
- "origin": "transient",
- "derived_from": "operations/azure-hns/copy",
"call": {
"key": "object-tests/copy/target.txt",
- "op": "copy",
+ "op": "azure.put_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
"source_key": "object-tests/copy/source.txt"
},
"exchanges": [
@@ -84949,22 +90779,39 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-blob-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "BlockBlob"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "x-ms-copy-source-blob-properties"
+ ],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 201,
"headers": {
"date": {
"from": "now"
},
"etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "pending"
+ "x-ms-request-server-encrypted": "true"
},
"body": {
"encoding": "empty"
@@ -84984,37 +90831,30 @@
}
},
{
- "at": "/value/copy_status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "pending"
- }
- },
- {
- "at": "/value/copy_id",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
+ "value": "\"fixture-etag\""
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/copy-content-properties",
+ "id": "operations/azure-hns/abort-copy",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Copy a blob with a content type, which Copy Blob ignores: the copy keeps the source's content properties. A client may send it, or refuse or decline the parameter",
+ "purpose": "Abort a pending copy by its copy ID, with x-ms-copy-action: abort",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
],
+ "origin": "transient",
+ "derived_from": "operations/azure-hns/abort-copy-finished",
"call": {
- "content_type": "text/plain",
+ "copy_id": "fixture-copy-id",
"key": "object-tests/copy/target.txt",
- "op": "copy",
- "source_key": "object-tests/copy/source.txt"
+ "op": "azure.abort_copy"
},
"exchanges": [
{
@@ -85046,34 +90886,38 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/comp",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "copy"
}
},
{
- "at": "/headers/x-ms-blob-content-type",
+ "at": "/query/copyid",
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain"
+ "value": "fixture-copy-id"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "abort"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 202,
+ "status": 204,
"headers": {
"date": {
"from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-copy-id": "fixture-copy-id",
- "x-ms-copy-status": "success"
+ }
},
"body": {
"encoding": "empty"
@@ -85091,56 +90935,22 @@
"is": "equal",
"value": "ok"
}
- },
- {
- "at": "/value/copy_status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "success"
- }
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "content_type"
- }
- }
- ],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/azure-hns/put-from-url",
+ "id": "operations/azure-hns/abort-copy-finished",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Write a block blob from the bytes at a URL with Put Blob From URL: a PUT with x-ms-blob-type: BlockBlob, x-ms-copy-source and no body, which answers once it is written",
+ "purpose": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
],
"call": {
+ "copy_id": "fixture-copy-id",
"key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/source.txt"
+ "op": "azure.abort_copy"
},
"exchanges": [
{
@@ -85172,39 +90982,44 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/comp",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ "is": "equal",
+ "value": "copy"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/copyid",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "fixture-copy-id"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-action",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "abort"
}
}
],
- "allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 409,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "NoPendingCopyOperation"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "NoPendingCopyOperationFixture error"
}
}
}
@@ -85217,34 +91032,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-etag\""
+ "value": 409
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "NoPendingCopyOperation"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-from-url-content-properties",
+ "id": "operations/azure-hns/get-page-ranges",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Write a block blob from a URL with content properties of its own, sent as x-ms-blob-content-type and x-ms-blob-cache-control. Put Blob From URL stores them in place of the source's",
+ "purpose": "List the written ranges of a page blob, which an HNS account does not support",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/get-page-ranges"
],
"call": {
- "cache_control": "max-age=3600",
- "content_type": "text/plain",
- "key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/source.txt"
+ "key": "object-tests/pages/object.vhd",
+ "op": "azure.get_page_ranges"
},
"exchanges": [
{
@@ -85256,7 +91076,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PUT"
+ "value": "GET"
}
},
{
@@ -85264,7 +91084,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
@@ -85276,55 +91096,28 @@
}
},
{
- "at": "/headers/x-ms-copy-source",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
- }
- },
- {
- "at": "/headers/x-ms-blob-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "BlockBlob"
- }
- },
- {
- "at": "/headers/x-ms-blob-content-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "text/plain"
- }
- },
- {
- "at": "/headers/x-ms-blob-cache-control",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "max-age=3600"
+ "value": "pagelist"
}
}
],
- "allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 201,
+ "status": 409,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-request-server-encrypted": "true"
+ "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
}
}
}
@@ -85337,32 +91130,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-etag\""
+ "value": 409
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/put-from-url-missing-source",
+ "id": "operations/azure-hns/upload-pages-unaligned",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report a Put Blob From URL whose source does not exist as an error. Azure answers 404 CannotVerifyCopySource, a code of its own, not BlobNotFound",
+ "purpose": "Refuse a page write that does not start on a 512-byte boundary, which an HNS account does not support",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
],
"call": {
- "key": "object-tests/copy/target.txt",
- "op": "azure.put_from_url",
- "source_key": "object-tests/copy/absent.txt"
+ "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
+ "key": "object-tests/pages/object.vhd",
+ "offset": 1,
+ "op": "azure.upload_pages"
},
"exchanges": [
{
@@ -85382,7 +91184,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
@@ -85390,43 +91192,48 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
}
},
{
- "at": "/headers/x-ms-copy-source",
+ "at": "/query/comp",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "https?://[^/]+/fixture/object-tests/copy/absent\\.txt"
+ "is": "equal",
+ "value": "page"
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
"is": "equal",
- "value": "BlockBlob"
+ "value": "update"
+ }
+ },
+ {
+ "at": "/headers/x-ms-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=1-512"
}
}
],
- "allow_headers": [
- "x-ms-copy-source-authorization",
- "x-ms-copy-source-blob-properties"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "CannotVerifyCopySource"
+ "x-ms-error-code": "InvalidHeaderValue"
},
"body": {
"encoding": "utf8",
- "data": "CannotVerifyCopySourceFixture error"
+ "data": "InvalidHeaderValueFixture error"
}
}
}
@@ -85447,7 +91254,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": 400
}
},
{
@@ -85455,26 +91262,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "CannotVerifyCopySource"
+ "value": "InvalidHeaderValue"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/abort-copy",
+ "id": "operations/azure-hns/upload-pages",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Abort a pending copy by its copy ID, with x-ms-copy-action: abort",
+ "purpose": "Write the first page of a page blob, which an HNS account does not support",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
],
- "origin": "transient",
- "derived_from": "operations/azure-hns/abort-copy-finished",
"call": {
- "copy_id": "fixture-copy-id",
- "key": "object-tests/copy/target.txt",
- "op": "azure.abort_copy"
+ "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
+ "key": "object-tests/pages/object.vhd",
+ "offset": 0,
+ "op": "azure.upload_pages"
},
"exchanges": [
{
@@ -85494,7 +91300,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
@@ -85502,7 +91308,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
}
},
{
@@ -85510,37 +91316,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "copy"
+ "value": "page"
}
},
{
- "at": "/query/copyid",
+ "at": "/headers/x-ms-page-write",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
+ "value": "update"
}
},
{
- "at": "/headers/x-ms-copy-action",
+ "at": "/headers/x-ms-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "abort"
+ "value": "bytes=0-511"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 409,
"headers": {
+ "content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
},
"body": {
- "encoding": "empty"
+ "encoding": "utf8",
+ "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
}
}
}
@@ -85553,24 +91362,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 409
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/abort-copy-finished",
+ "id": "operations/azure-hns/create-page",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Report an abort of a copy that has finished as an error, 409 NoPendingCopyOperation",
+ "purpose": "Create a page blob of 1,024 bytes, which an HNS account does not support",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
],
"call": {
- "copy_id": "fixture-copy-id",
- "key": "object-tests/copy/target.txt",
- "op": "azure.abort_copy"
+ "key": "object-tests/pages/object.vhd",
+ "op": "azure.create_page",
+ "size": 1024
},
"exchanges": [
{
@@ -85590,7 +91415,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/copy/target.txt"
+ "value": "/fixture/object-tests/pages/object.vhd"
}
},
{
@@ -85602,27 +91427,19 @@
}
},
{
- "at": "/query/comp",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "copy"
- }
- },
- {
- "at": "/query/copyid",
+ "at": "/headers/x-ms-blob-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-copy-id"
+ "value": "PageBlob"
}
},
{
- "at": "/headers/x-ms-copy-action",
+ "at": "/headers/x-ms-blob-content-length",
"optional": false,
"rule": {
"is": "equal",
- "value": "abort"
+ "value": "1024"
}
}
],
@@ -85635,11 +91452,11 @@
"date": {
"from": "now"
},
- "x-ms-error-code": "NoPendingCopyOperation"
+ "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
},
"body": {
"encoding": "utf8",
- "data": "NoPendingCopyOperationFixture error"
+ "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
}
}
}
@@ -85668,23 +91485,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "NoPendingCopyOperation"
+ "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/get-page-ranges",
+ "id": "operations/azure-hns/append-block-to-block-blob",
"profile": "azure-hns",
"lane": "core",
- "purpose": "List the written ranges of a page blob, which an HNS account does not support",
+ "purpose": "Refuse an append to a block blob",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/get-page-ranges"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "key": "object-tests/pages/object.vhd",
- "op": "azure.get_page_ranges"
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -85696,7 +91514,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "PUT"
}
},
{
@@ -85704,7 +91522,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
@@ -85712,7 +91530,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "c2Vjb25k"
}
},
{
@@ -85720,7 +91538,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "pagelist"
+ "value": "appendblock"
}
}
],
@@ -85733,11 +91551,11 @@
"date": {
"from": "now"
},
- "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "x-ms-error-code": "InvalidBlobType"
},
"body": {
"encoding": "utf8",
- "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
+ "data": "InvalidBlobTypeFixture error"
}
}
}
@@ -85766,25 +91584,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "value": "InvalidBlobType"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/upload-pages-unaligned",
+ "id": "operations/azure-hns/append-block-at-wrong-position",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Refuse a page write that does not start on a 512-byte boundary, which an HNS account does not support",
+ "purpose": "Refuse an append whose position condition does not match the blob length",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
- "key": "object-tests/pages/object.vhd",
- "offset": 1,
- "op": "azure.upload_pages"
+ "append_position": 0,
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -85804,7 +91622,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
@@ -85812,7 +91630,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
+ "value": "c2Vjb25k"
}
},
{
@@ -85820,40 +91638,32 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "page"
- }
- },
- {
- "at": "/headers/x-ms-page-write",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "update"
+ "value": "appendblock"
}
},
{
- "at": "/headers/x-ms-range",
+ "at": "/headers/x-ms-blob-condition-appendpos",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=1-512"
+ "value": "0"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "InvalidHeaderValue"
+ "x-ms-error-code": "AppendPositionConditionNotMet"
},
"body": {
"encoding": "utf8",
- "data": "InvalidHeaderValueFixture error"
+ "data": "AppendPositionConditionNotMetFixture error"
}
}
}
@@ -85874,7 +91684,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 412
}
},
{
@@ -85882,25 +91692,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidHeaderValue"
+ "value": "AppendPositionConditionNotMet"
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/upload-pages",
+ "id": "operations/azure-hns/append-block",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Write the first page of a page blob, which an HNS account does not support",
+ "purpose": "Append a block to an append blob and report its offset",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-page"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
],
"call": {
- "body_base64": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA=",
- "key": "object-tests/pages/object.vhd",
- "offset": 0,
- "op": "azure.upload_pages"
+ "body_base64": "c2Vjb25k",
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block"
},
"exchanges": [
{
@@ -85920,7 +91729,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
@@ -85928,7 +91737,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHA="
+ "value": "c2Vjb25k"
}
},
{
@@ -85936,40 +91745,26 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "page"
- }
- },
- {
- "at": "/headers/x-ms-page-write",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "update"
- }
- },
- {
- "at": "/headers/x-ms-range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=0-511"
+ "value": "appendblock"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
+ "encoding": "empty"
}
}
}
@@ -85982,40 +91777,40 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/append_offset",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 5
}
},
{
- "at": "/code",
+ "at": "/value/committed_block_count",
"optional": false,
"rule": {
"is": "equal",
- "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "value": 2
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/create-page",
+ "id": "operations/azure-hns/append-block-from-url",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Create a page blob of 1,024 bytes, which an HNS account does not support",
+ "purpose": "Append the bytes at a URL to an append blob with Append Block From URL: a PUT with comp=appendblock, x-ms-copy-source and no body. Report the offset the block starts at",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
],
"call": {
- "key": "object-tests/pages/object.vhd",
- "op": "azure.create_page",
- "size": 1024
+ "key": "object-tests/append/object.log",
+ "op": "azure.append_block_from_url",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -86035,7 +91830,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/fixture/object-tests/pages/object.vhd"
+ "value": "/fixture/object-tests/append/object.log"
}
},
{
@@ -86047,36 +91842,46 @@
}
},
{
- "at": "/headers/x-ms-blob-type",
+ "at": "/query/comp",
"optional": false,
"rule": {
"is": "equal",
- "value": "PageBlob"
+ "value": "appendblock"
}
},
{
- "at": "/headers/x-ms-blob-content-length",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "1024"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 409,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "FeatureNotYetSupportedForHierarchicalNamespaceAccountsFixture error"
+ "encoding": "empty"
}
}
}
@@ -86089,40 +91894,44 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/append_offset",
"optional": false,
"rule": {
"is": "equal",
- "value": 409
+ "value": 5
}
},
{
- "at": "/code",
+ "at": "/value/committed_block_count",
"optional": false,
"rule": {
"is": "equal",
- "value": "FeatureNotYetSupportedForHierarchicalNamespaceAccounts"
+ "value": 2
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/append-block-to-block-blob",
+ "id": "operations/azure-hns/append-block-from-url-range",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Refuse an append to a block blob",
+ "purpose": "Append bytes 1 to 3 at a URL with Append Block From URL, the range named in x-ms-source-range with an inclusive end, as bytes=1-3",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
],
"call": {
- "body_base64": "c2Vjb25k",
"key": "object-tests/append/object.log",
- "op": "azure.append_block"
+ "op": "azure.append_block_from_url",
+ "source_key": "object-tests/copy/source.txt",
+ "source_range": {
+ "end": 4,
+ "start": 1
+ }
},
"exchanges": [
{
@@ -86150,7 +91959,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
@@ -86160,130 +91969,48 @@
"is": "equal",
"value": "appendblock"
}
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 409,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- },
- "x-ms-error-code": "InvalidBlobType"
},
- "body": {
- "encoding": "utf8",
- "data": "InvalidBlobTypeFixture error"
- }
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 409
- }
- },
- {
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidBlobType"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/azure-hns/append-block-at-wrong-position",
- "profile": "azure-hns",
- "lane": "core",
- "purpose": "Refuse an append whose position condition does not match the blob length",
- "sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
- ],
- "call": {
- "append_position": 0,
- "body_base64": "c2Vjb25k",
- "key": "object-tests/append/object.log",
- "op": "azure.append_block"
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
{
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "PUT"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/fixture/object-tests/append/object.log"
- }
- },
- {
- "at": "/body_base64",
+ "at": "/headers/x-ms-copy-source",
"optional": false,
"rule": {
- "is": "equal",
- "value": "c2Vjb25k"
+ "is": "matches",
+ "pattern": "https?://[^/]+/fixture/object-tests/copy/source\\.txt"
}
},
{
- "at": "/query/comp",
+ "at": "/headers/x-ms-source-range",
"optional": false,
"rule": {
"is": "equal",
- "value": "appendblock"
+ "value": "bytes=1-3"
}
},
{
- "at": "/headers/x-ms-blob-condition-appendpos",
- "optional": false,
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "0"
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
}
}
],
"allow_headers": [],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 201,
"headers": {
- "content-type": "application/xml",
"date": {
"from": "now"
},
- "x-ms-error-code": "AppendPositionConditionNotMet"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-blob-append-offset": "5",
+ "x-ms-blob-committed-block-count": "2",
+ "x-ms-request-server-encrypted": "true"
},
"body": {
- "encoding": "utf8",
- "data": "AppendPositionConditionNotMetFixture error"
+ "encoding": "empty"
}
}
}
@@ -86296,40 +92023,41 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/append_offset",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": 5
}
},
{
- "at": "/code",
+ "at": "/value/committed_block_count",
"optional": false,
"rule": {
"is": "equal",
- "value": "AppendPositionConditionNotMet"
+ "value": 2
}
}
],
"refusal": null
},
{
- "id": "operations/azure-hns/append-block",
+ "id": "operations/azure-hns/append-block-from-url-other-account",
"profile": "azure-hns",
"lane": "core",
- "purpose": "Append a block to an append blob and report its offset",
+ "purpose": "Append a block with Append Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block"
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/append-block-from-url"
],
"call": {
- "body_base64": "c2Vjb25k",
"key": "object-tests/append/object.log",
- "op": "azure.append_block"
+ "op": "azure.append_block_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt"
},
"exchanges": [
{
@@ -86357,7 +92085,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "c2Vjb25k"
+ "value": ""
}
},
{
@@ -86367,6 +92095,22 @@
"is": "equal",
"value": "appendblock"
}
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
}
],
"allow_headers": [],
@@ -93925,11 +99669,153 @@
"is": "equal",
"value": "bytes=0-2"
}
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
}
],
"allow_headers": [
- "content-type",
- "x-ms-copy-source-authorization"
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 201,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-creation-time": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-ms-request-server-encrypted": "true"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/azure-hns/stage-from-url-other-account",
+ "profile": "azure-hns",
+ "lane": "core",
+ "purpose": "Stage a block with Put Block From URL from another storage account, which x-ms-copy-source names by that account's URL. Within one tenant, Azure reads the source as the caller, so a bearer token in x-ms-copy-source-authorization is optional",
+ "sources": [
+ "https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-from-url"
+ ],
+ "call": {
+ "block_id_base64": "MDAwMDAy",
+ "key": "object-tests/multipart/staged.bin",
+ "op": "azure.stage_block_from_url",
+ "source_account_url": "https://fixtureother.blob.core.windows.net",
+ "source_key": "object-tests/copy/source.txt",
+ "source_range": {
+ "end": 3,
+ "start": 0
+ }
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PUT"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/multipart/staged.bin"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/comp",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "block"
+ }
+ },
+ {
+ "at": "/query/blockid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDAwMDAy"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "https://fixtureother\\.blob\\.core\\.windows\\.net/fixture/object-tests/copy/source\\.txt"
+ }
+ },
+ {
+ "at": "/headers/x-ms-source-range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-2"
+ }
+ },
+ {
+ "at": "/headers/x-ms-copy-source-authorization",
+ "optional": true,
+ "rule": {
+ "is": "matches",
+ "pattern": "Bearer [^ ]+"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
],
"allow_query": [],
"response": {
@@ -112278,6 +118164,156 @@
],
"refusal": null
},
+ {
+ "id": "operations/s3/get-checksum-range",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "Read part of an object with checksum mode. S3 sends no checksum for a range that does not cover the whole object, so a client reads it without one, and reports none. x-amz-checksum-mode may be sent or left out",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
+ ],
+ "call": {
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 6,
+ "start": 2
+ }
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=2-5"
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 2-5/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MjM0NQ=="
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ad03f2ab332a\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 4
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MjM0NQ=="
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "refusal": null
+ },
{
"id": "operations/s3/get-replaced",
"profile": "s3",
@@ -113247,18 +119283,575 @@
],
"allow_query": [],
"response": {
- "status": 403,
+ "status": 403,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nInvalidAccessKeyIdFixture error"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 403
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidAccessKeyId"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/get-whole",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "get whole",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/read/object.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ad03f2ab332a\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/get-checksum",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "Read an object with x-amz-checksum-mode: ENABLED, which makes S3 send the object's stored checksum, here CRC32, in x-amz-checksum-crc32 with x-amz-checksum-type: FULL_OBJECT. A range that covers the whole object gets it too. Check the body against it, and report it",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
+ ],
+ "call": {
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc32": "zYbXEQ==",
+ "x-amz-checksum-type": "FULL_OBJECT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc32": "zYbXEQ==",
+ "x-amz-checksum-type": "FULL_OBJECT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ad03f2ab332a\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc32",
+ "type": "full_object",
+ "value_base64": "zYbXEQ=="
+ }
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/get-checksum-default",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "Read with x-amz-checksum-mode: ENABLED an object written without a checksum. S3 stores a CRC64NVME for every new object and sends it, so a client checks CRC64NVME too",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
+ ],
+ "call": {
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
- "encoding": "utf8",
- "data": "\nInvalidAccessKeyIdFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
}
}
]
@@ -113270,37 +119863,80 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 403
+ "value": "\"fixture-ad03f2ab332a\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidAccessKeyId"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc64nvme",
+ "type": "full_object",
+ "value_base64": "efafnZ4dTjo="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/s3/get-whole",
+ "id": "operations/s3/get-checksum-mismatch",
"profile": "s3",
"lane": "core",
- "purpose": "get whole",
+ "purpose": "Report a body that does not match the checksum S3 sent for it as an error of kind checksum_mismatch, not as the object",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
+ "origin": "constructed",
+ "derived_from": "operations/s3/get-checksum-default",
"call": {
+ "checksum_mode": true,
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -113332,6 +119968,14 @@
"is": "equal",
"value": ""
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -113346,11 +119990,13 @@
"from": "now"
},
"etag": "\"fixture-ad03f2ab332a\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWNh"
}
}
},
@@ -113387,6 +120033,14 @@
"is": "matches",
"pattern": "bytes=0-[1-9][0-9]{2,}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -113402,11 +120056,13 @@
"from": "now"
},
"etag": "\"fixture-ad03f2ab332a\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWNh"
}
}
}
@@ -113419,50 +120075,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-ad03f2ab332a\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": "checksum_mismatch"
}
}
],
@@ -118366,6 +124987,143 @@
],
"refusal": null
},
+ {
+ "id": "operations/s3/head-checksum",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "Ask a HEAD for the object's checksum with x-amz-checksum-mode: ENABLED, and report it",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
+ ],
+ "call": {
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
+ "op": "head"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "HEAD"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-length": "30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ad03f2ab332a\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ad03f2ab332a\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc64nvme",
+ "type": "full_object",
+ "value_base64": "efafnZ4dTjo="
+ }
+ }
+ }
+ ],
+ "refusal": null
+ },
{
"id": "operations/s3/restore-version",
"profile": "s3",
@@ -125019,6 +131777,1115 @@
],
"refusal": null
},
+ {
+ "id": "operations/s3/list-uploads",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "List the multipart uploads in progress under a prefix with ListMultipartUploads, a GET with ?uploads, and report each upload's key and upload ID, in key order",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
+ ],
+ "call": {
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000falseobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Zobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000urlfalseobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Zobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/uploads",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/uploads/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/a.bin"
+ }
+ },
+ {
+ "at": "/value/uploads/0/upload_id",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-upload-a"
+ }
+ },
+ {
+ "at": "/value/uploads/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/b.bin"
+ }
+ },
+ {
+ "at": "/value/uploads/1/upload_id",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-upload-b"
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/is_truncated",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": false
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/list-uploads-page",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "List one upload a page with max-uploads=1. A truncated page names the next page's start in NextKeyMarker and NextUploadIdMarker, which a client reports",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
+ ],
+ "call": {
+ "op": "s3.list_uploads",
+ "page_size": 1,
+ "prefix": "object-tests/uploads/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/query/max-uploads",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/a.binfixture-upload-aobject-tests/uploads/1trueobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/query/max-uploads",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/a.binfixture-upload-aobject-tests/uploads/1urltrueobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/uploads",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/uploads/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/a.bin"
+ }
+ },
+ {
+ "at": "/value/uploads/0/upload_id",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-upload-a"
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/is_truncated",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": true
+ }
+ },
+ {
+ "at": "/value/next_key_marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/a.bin"
+ }
+ },
+ {
+ "at": "/value/next_upload_id_marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-upload-a"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/list-uploads-after-key",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "List the uploads after a key, named in key-marker: the uploads of that key are left out",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
+ ],
+ "call": {
+ "key_marker": "object-tests/uploads/a.bin",
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/query/key-marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/a.bin"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/a.binobject-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000falseobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/query/key-marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/a.bin"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/a.binobject-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000urlfalseobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorfixture-ownerSTANDARD2024-01-01T00:00:00.000Z"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/uploads",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/uploads/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/b.bin"
+ }
+ },
+ {
+ "at": "/value/uploads/0/upload_id",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-upload-b"
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/is_truncated",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": false
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/list-uploads-delimited",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "List uploads with delimiter=/: the uploads under a deeper prefix are reported as that common prefix",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
+ ],
+ "call": {
+ "delimiter": "/",
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture/object-tests/1000falseobject-tests/uploads/"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/"
+ }
+ },
+ {
+ "at": "/query/delimiter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture/object-tests/1000urlfalseobject-tests/uploads/"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/uploads",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/prefixes/0",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/value/is_truncated",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": false
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3/list-uploads-none",
+ "profile": "s3",
+ "lane": "core",
+ "purpose": "List a prefix with no upload in progress: an empty list, not an error",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
+ ],
+ "call": {
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/1000false"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/fixture"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ },
+ {
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/uploads/"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/uploads/1000urlfalse"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/uploads",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/is_truncated",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": false
+ }
+ }
+ ],
+ "refusal": null
+ },
{
"id": "operations/s3/list-versions-unversioned",
"profile": "s3",
@@ -165739,11 +173606,1457 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "then": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "POST"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_text",
+ "optional": false,
+ "rule": {
+ "is": "xml",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/delete",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/x-amz-checksum-crc64nvme",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "[A-Za-z0-9+/]{11}="
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "",
+ "optional": false,
+ "rule": {
+ "is": "body_checksum",
+ "header": "x-amz-checksum-crc64nvme",
+ "algorithm": "crc64nvme"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 400,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nMalformedXMLFixture error"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MalformedXML"
+ }
+ }
+ ],
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "keys"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "MalformedXML"
+ }
+ }
+ ]
+ },
+ {
+ "id": "operations/s3-express/delete-slow-down",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report a 503 SlowDown answer as an error, after at most 5 retries",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
+ ],
+ "origin": "transient",
+ "call": {
+ "key": "object-tests/remove/present.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/present.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 503
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "SlowDown"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/delete-if-match-current",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "delete if match current",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "if_match": "\"fixture-137dbea0e0a1\"",
+ "key": "object-tests/remove/conditional.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/conditional.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-137dbea0e0a1\""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 204,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/delete-missing",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "delete missing",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/remove/absent.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/absent.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 204,
+ "headers": {
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/delete-precondition-failed",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "delete precondition failed",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "if_match": "\"fixture-db71b2c0257c\"",
+ "key": "object-tests/remove/conditional.txt",
+ "op": "delete"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "DELETE"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/remove/conditional.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-db71b2c0257c\""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 412,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nPreconditionFailedFixture error"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 412
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "PreconditionFailed"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/get-before-commit",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "get before commit",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/multipart/object.bin",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/multipart/object.bin"
}
},
{
- "at": "/query/session",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -165758,121 +175071,99 @@
"value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
{
"at": "/headers/authorization",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 404,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nNoSuchKeyFixture error"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/multipart/object.bin"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
"at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "absent"
+ "is": "equal",
+ "value": "fixture-session-token"
}
- }
- ],
- "then": [
+ },
{
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "POST"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
- }
- },
- {
- "at": "/body_text",
- "optional": false,
- "rule": {
- "is": "xml",
- "value": ""
- }
- },
- {
- "at": "/query/delete",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/x-amz-checksum-crc64nvme",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "[A-Za-z0-9+/]{11}="
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "",
- "optional": false,
- "rule": {
- "is": "body_checksum",
- "header": "x-amz-checksum-crc64nvme",
- "algorithm": "crc64nvme"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 400,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
- },
- "body": {
- "encoding": "utf8",
- "data": "\nMalformedXMLFixture error"
- },
- "framing": "chunked"
- }
- }
- ]
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
}
],
"allow_headers": [
@@ -165880,18 +175171,18 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-type": "application/xml"
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
},
"body": {
"encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "\nNoSuchKeyFixture error"
},
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
+ "framing": "chunked"
}
}
]
@@ -165911,7 +175202,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 400
+ "value": 404
}
},
{
@@ -165919,65 +175210,26 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MalformedXML"
+ "value": "NoSuchKey"
}
}
],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "keys"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
- }
- },
- {
- "at": "/code",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "MalformedXML"
- }
- }
- ]
+ "refusal": null
},
{
- "id": "operations/s3-express/delete-slow-down",
+ "id": "operations/s3-express/get-committed-tail",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report a 503 SlowDown answer as an error, after at most 5 retries",
+ "purpose": "get committed tail",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
- "origin": "transient",
"call": {
- "key": "object-tests/remove/present.txt",
- "op": "delete"
+ "key": "object-tests/multipart/object.bin",
+ "op": "get",
+ "range": {
+ "suffix": 10
+ }
},
"exchanges": [
{
@@ -166062,7 +175314,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166070,7 +175322,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": "/object-tests/multipart/object.bin"
}
},
{
@@ -166081,6 +175333,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-10"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -166111,48 +175371,46 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 5242876-5242885/5242886",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-ec4f3b9bcac2\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "Y2RlZnNlY29uZA=="
+ }
}
- }
- ]
- },
- {
- "alternatives": [
+ },
{
"request": [
{
- "at": "/method",
+ "at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "/object-tests/multipart/object.bin"
}
},
{
- "at": "/path",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": ""
}
},
{
- "at": "/body_base64",
+ "at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "HEAD"
}
},
{
@@ -166178,6 +175436,108 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-10"
+ }
+ }
+ ],
+ "then": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/multipart/object.bin"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=5242876-5242885"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ec4f3b9bcac2\""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 5242876-5242885/5242886",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-ec4f3b9bcac2\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "Y2RlZnNlY29uZA=="
+ }
+ }
+ }
+ ]
}
],
"allow_headers": [
@@ -166185,22 +175545,165 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-length": "10",
+ "content-range": "bytes 5242876-5242885/5242886",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
+ },
+ "etag": "\"fixture-ec4f3b9bcac2\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "empty"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ec4f3b9bcac2\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 10
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Y2RlZnNlY29uZA=="
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/get-empty",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "get empty",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/write/empty.bin",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
}
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
- ],
- "optional": true
+ ]
},
{
"alternatives": [
@@ -166211,7 +175714,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166219,7 +175722,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": "/object-tests/write/empty.bin"
}
},
{
@@ -166260,25 +175763,21 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-de1997e62b9b\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": ""
+ }
}
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -166286,7 +175785,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166294,7 +175793,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": "/object-tests/write/empty.bin"
}
},
{
@@ -166305,6 +175804,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -166330,28 +175837,188 @@
}
}
],
+ "then": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/write/empty.bin"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/partNumber",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-de1997e62b9b\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": ""
+ }
+ }
+ }
+ ]
+ }
+ ],
"allow_headers": [
"content-type"
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 416,
"headers": {
+ "content-range": "bytes */0",
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-de1997e62b9b\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nInvalidRangeEmpty object0"
},
"framing": "chunked"
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-de1997e62b9b\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
},
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/get-range-of-empty-object",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report a range read of an empty object as 416 InvalidRange: no range of it can be satisfied, not even its first byte",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/write/empty.bin",
+ "op": "get",
+ "range": {
+ "end": 1,
+ "start": 0
+ }
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -166361,7 +176028,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166369,11 +176036,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": "/"
}
},
{
- "at": "/body_base64",
+ "at": "/query/session",
"optional": false,
"rule": {
"is": "equal",
@@ -166389,19 +176056,18 @@
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/authorization",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "absent"
}
}
],
@@ -166410,22 +176076,21 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
- ],
- "optional": true
+ ]
},
{
"alternatives": [
@@ -166436,7 +176101,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166444,7 +176109,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/present.txt"
+ "value": "/object-tests/write/empty.bin"
}
},
{
@@ -166478,6 +176143,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-0"
+ }
}
],
"allow_headers": [
@@ -166485,8 +176158,9 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 416,
"headers": {
+ "content-range": "bytes */0",
"content-type": "application/xml",
"date": {
"from": "now"
@@ -166494,13 +176168,12 @@
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nInvalidRangeFixture error"
},
"framing": "chunked"
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -166517,7 +176190,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 503
+ "value": 416
}
},
{
@@ -166525,24 +176198,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "SlowDown"
+ "value": "InvalidRange"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/delete-if-match-current",
+ "id": "operations/s3-express/get-if-match-current",
"profile": "s3-express",
"lane": "core",
- "purpose": "delete if match current",
+ "purpose": "get if match current",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_match": "\"fixture-137dbea0e0a1\"",
- "key": "object-tests/remove/conditional.txt",
- "op": "delete"
+ "if_match": "\"fixture-672b31e65569\"",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -166627,7 +176300,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166635,7 +176308,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/conditional.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -166651,7 +176324,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-137dbea0e0a1\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -166684,16 +176357,106 @@
],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 200,
"headers": {
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -166708,21 +176471,65 @@
"is": "equal",
"value": "ok"
}
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
}
],
"refusal": null
},
{
- "id": "operations/s3-express/delete-missing",
+ "id": "operations/s3-express/get-if-none-match-other",
"profile": "s3-express",
"lane": "core",
- "purpose": "delete missing",
+ "purpose": "get if none match other",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/remove/absent.txt",
- "op": "delete"
+ "if_none_match": "\"fixture-db71b2c0257c\"",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -166807,7 +176614,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "DELETE"
+ "value": "GET"
}
},
{
@@ -166815,7 +176622,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/remove/absent.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -166826,6 +176633,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/if-none-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-db71b2c0257c\""
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -166856,50 +176671,21 @@
],
"allow_query": [],
"response": {
- "status": 204,
+ "status": 200,
"headers": {
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/delete-precondition-failed",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "delete precondition failed",
- "sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
- ],
- "call": {
- "if_match": "\"fixture-db71b2c0257c\"",
- "key": "object-tests/remove/conditional.txt",
- "op": "delete"
- },
- "exchanges": [
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -166915,11 +176701,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
+ "value": "/object-tests/read/object.txt"
}
},
{
- "at": "/query/session",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -166927,84 +176713,19 @@
}
},
{
- "at": "/headers/host",
+ "at": "/headers/if-none-match",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "value": "\"fixture-db71b2c0257c\""
}
},
{
- "at": "/headers/authorization",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "absent"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml"
- },
- "body": {
- "encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
- },
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
- }
- }
- ]
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "DELETE"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/remove/conditional.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-db71b2c0257c\""
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -167037,18 +176758,20 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nPreconditionFailedFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
}
}
]
@@ -167060,38 +176783,65 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-672b31e65569\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "PreconditionFailed"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-before-commit",
+ "id": "operations/s3-express/get-key-with-hash",
"profile": "s3-express",
"lane": "core",
- "purpose": "get before commit",
+ "purpose": "get key with hash",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/multipart/object.bin",
+ "key": "object-tests/names/hash#tag.txt",
"op": "get"
},
"exchanges": [
@@ -167185,7 +176935,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/object.bin"
+ "value": "/object-tests/names/hash#tag.txt"
}
},
{
@@ -167226,18 +176976,19 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-84af5210cfd9\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nNoSuchKeyFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MQ=="
+ }
}
},
{
@@ -167255,7 +177006,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/object.bin"
+ "value": "/object-tests/names/hash#tag.txt"
}
},
{
@@ -167304,18 +177055,20 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-84af5210cfd9\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nNoSuchKeyFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MQ=="
+ }
}
}
]
@@ -167327,42 +177080,66 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-84af5210cfd9\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "NoSuchKey"
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-committed-tail",
+ "id": "operations/s3-express/get-key-with-percent",
"profile": "s3-express",
"lane": "core",
- "purpose": "get committed tail",
+ "purpose": "get key with percent",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/multipart/object.bin",
- "op": "get",
- "range": {
- "suffix": 10
- }
+ "key": "object-tests/names/percent%20.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -167455,7 +177232,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/object.bin"
+ "value": "/object-tests/names/percent%20.txt"
}
},
{
@@ -167466,14 +177243,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=-10"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -167504,30 +177273,37 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 5242876-5242885/5242886",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ec4f3b9bcac2\"",
+ "etag": "\"fixture-a16607f00956\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "Y2RlZnNlY29uZA=="
+ "data": "MQ=="
}
}
},
{
"request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
{
"at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/object.bin"
+ "value": "/object-tests/names/percent%20.txt"
}
},
{
@@ -167539,11 +177315,11 @@
}
},
{
- "at": "/method",
+ "at": "/headers/range",
"optional": false,
"rule": {
- "is": "equal",
- "value": "HEAD"
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -167569,108 +177345,6 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=-10"
- }
- }
- ],
- "then": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/multipart/object.bin"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=5242876-5242885"
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-ec4f3b9bcac2\""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 206,
- "headers": {
- "content-range": "bytes 5242876-5242885/5242886",
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-ec4f3b9bcac2\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": "Y2RlZnNlY29uZA=="
- }
- }
- }
- ]
}
],
"allow_headers": [
@@ -167680,17 +177354,17 @@
"response": {
"status": 206,
"headers": {
- "content-length": "10",
- "content-range": "bytes 5242876-5242885/5242886",
+ "content-range": "bytes 0-0/1",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ec4f3b9bcac2\"",
+ "etag": "\"fixture-a16607f00956\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": "MQ=="
}
}
}
@@ -167711,7 +177385,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-ec4f3b9bcac2\""
+ "value": "\"fixture-a16607f00956\""
}
},
{
@@ -167719,7 +177393,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 10
+ "value": 1
}
},
{
@@ -167746,22 +177420,22 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Y2RlZnNlY29uZA=="
+ "value": "MQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-empty",
+ "id": "operations/s3-express/get-key-with-plus",
"profile": "s3-express",
"lane": "core",
- "purpose": "get empty",
+ "purpose": "get key with plus",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/write/empty.bin",
+ "key": "object-tests/names/plus+plus.txt",
"op": "get"
},
"exchanges": [
@@ -167855,7 +177529,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/write/empty.bin"
+ "value": "/object-tests/names/plus+plus.txt"
}
},
{
@@ -167902,12 +177576,12 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-de1997e62b9b\"",
+ "etag": "\"fixture-1b1e630ad692\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MQ=="
}
}
},
@@ -167926,7 +177600,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/write/empty.bin"
+ "value": "/object-tests/names/plus+plus.txt"
}
},
{
@@ -167970,111 +177644,25 @@
}
}
],
- "then": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/write/empty.bin"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/query/partNumber",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "1"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-de1997e62b9b\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
"allow_headers": [
"content-type"
],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 206,
"headers": {
- "content-range": "bytes */0",
- "content-type": "application/xml",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-de1997e62b9b\"",
+ "etag": "\"fixture-1b1e630ad692\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nInvalidRangeEmpty object0"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MQ=="
+ }
}
}
]
@@ -168094,7 +177682,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-de1997e62b9b\""
+ "value": "\"fixture-1b1e630ad692\""
}
},
{
@@ -168102,7 +177690,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 0
+ "value": 1
}
},
{
@@ -168129,27 +177717,23 @@
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-range-of-empty-object",
+ "id": "operations/s3-express/get-key-with-space",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report a range read of an empty object as 416 InvalidRange: no range of it can be satisfied, not even its first byte",
+ "purpose": "get key with space",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/write/empty.bin",
- "op": "get",
- "range": {
- "end": 1,
- "start": 0
- }
+ "key": "object-tests/names/space name.txt",
+ "op": "get"
},
"exchanges": [
{
@@ -168242,7 +177826,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/write/empty.bin"
+ "value": "/object-tests/names/space name.txt"
}
},
{
@@ -168276,13 +177860,84 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-d614f09fca44\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MQ=="
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/names/space name.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
},
{
"at": "/headers/range",
"optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
"rule": {
"is": "equal",
- "value": "bytes=0-0"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
@@ -168291,19 +177946,20 @@
],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 206,
"headers": {
- "content-range": "bytes */0",
- "content-type": "application/xml",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-d614f09fca44\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nInvalidRangeFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MQ=="
+ }
}
}
]
@@ -168315,39 +177971,65 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 416
+ "value": "\"fixture-d614f09fca44\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidRange"
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-if-match-current",
+ "id": "operations/s3-express/get-key-with-question",
"profile": "s3-express",
"lane": "core",
- "purpose": "get if match current",
+ "purpose": "get key question",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
"call": {
- "if_match": "\"fixture-672b31e65569\"",
- "key": "object-tests/read/object.txt",
+ "key": "a?b",
"op": "get"
},
"exchanges": [
@@ -168441,7 +178123,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/a?b"
}
},
{
@@ -168453,11 +178135,15 @@
}
},
{
- "at": "/headers/if-match",
- "optional": false,
+ "at": "/headers/content-type",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -168485,23 +178171,22 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "aGVsbG8="
}
}
},
@@ -168520,7 +178205,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/a?b"
}
},
{
@@ -168532,11 +178217,15 @@
}
},
{
- "at": "/headers/if-match",
- "optional": false,
+ "at": "/headers/content-type",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -168572,24 +178261,23 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 0-4/5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "aGVsbG8="
}
}
}
@@ -168605,63 +178293,27 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": "aGVsbG8="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-if-none-match-other",
+ "id": "operations/s3-express/get-key-with-non-ascii",
"profile": "s3-express",
"lane": "core",
- "purpose": "get if none match other",
+ "purpose": "get key unicode",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
"call": {
- "if_none_match": "\"fixture-db71b2c0257c\"",
- "key": "object-tests/read/object.txt",
+ "key": "café/雪",
"op": "get"
},
"exchanges": [
@@ -168755,7 +178407,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/café/雪"
}
},
{
@@ -168767,11 +178419,15 @@
}
},
{
- "at": "/headers/if-none-match",
- "optional": false,
+ "at": "/headers/content-type",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "\"fixture-db71b2c0257c\""
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -168799,23 +178455,22 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "aGVsbG8="
}
}
},
@@ -168834,7 +178489,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/café/雪"
}
},
{
@@ -168846,11 +178501,15 @@
}
},
{
- "at": "/headers/if-none-match",
- "optional": false,
+ "at": "/headers/content-type",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "\"fixture-db71b2c0257c\""
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -168886,24 +178545,23 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 0-4/5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "aGVsbG8="
}
}
}
@@ -168919,62 +178577,27 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": "aGVsbG8="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-hash",
+ "id": "operations/s3-express/get-key-with-separators",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key with hash",
+ "purpose": "get key separators",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
"call": {
- "key": "object-tests/names/hash#tag.txt",
+ "key": "a//b/",
"op": "get"
},
"exchanges": [
@@ -169068,7 +178691,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/hash#tag.txt"
+ "value": "/a//b/"
}
},
{
@@ -169079,6 +178702,18 @@
"value": ""
}
},
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -169104,23 +178739,22 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-84af5210cfd9\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "aGVsbG8="
}
}
},
@@ -169139,7 +178773,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/hash#tag.txt"
+ "value": "/a//b/"
}
},
{
@@ -169150,6 +178784,18 @@
"value": ""
}
},
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
{
"at": "/headers/range",
"optional": false,
@@ -169183,24 +178829,23 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/1",
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 0-4/5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-84af5210cfd9\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "aGVsbG8="
}
}
}
@@ -169216,62 +178861,27 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-84af5210cfd9\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "aGVsbG8="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-percent",
+ "id": "operations/s3-express/get-metadata-empty-value",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key with percent",
+ "purpose": "get metadata empty value",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/names/percent%20.txt",
+ "key": "object-tests/metadata/empty-value.txt",
"op": "get"
},
"exchanges": [
@@ -169365,7 +178975,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/percent%20.txt"
+ "value": "/object-tests/metadata/empty-value.txt"
}
},
{
@@ -169412,8 +179022,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-a16607f00956\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-e6096f6fd1ec\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-empty": ""
},
"body": {
"encoding": "base64",
@@ -169436,7 +179047,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/percent%20.txt"
+ "value": "/object-tests/metadata/empty-value.txt"
}
},
{
@@ -169492,8 +179103,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-a16607f00956\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-e6096f6fd1ec\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-empty": ""
},
"body": {
"encoding": "base64",
@@ -169518,7 +179130,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-a16607f00956\""
+ "value": "\"fixture-e6096f6fd1ec\""
}
},
{
@@ -169548,6 +179160,14 @@
]
}
},
+ {
+ "at": "/value/metadata/empty",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
@@ -169560,15 +179180,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-plus",
+ "id": "operations/s3-express/get-metadata-hyphen-name",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key with plus",
+ "purpose": "get metadata hyphen name",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/names/plus+plus.txt",
+ "key": "object-tests/metadata/hyphen-name.txt",
"op": "get"
},
"exchanges": [
@@ -169662,7 +179282,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/plus+plus.txt"
+ "value": "/object-tests/metadata/hyphen-name.txt"
}
},
{
@@ -169709,8 +179329,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-1b1e630ad692\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-adae183ea4af\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-not-valid": "1"
},
"body": {
"encoding": "base64",
@@ -169733,7 +179354,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/plus+plus.txt"
+ "value": "/object-tests/metadata/hyphen-name.txt"
}
},
{
@@ -169789,8 +179410,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-1b1e630ad692\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-adae183ea4af\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-not-valid": "1"
},
"body": {
"encoding": "base64",
@@ -169815,7 +179437,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-1b1e630ad692\""
+ "value": "\"fixture-adae183ea4af\""
}
},
{
@@ -169845,6 +179467,14 @@
]
}
},
+ {
+ "at": "/value/metadata/not-valid",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "1"
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
@@ -169857,15 +179487,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-space",
+ "id": "operations/s3-express/get-metadata-punctuation-name",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key with space",
+ "purpose": "Report a metadata name that holds any character of an HTTP token.",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/names/space name.txt",
+ "key": "object-tests/metadata/punctuation-name.txt",
"op": "get"
},
"exchanges": [
@@ -169959,7 +179589,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/space name.txt"
+ "value": "/object-tests/metadata/punctuation-name.txt"
}
},
{
@@ -170006,8 +179636,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-d614f09fca44\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-adae183ea4af\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-1a!#$%&'*+.^_`|~b": "1"
},
"body": {
"encoding": "base64",
@@ -170030,7 +179661,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/names/space name.txt"
+ "value": "/object-tests/metadata/punctuation-name.txt"
}
},
{
@@ -170086,8 +179717,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-d614f09fca44\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-adae183ea4af\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-1a!#$%&'*+.^_`|~b": "1"
},
"body": {
"encoding": "base64",
@@ -170112,7 +179744,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-d614f09fca44\""
+ "value": "\"fixture-adae183ea4af\""
}
},
{
@@ -170149,20 +179781,30 @@
"is": "equal",
"value": "MQ=="
}
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "1a!#$%&'*+.^_`|~b": "1"
+ }
+ }
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-question",
+ "id": "operations/s3-express/get-metadata-non-ascii-value",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key question",
+ "purpose": "A directory bucket returns an RFC 2047 encoded word as it was stored. A client that encodes on a write decodes it to é; one that keeps metadata to ASCII returns it as stored.",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "a?b",
+ "key": "object-tests/metadata/non-ascii.txt",
"op": "get"
},
"exchanges": [
@@ -170256,7 +179898,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/a?b"
+ "value": "/object-tests/metadata/non-ascii.txt"
}
},
{
@@ -170267,18 +179909,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -170304,22 +179934,24 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?Q?caf=C3=A9?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
},
@@ -170338,7 +179970,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/a?b"
+ "value": "/object-tests/metadata/non-ascii.txt"
}
},
{
@@ -170349,18 +179981,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/range",
"optional": false,
@@ -170394,23 +180014,25 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-4/5",
- "content-type": "application/octet-stream",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?Q?caf=C3=A9?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
}
@@ -170426,27 +180048,77 @@
"value": "ok"
}
},
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-adae183ea4af\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": "MQ=="
+ }
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ {
+ "value": "café"
+ },
+ {
+ "value": "=?UTF-8?Q?caf=C3=A9?="
+ }
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-non-ascii",
+ "id": "operations/s3-express/get-metadata-outside-latin-1",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key unicode",
+ "purpose": "A directory bucket returns a base64 RFC 2047 encoded word as it was stored. A client that encodes on a write decodes it to 雪; one that keeps metadata to ASCII returns it as stored.",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "café/雪",
+ "key": "object-tests/metadata/outside-latin-1.txt",
"op": "get"
},
"exchanges": [
@@ -170540,7 +180212,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/café/雪"
+ "value": "/object-tests/metadata/outside-latin-1.txt"
}
},
{
@@ -170551,18 +180223,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -170588,22 +180248,24 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?B?6Zuq?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
},
@@ -170622,7 +180284,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/café/雪"
+ "value": "/object-tests/metadata/outside-latin-1.txt"
}
},
{
@@ -170633,18 +180295,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/range",
"optional": false,
@@ -170678,23 +180328,25 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-4/5",
- "content-type": "application/octet-stream",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?B?6Zuq?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
}
@@ -170710,27 +180362,77 @@
"value": "ok"
}
},
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-adae183ea4af\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": "MQ=="
+ }
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ {
+ "value": "雪"
+ },
+ {
+ "value": "=?UTF-8?B?6Zuq?="
+ }
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-key-with-separators",
+ "id": "operations/s3-express/get-metadata-split-encoded-words",
"profile": "s3-express",
"lane": "core",
- "purpose": "get key separators",
+ "purpose": "Decode a long metadata value that a directory bucket returns as one encoded word",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "a//b/",
+ "key": "object-tests/metadata/split-encoded-words.txt",
"op": "get"
},
"exchanges": [
@@ -170824,7 +180526,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/a//b/"
+ "value": "/object-tests/metadata/split-encoded-words.txt"
}
},
{
@@ -170835,18 +180537,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -170872,22 +180562,24 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-6c30b210f0a8\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?B?6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
},
@@ -170906,7 +180598,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/a//b/"
+ "value": "/object-tests/metadata/split-encoded-words.txt"
}
},
{
@@ -170917,18 +180609,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/range",
"optional": false,
@@ -170962,23 +180642,25 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-4/5",
- "content-type": "application/octet-stream",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"fixture-6c30b210f0a8\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-meta-value": "=?UTF-8?B?6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq?="
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
+ "data": "MQ=="
}
}
}
@@ -170994,27 +180676,72 @@
"value": "ok"
}
},
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-6c30b210f0a8\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": "MQ=="
+ }
+ },
+ {
+ "at": "/value/metadata",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "value": "雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪"
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-empty-value",
+ "id": "operations/s3-express/get-metadata-malformed-encoded-word",
"profile": "s3-express",
"lane": "core",
- "purpose": "get metadata empty value",
+ "purpose": "Leave a value that only looks like an RFC 2047 encoded word as it is: =ZZ is no hexadecimal byte.",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/empty-value.txt",
+ "key": "object-tests/metadata/malformed-encoded-word.txt",
"op": "get"
},
"exchanges": [
@@ -171108,7 +180835,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/empty-value.txt"
+ "value": "/object-tests/metadata/malformed-encoded-word.txt"
}
},
{
@@ -171155,9 +180882,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-e6096f6fd1ec\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-empty": ""
+ "x-amz-meta-value": "=?UTF-8?Q?caf=ZZ?="
},
"body": {
"encoding": "base64",
@@ -171180,7 +180907,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/empty-value.txt"
+ "value": "/object-tests/metadata/malformed-encoded-word.txt"
}
},
{
@@ -171236,9 +180963,9 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-e6096f6fd1ec\"",
+ "etag": "\"fixture-adae183ea4af\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-empty": ""
+ "x-amz-meta-value": "=?UTF-8?Q?caf=ZZ?="
},
"body": {
"encoding": "base64",
@@ -171263,7 +180990,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-e6096f6fd1ec\""
+ "value": "\"fixture-adae183ea4af\""
}
},
{
@@ -171294,34 +181021,36 @@
}
},
{
- "at": "/value/metadata/empty",
+ "at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "MQ=="
}
},
{
- "at": "/value/body_base64",
+ "at": "/value/metadata",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": {
+ "value": "=?UTF-8?Q?caf=ZZ?="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-hyphen-name",
+ "id": "operations/s3-express/get-metadata-replaced",
"profile": "s3-express",
"lane": "core",
- "purpose": "get metadata hyphen name",
+ "purpose": "get metadata replaced",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/hyphen-name.txt",
+ "key": "object-tests/metadata/replaced.txt",
"op": "get"
},
"exchanges": [
@@ -171415,7 +181144,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/hyphen-name.txt"
+ "value": "/object-tests/metadata/replaced.txt"
}
},
{
@@ -171462,13 +181191,12 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-not-valid": "1"
+ "etag": "\"fixture-8ff37996a1a3\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "Mg=="
}
}
},
@@ -171487,7 +181215,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/hyphen-name.txt"
+ "value": "/object-tests/metadata/replaced.txt"
}
},
{
@@ -171543,13 +181271,12 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-not-valid": "1"
+ "etag": "\"fixture-8ff37996a1a3\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "Mg=="
}
}
}
@@ -171570,7 +181297,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-adae183ea4af\""
+ "value": "\"fixture-8ff37996a1a3\""
}
},
{
@@ -171600,35 +181327,27 @@
]
}
},
- {
- "at": "/value/metadata/not-valid",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "1"
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "Mg=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-punctuation-name",
+ "id": "operations/s3-express/get-metadata",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report a metadata name that holds any character of an HTTP token.",
+ "purpose": "get metadata",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/punctuation-name.txt",
+ "key": "object-tests/metadata/object.txt",
"op": "get"
},
"exchanges": [
@@ -171722,7 +181441,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/punctuation-name.txt"
+ "value": "/object-tests/metadata/object.txt"
}
},
{
@@ -171769,9 +181488,10 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
+ "etag": "\"fixture-ee657e36119d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-1a!#$%&'*+.^_`|~b": "1"
+ "x-amz-meta-name": "value",
+ "x-amz-meta-second": "2"
},
"body": {
"encoding": "base64",
@@ -171794,7 +181514,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/punctuation-name.txt"
+ "value": "/object-tests/metadata/object.txt"
}
},
{
@@ -171850,9 +181570,10 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
+ "etag": "\"fixture-ee657e36119d\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-1a!#$%&'*+.^_`|~b": "1"
+ "x-amz-meta-name": "value",
+ "x-amz-meta-second": "2"
},
"body": {
"encoding": "base64",
@@ -171877,7 +181598,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-adae183ea4af\""
+ "value": "\"fixture-ee657e36119d\""
}
},
{
@@ -171908,36 +181629,42 @@
}
},
{
- "at": "/value/body_base64",
+ "at": "/value/metadata/name",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "value"
}
},
{
- "at": "/value/metadata",
+ "at": "/value/metadata/second",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "1a!#$%&'*+.^_`|~b": "1"
- }
+ "value": "2"
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-non-ascii-value",
+ "id": "operations/s3-express/get-metadata-ignores-unknown-headers",
"profile": "s3-express",
"lane": "core",
- "purpose": "A directory bucket returns an RFC 2047 encoded word as it was stored. A client that encodes on a write decodes it to é; one that keeps metadata to ASCII returns it as stored.",
+ "purpose": "Surface user metadata; unknown headers must not become metadata.",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
"call": {
- "key": "object-tests/metadata/non-ascii.txt",
+ "key": "object",
"op": "get"
},
"exchanges": [
@@ -172031,7 +181758,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/non-ascii.txt"
+ "value": "/object"
}
},
{
@@ -172042,6 +181769,18 @@
"value": ""
}
},
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -172067,24 +181806,24 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?Q?caf=C3=A9?="
+ "x-amz-meta-author": "Ada",
+ "x-amz-request-id": "fixture-request-id",
+ "x-unrelated": "not metadata"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "aGVsbG8="
}
}
},
@@ -172103,7 +181842,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/non-ascii.txt"
+ "value": "/object"
}
},
{
@@ -172114,6 +181853,18 @@
"value": ""
}
},
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
{
"at": "/headers/range",
"optional": false,
@@ -172147,25 +181898,25 @@
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/1",
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 0-4/5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-adae183ea4af\"",
+ "etag": "\"fixture-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?Q?caf=C3=A9?="
+ "x-amz-meta-author": "Ada",
+ "x-amz-request-id": "fixture-request-id",
+ "x-unrelated": "not metadata"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "aGVsbG8="
}
}
}
@@ -172181,77 +181932,37 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-adae183ea4af\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "aGVsbG8="
}
},
{
"at": "/value/metadata",
"optional": false,
"rule": {
- "is": "one_of",
- "values": [
- {
- "value": "café"
- },
- {
- "value": "=?UTF-8?Q?caf=C3=A9?="
- }
- ]
+ "is": "equal",
+ "value": {
+ "author": "Ada"
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-outside-latin-1",
+ "id": "operations/s3-express/get-missing",
"profile": "s3-express",
"lane": "core",
- "purpose": "A directory bucket returns a base64 RFC 2047 encoded word as it was stored. A client that encodes on a write decodes it to 雪; one that keeps metadata to ASCII returns it as stored.",
+ "purpose": "get missing. A client reports it as not_found: the object is absent",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/outside-latin-1.txt",
+ "key": "object-tests/read/absent.txt",
"op": "get"
},
"exchanges": [
@@ -172345,7 +182056,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/outside-latin-1.txt"
+ "value": "/object-tests/read/absent.txt"
}
},
{
@@ -172386,20 +182097,18 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?B?6Zuq?="
+ }
},
"body": {
- "encoding": "base64",
- "data": "MQ=="
- }
+ "encoding": "utf8",
+ "data": "\nNoSuchKeyFixture error"
+ },
+ "framing": "chunked"
}
},
{
@@ -172417,7 +182126,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/outside-latin-1.txt"
+ "value": "/object-tests/read/absent.txt"
}
},
{
@@ -172466,21 +182175,18 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 404,
"headers": {
- "content-range": "bytes 0-0/1",
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?B?6Zuq?="
+ }
},
"body": {
- "encoding": "base64",
- "data": "MQ=="
- }
+ "encoding": "utf8",
+ "data": "\nNoSuchKeyFixture error"
+ },
+ "framing": "chunked"
}
}
]
@@ -172492,80 +182198,47 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-adae183ea4af\""
+ "value": "error"
}
},
{
- "at": "/value/size",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 404
}
},
{
- "at": "/value/content_type",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "NoSuchKey"
}
},
{
- "at": "/value/body_base64",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
- }
- },
- {
- "at": "/value/metadata",
- "optional": false,
- "rule": {
- "is": "one_of",
- "values": [
- {
- "value": "雪"
- },
- {
- "value": "=?UTF-8?B?6Zuq?="
- }
- ]
+ "value": "not_found"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-split-encoded-words",
+ "id": "operations/s3-express/get-not-modified",
"profile": "s3-express",
"lane": "core",
- "purpose": "Decode a long metadata value that a directory bucket returns as one encoded word",
+ "purpose": "get not modified",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/split-encoded-words.txt",
+ "if_none_match": "\"fixture-672b31e65569\"",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -172659,7 +182332,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/split-encoded-words.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -172670,6 +182343,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/if-none-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -172700,19 +182381,16 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 304,
"headers": {
- "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-6c30b210f0a8\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?B?6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq?="
+ "etag": "\"fixture-672b31e65569\""
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": ""
}
}
},
@@ -172731,7 +182409,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/split-encoded-words.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -172742,6 +182420,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/if-none-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
{
"at": "/headers/range",
"optional": false,
@@ -172780,20 +182466,16 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 304,
"headers": {
- "content-range": "bytes 0-0/1",
- "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-6c30b210f0a8\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?B?6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq6Zuq?="
+ "etag": "\"fixture-672b31e65569\""
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": ""
}
}
}
@@ -172806,75 +182488,31 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-6c30b210f0a8\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MQ=="
+ "value": "error"
}
},
{
- "at": "/value/metadata",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "value": "雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪雪"
- }
+ "value": 304
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-malformed-encoded-word",
+ "id": "operations/s3-express/get-precondition-failed",
"profile": "s3-express",
"lane": "core",
- "purpose": "Leave a value that only looks like an RFC 2047 encoded word as it is: =ZZ is no hexadecimal byte.",
+ "purpose": "get precondition failed",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/malformed-encoded-word.txt",
+ "if_match": "\"fixture-db71b2c0257c\"",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -172968,7 +182606,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/malformed-encoded-word.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -172979,6 +182617,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-db71b2c0257c\""
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -173009,20 +182655,18 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?Q?caf=ZZ?="
+ }
},
"body": {
- "encoding": "base64",
- "data": "MQ=="
- }
+ "encoding": "utf8",
+ "data": "\nPreconditionFailedFixture error"
+ },
+ "framing": "chunked"
}
},
{
@@ -173040,7 +182684,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/malformed-encoded-word.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -173051,6 +182695,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-db71b2c0257c\""
+ }
+ },
{
"at": "/headers/range",
"optional": false,
@@ -173089,21 +182741,18 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 412,
"headers": {
- "content-range": "bytes 0-0/1",
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-adae183ea4af\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-value": "=?UTF-8?Q?caf=ZZ?="
+ }
},
"body": {
- "encoding": "base64",
- "data": "MQ=="
- }
+ "encoding": "utf8",
+ "data": "\nPreconditionFailedFixture error"
+ },
+ "framing": "chunked"
}
}
]
@@ -173115,76 +182764,43 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-adae183ea4af\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": 412
}
},
{
- "at": "/value/metadata",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "value": "=?UTF-8?Q?caf=ZZ?="
- }
+ "value": "PreconditionFailed"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-metadata-replaced",
+ "id": "operations/s3-express/get-range-inverted",
"profile": "s3-express",
"lane": "core",
- "purpose": "get metadata replaced",
+ "purpose": "get range inverted",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/replaced.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 2,
+ "start": 6
+ }
},
"exchanges": [
{
@@ -173277,78 +182893,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/replaced.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-8ff37996a1a3\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": "Mg=="
- }
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/metadata/replaced.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -173363,8 +182908,8 @@
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "is": "equal",
+ "value": "bytes=6-1"
}
},
{
@@ -173397,19 +182942,18 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 0-0/1",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-8ff37996a1a3\"",
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "Mg=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -173430,7 +182974,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-8ff37996a1a3\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -173438,7 +182982,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -173465,23 +183009,53 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Mg=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "range"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/s3-express/get-metadata",
+ "id": "operations/s3-express/get-range-empty",
"profile": "s3-express",
"lane": "core",
- "purpose": "get metadata",
+ "purpose": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/object.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 5,
+ "start": 5
+ }
},
"exchanges": [
{
@@ -173574,80 +183148,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-ee657e36119d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-name": "value",
- "x-amz-meta-second": "2"
- },
- "body": {
- "encoding": "base64",
- "data": "MQ=="
- }
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/metadata/object.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -173662,8 +183163,8 @@
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "is": "equal",
+ "value": "bytes=5-4"
}
},
{
@@ -173696,21 +183197,18 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 0-0/1",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ee657e36119d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-name": "value",
- "x-amz-meta-second": "2"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "MQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -173731,7 +183229,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-ee657e36119d\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -173739,7 +183237,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -173762,43 +183260,56 @@
}
},
{
- "at": "/value/metadata/name",
+ "at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "value"
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
- },
+ }
+ ],
+ "refusal": [
{
- "at": "/value/metadata/second",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "refused"
}
},
{
- "at": "/value/body_base64",
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
"optional": false,
"rule": {
"is": "equal",
- "value": "MQ=="
+ "value": "range"
}
}
],
- "refusal": null
+ "decline_permitted": true
},
{
- "id": "operations/s3-express/get-metadata-ignores-unknown-headers",
+ "id": "operations/s3-express/get-range-not-satisfiable",
"profile": "s3-express",
"lane": "core",
- "purpose": "Surface user metadata; unknown headers must not become metadata.",
+ "purpose": "get range not satisfiable",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "start": 40
+ }
},
"exchanges": [
{
@@ -173891,7 +183402,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -173903,15 +183414,11 @@
}
},
{
- "at": "/headers/content-type",
- "optional": true,
+ "at": "/headers/range",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
+ "is": "equal",
+ "value": "bytes=40-"
}
},
{
@@ -173939,25 +183446,23 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 416,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-author": "Ada",
- "x-amz-request-id": "fixture-request-id",
- "x-unrelated": "not metadata"
+ }
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
- }
+ "encoding": "utf8",
+ "data": "\nInvalidRangeFixture error"
+ },
+ "framing": "chunked"
}
},
{
@@ -173975,7 +183480,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -173986,24 +183491,12 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/range",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "pattern": "bytes=40-[1-9][0-9]{2,}"
}
},
{
@@ -174031,26 +183524,23 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 416,
"headers": {
- "content-range": "bytes 0-4/5",
- "content-type": "application/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-author": "Ada",
- "x-amz-request-id": "fixture-request-id",
- "x-unrelated": "not metadata"
+ }
},
"body": {
- "encoding": "base64",
- "data": "aGVsbG8="
- }
+ "encoding": "utf8",
+ "data": "\nInvalidRangeFixture error"
+ },
+ "framing": "chunked"
}
}
]
@@ -174062,41 +183552,43 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "aGVsbG8="
+ "value": 416
}
},
{
- "at": "/value/metadata",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": {
- "author": "Ada"
- }
+ "value": "InvalidRange"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-missing",
+ "id": "operations/s3-express/get-range-past-the-end",
"profile": "s3-express",
"lane": "core",
- "purpose": "get missing. A client reports it as not_found: the object is absent",
+ "purpose": "Read a range that ends past the object, which the service clips to the object's end. Report the window it served from Content-Range, bytes 28-29/30, so that the caller sees the range was clipped",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/absent.txt",
- "op": "get"
+ "key": "object-tests/read/object.txt",
+ "op": "get",
+ "range": {
+ "end": 64,
+ "start": 28
+ }
},
"exchanges": [
{
@@ -174189,77 +183681,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/absent.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 404,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
- },
- "body": {
- "encoding": "utf8",
- "data": "\nNoSuchKeyFixture error"
- },
- "framing": "chunked"
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/absent.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -174274,8 +183696,8 @@
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "is": "equal",
+ "value": "bytes=28-63"
}
},
{
@@ -174308,18 +183730,20 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 28-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nNoSuchKeyFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "Y3Q="
+ }
}
}
]
@@ -174331,48 +183755,78 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-672b31e65569\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "NoSuchKey"
+ "value": 2
}
},
{
- "at": "/kind",
+ "at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": "not_found"
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Y3Q="
+ }
+ },
+ {
+ "at": "/value/content_range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes 28-29/30"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-not-modified",
+ "id": "operations/s3-express/get-range-single-byte",
"profile": "s3-express",
"lane": "core",
- "purpose": "get not modified",
+ "purpose": "get range single byte",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_none_match": "\"fixture-672b31e65569\"",
"key": "object-tests/read/object.txt",
- "op": "get"
+ "op": "get",
+ "range": {
+ "end": 1,
+ "start": 0
+ }
},
"exchanges": [
{
@@ -174476,97 +183930,12 @@
"value": ""
}
},
- {
- "at": "/headers/if-none-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 304,
- "headers": {
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-672b31e65569\""
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/if-none-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
{
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "is": "equal",
+ "value": "bytes=0-0"
}
},
{
@@ -174599,16 +183968,19 @@
],
"allow_query": [],
"response": {
- "status": 304,
+ "status": 206,
"headers": {
+ "content-range": "bytes 0-0/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\""
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": ""
+ "data": "MA=="
}
}
}
@@ -174621,32 +183993,70 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 304
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MA=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-precondition-failed",
+ "id": "operations/s3-express/get-range",
"profile": "s3-express",
"lane": "core",
- "purpose": "get precondition failed",
+ "purpose": "get range",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_match": "\"fixture-db71b2c0257c\"",
"key": "object-tests/read/object.txt",
- "op": "get"
+ "op": "get",
+ "range": {
+ "end": 6,
+ "start": 2
+ }
},
"exchanges": [
{
@@ -174751,11 +184161,11 @@
}
},
{
- "at": "/headers/if-match",
+ "at": "/headers/range",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-db71b2c0257c\""
+ "value": "bytes=2-5"
}
},
{
@@ -174788,104 +184198,20 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 2-5/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nPreconditionFailedFixture error"
- },
- "framing": "chunked"
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-db71b2c0257c\""
- }
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
+ "encoding": "base64",
+ "data": "MjM0NQ=="
}
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 412,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
- },
- "body": {
- "encoding": "utf8",
- "data": "\nPreconditionFailedFixture error"
- },
- "framing": "chunked"
}
}
]
@@ -174897,42 +184223,68 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-672b31e65569\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "PreconditionFailed"
+ "value": 4
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MjM0NQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-range-inverted",
+ "id": "operations/s3-express/get-range-open",
"profile": "s3-express",
"lane": "core",
- "purpose": "get range inverted",
+ "purpose": "get range open",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object",
"op": "get",
"range": {
- "end": 2,
- "start": 6
+ "start": 3
}
},
"exchanges": [
@@ -175026,7 +184378,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object"
}
},
{
@@ -175042,7 +184394,19 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=6-1"
+ "value": "bytes=3-"
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -175070,23 +184434,114 @@
}
}
],
- "allow_headers": [
- "content-type"
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 3-4/5",
+ "content-type": "application/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "bG8="
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=3-[1-9][0-9]{2,}"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
],
+ "allow_headers": [],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 3-4/5",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "bG8="
}
}
}
@@ -175102,92 +184557,33 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
- }
- },
- {
- "at": "/parameter",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "range"
+ "value": "bG8="
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/s3-express/get-range-empty",
+ "id": "operations/s3-express/get-checksum-range",
"profile": "s3-express",
"lane": "core",
- "purpose": "Read a range of no bytes, whose start equals its end. HTTP has no form for it: bytes=5-4 is inverted, and the service ignores it and sends the whole object. A client may refuse it instead",
+ "purpose": "Read part of an object with checksum mode. S3 sends no checksum for a range that does not cover the whole object, so a client reads it without one, and reports none. x-amz-checksum-mode may be sent or left out",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
"call": {
+ "checksum_mode": true,
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 5,
- "start": 5
+ "end": 6,
+ "start": 2
}
},
"exchanges": [
@@ -175297,7 +184693,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=5-4"
+ "value": "bytes=2-5"
}
},
{
@@ -175323,6 +184719,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -175330,8 +184734,9 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
+ "content-range": "bytes 2-5/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
@@ -175341,7 +184746,7 @@
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "MjM0NQ=="
}
}
}
@@ -175370,7 +184775,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
+ "value": 4
}
},
{
@@ -175397,52 +184802,30 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "refused"
- }
- },
- {
- "at": "/kind",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": ".+"
+ "value": "MjM0NQ=="
}
},
{
- "at": "/parameter",
+ "at": "/value/checksum",
"optional": false,
"rule": {
- "is": "equal",
- "value": "range"
+ "is": "absent"
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/s3-express/get-range-not-satisfiable",
+ "id": "operations/s3-express/get-replaced",
"profile": "s3-express",
"lane": "core",
- "purpose": "get range not satisfiable",
+ "purpose": "get replaced",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/object.txt",
- "op": "get",
- "range": {
- "start": 40
- }
+ "key": "object-tests/multipart/replaced.bin",
+ "op": "get"
},
"exchanges": [
{
@@ -175535,7 +184918,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/multipart/replaced.bin"
}
},
{
@@ -175546,14 +184929,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=40-"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -175584,18 +184959,19 @@
],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-eef5a071f9f6\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nInvalidRangeFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "Yg=="
+ }
}
},
{
@@ -175613,7 +184989,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/multipart/replaced.bin"
}
},
{
@@ -175629,7 +185005,7 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "bytes=40-[1-9][0-9]{2,}"
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -175662,18 +185038,20 @@
],
"allow_query": [],
"response": {
- "status": 416,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-0/1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-eef5a071f9f6\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nInvalidRangeFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "Yg=="
+ }
}
}
]
@@ -175685,43 +185063,66 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 416
+ "value": "\"fixture-eef5a071f9f6\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "InvalidRange"
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Yg=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-range-past-the-end",
+ "id": "operations/s3-express/get-single-part",
"profile": "s3-express",
"lane": "core",
- "purpose": "Read a range that ends past the object, which the service clips to the object's end. Report the window it served from Content-Range, bytes 28-29/30, so that the caller sees the range was clipped",
+ "purpose": "get single part",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/object.txt",
- "op": "get",
- "range": {
- "end": 64,
- "start": 28
- }
+ "key": "object-tests/multipart/single.bin",
+ "op": "get"
},
"exchanges": [
{
@@ -175814,7 +185215,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/multipart/single.bin"
}
},
{
@@ -175825,14 +185226,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=28-63"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -175863,180 +185256,21 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 28-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
+ "etag": "\"fixture-0841fa5d9c5c\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "Y3Q="
- }
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Y3Q="
- }
- },
- {
- "at": "/value/content_range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes 28-29/30"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/get-range-single-byte",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "get range single byte",
- "sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
- ],
- "call": {
- "key": "object-tests/read/object.txt",
- "op": "get",
- "range": {
- "end": 1,
- "start": 0
- }
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
- }
- },
- {
- "at": "/query/session",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "absent"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml"
- },
- "body": {
- "encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
- },
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
+ "data": "b25seQ=="
}
}
- }
- ]
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -176052,7 +185286,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/multipart/single.bin"
}
},
{
@@ -176067,8 +185301,8 @@
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "equal",
- "value": "bytes=0-0"
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -176103,17 +185337,17 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/30",
+ "content-range": "bytes 0-3/4",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
+ "etag": "\"fixture-0841fa5d9c5c\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "MA=="
+ "data": "b25seQ=="
}
}
}
@@ -176134,7 +185368,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-672b31e65569\""
+ "value": "\"fixture-0841fa5d9c5c\""
}
},
{
@@ -176142,7 +185376,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 4
}
},
{
@@ -176169,17 +185403,17 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MA=="
+ "value": "b25seQ=="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-range",
+ "id": "operations/s3-express/get-suffix-longer-than-object",
"profile": "s3-express",
"lane": "core",
- "purpose": "get range",
+ "purpose": "get suffix longer than object",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
@@ -176187,8 +185421,7 @@
"key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "end": 6,
- "start": 2
+ "suffix": 100
}
},
"exchanges": [
@@ -176298,7 +185531,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=2-5"
+ "value": "bytes=-100"
}
},
{
@@ -176333,7 +185566,7 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 2-5/30",
+ "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
@@ -176343,7 +185576,181 @@
},
"body": {
"encoding": "base64",
- "data": "MjM0NQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "HEAD"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-100"
+ }
+ }
+ ],
+ "then": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=0-29"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-length": "30",
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "empty"
}
}
}
@@ -176372,7 +185779,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 4
+ "value": 30
}
},
{
@@ -176399,25 +185806,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "MjM0NQ=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-range-open",
+ "id": "operations/s3-express/get-suffix",
"profile": "s3-express",
"lane": "core",
- "purpose": "get range open",
+ "purpose": "get suffix",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object",
+ "key": "object-tests/read/object.txt",
"op": "get",
"range": {
- "start": 3
+ "suffix": 6
}
},
"exchanges": [
@@ -176511,7 +185918,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -176527,19 +185934,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=3-"
- }
- },
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
+ "value": "bytes=-6"
}
},
{
@@ -176567,42 +185962,35 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 3-4/5",
- "content-type": "application/octet-stream",
+ "content-range": "bytes 24-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "bG8="
+ "data": "b2JqZWN0"
}
}
},
{
"request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
{
"at": "/path",
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -176614,23 +186002,11 @@
}
},
{
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
- {
- "at": "/headers/range",
+ "at": "/method",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "bytes=3-[1-9][0-9]{2,}"
+ "is": "equal",
+ "value": "HEAD"
}
},
{
@@ -176656,25 +186032,128 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=-6"
+ }
}
],
- "allow_headers": [],
+ "then": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=24-29"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 24-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "b2JqZWN0"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 3-4/5",
- "content-type": "application/octet-stream",
+ "content-length": "6",
+ "content-range": "bytes 24-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": "bG8="
+ "encoding": "empty"
}
}
}
@@ -176690,27 +186169,62 @@
"value": "ok"
}
},
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 6
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "bG8="
+ "value": "b2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-replaced",
+ "id": "operations/s3-express/get-whole",
"profile": "s3-express",
"lane": "core",
- "purpose": "get replaced",
+ "purpose": "get whole",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/multipart/replaced.bin",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -176804,7 +186318,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/replaced.bin"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -176851,12 +186365,12 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-eef5a071f9f6\"",
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "Yg=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
},
@@ -176875,7 +186389,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/replaced.bin"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -176926,17 +186440,17 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-0/1",
+ "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-eef5a071f9f6\"",
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "Yg=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -176957,7 +186471,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-eef5a071f9f6\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -176965,7 +186479,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -176992,22 +186506,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Yg=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-single-part",
+ "id": "operations/s3-express/get-checksum",
"profile": "s3-express",
"lane": "core",
- "purpose": "get single part",
+ "purpose": "Read an object with x-amz-checksum-mode: ENABLED, which makes S3 send the object's stored checksum, here CRC32, in x-amz-checksum-crc32 with x-amz-checksum-type: FULL_OBJECT. A range that covers the whole object gets it too. Check the body against it, and report it",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
"call": {
- "key": "object-tests/multipart/single.bin",
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -177101,7 +186617,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/single.bin"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -177135,6 +186651,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -177148,12 +186672,14 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-0841fa5d9c5c\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc32": "zYbXEQ==",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
- "data": "b25seQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
},
@@ -177172,7 +186698,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/single.bin"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -177214,6 +186740,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -177223,17 +186757,19 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-3/4",
+ "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-0841fa5d9c5c\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc32": "zYbXEQ==",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
- "data": "b25seQ=="
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -177254,7 +186790,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-0841fa5d9c5c\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -177262,7 +186798,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 4
+ "value": 30
}
},
{
@@ -177289,26 +186825,37 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "b25seQ=="
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc32",
+ "type": "full_object",
+ "value_base64": "zYbXEQ=="
+ }
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-suffix-longer-than-object",
+ "id": "operations/s3-express/get-checksum-default",
"profile": "s3-express",
"lane": "core",
- "purpose": "get suffix longer than object",
+ "purpose": "Read with x-amz-checksum-mode: ENABLED an object written without a checksum. S3 stores a CRC64NVME for every new object and sends it, so a client checks CRC64NVME too",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
"call": {
+ "checksum_mode": true,
"key": "object-tests/read/object.txt",
- "op": "get",
- "range": {
- "suffix": 100
- }
+ "op": "get"
},
"exchanges": [
{
@@ -177412,14 +186959,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=-100"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -177443,6 +186982,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -177450,15 +186997,16 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
"etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
@@ -177468,6 +187016,14 @@
},
{
"request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
{
"at": "/path",
"optional": false,
@@ -177485,11 +187041,11 @@
}
},
{
- "at": "/method",
+ "at": "/headers/range",
"optional": false,
"rule": {
- "is": "equal",
- "value": "HEAD"
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -177517,108 +187073,14 @@
}
},
{
- "at": "/headers/range",
+ "at": "/headers/x-amz-checksum-mode",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-100"
+ "value": "ENABLED"
}
}
],
- "then": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=0-29"
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 206,
- "headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- }
- ]
- }
- ],
"allow_headers": [
"content-type"
],
@@ -177626,17 +187088,19 @@
"response": {
"status": 206,
"headers": {
- "content-length": "30",
"content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
"etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -177694,24 +187158,37 @@
"is": "equal",
"value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc64nvme",
+ "type": "full_object",
+ "value_base64": "efafnZ4dTjo="
+ }
+ }
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-suffix",
+ "id": "operations/s3-express/get-checksum-mismatch",
"profile": "s3-express",
"lane": "core",
- "purpose": "get suffix",
+ "purpose": "Report a body that does not match the checksum S3 sent for it as an error of kind checksum_mismatch, not as the object",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
+ "origin": "constructed",
+ "derived_from": "operations/s3-express/get-checksum-default",
"call": {
+ "checksum_mode": true,
"key": "object-tests/read/object.txt",
- "op": "get",
- "range": {
- "suffix": 6
- }
+ "op": "get"
},
"exchanges": [
{
@@ -177815,14 +187292,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=-6"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -177846,6 +187315,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/x-amz-checksum-mode",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ENABLED"
+ }
}
],
"allow_headers": [
@@ -177853,24 +187330,33 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "content-range": "bytes 24-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
"etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
- "data": "b2JqZWN0"
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWNh"
}
}
},
{
"request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
{
"at": "/path",
"optional": false,
@@ -177888,11 +187374,11 @@
}
},
{
- "at": "/method",
+ "at": "/headers/range",
"optional": false,
"rule": {
- "is": "equal",
- "value": "HEAD"
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
@@ -177920,108 +187406,14 @@
}
},
{
- "at": "/headers/range",
+ "at": "/headers/x-amz-checksum-mode",
"optional": false,
"rule": {
"is": "equal",
- "value": "bytes=-6"
+ "value": "ENABLED"
}
}
],
- "then": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "bytes=24-29"
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 206,
- "headers": {
- "content-range": "bytes 24-29/30",
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": "b2JqZWN0"
- }
- }
- }
- ]
- }
- ],
"allow_headers": [
"content-type"
],
@@ -178029,17 +187421,19 @@
"response": {
"status": 206,
"headers": {
- "content-length": "6",
- "content-range": "bytes 24-29/30",
+ "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
"etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWNh"
}
}
}
@@ -178052,63 +187446,29 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 6
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/kind",
"optional": false,
"rule": {
"is": "equal",
- "value": "b2JqZWN0"
+ "value": "checksum_mismatch"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-whole",
+ "id": "operations/s3-express/get-session-expired",
"profile": "s3-express",
"lane": "core",
- "purpose": "get whole",
+ "purpose": "Renew a session whose Expiration has passed before using it: ask CreateSession again, and sign the GET with the second session",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
+ "origin": "constructed",
"call": {
"key": "object-tests/read/object.txt",
"op": "get"
@@ -178179,6 +187539,79 @@
"encoding": "utf8",
"data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": -60
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-token-2fixture-secret-key-2fixture-access-key-2SESSION_EXPIRATION"
+ },
"body_time": {
"text": "SESSION_EXPIRATION",
"offset_seconds": 300
@@ -178228,7 +187661,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "fixture-session-token-2"
}
},
{
@@ -178236,7 +187669,7 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key-2/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
@@ -178307,7 +187740,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "fixture-session-token-2"
}
},
{
@@ -178315,7 +187748,7 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key-2/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
@@ -178399,16 +187832,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/get-session-expired",
+ "id": "operations/s3-express/get-xml-looking",
"profile": "s3-express",
"lane": "core",
- "purpose": "Renew a session whose Expiration has passed before using it: ask CreateSession again, and sign the GET with the second session",
+ "purpose": "get xml looking",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
- "origin": "constructed",
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object",
"op": "get"
},
"exchanges": [
@@ -178479,7 +187911,7 @@
},
"body_time": {
"text": "SESSION_EXPIRATION",
- "offset_seconds": -60
+ "offset_seconds": 300
}
}
}
@@ -178502,11 +187934,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
+ "value": "/object"
}
},
{
- "at": "/query/session",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -178514,76 +187946,15 @@
}
},
{
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "absent"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml"
- },
- "body": {
- "encoding": "utf8",
- "data": "\nfixture-session-token-2fixture-secret-key-2fixture-access-key-2SESSION_EXPIRATION"
- },
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
- }
- }
- ]
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
+ "at": "/headers/content-type",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": ""
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
}
},
{
@@ -178599,7 +187970,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token-2"
+ "value": "fixture-session-token"
}
},
{
@@ -178607,27 +187978,26 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key-2/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
}
}
},
@@ -178646,7 +188016,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object"
}
},
{
@@ -178657,6 +188027,18 @@
"value": ""
}
},
+ {
+ "at": "/headers/content-type",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "application/xml",
+ "application/octet-stream",
+ "binary/octet-stream"
+ ]
+ }
+ },
{
"at": "/headers/range",
"optional": false,
@@ -178678,7 +188060,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token-2"
+ "value": "fixture-session-token"
}
},
{
@@ -178686,28 +188068,27 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key-2/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
- "allow_headers": [
- "content-type"
- ],
+ "allow_headers": [],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-range": "bytes 0-32/33",
+ "content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-etag\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-request-id": "fixture-request-id"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
}
}
}
@@ -178723,60 +188104,26 @@
"value": "ok"
}
},
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/body_base64",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-xml-looking",
+ "id": "operations/s3-express/get-noise-tolerance",
"profile": "s3-express",
"lane": "core",
- "purpose": "get xml looking",
+ "purpose": "get noise tolerance",
"sources": [
"https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
],
+ "origin": "constructed",
"call": {
"key": "object",
"op": "get"
@@ -178929,13 +188276,14 @@
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"a-different-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-request-id": "another-id",
+ "x-fixture-unknown": "ignored"
},
"body": {
"encoding": "base64",
- "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
+ "data": "aGVsbG8="
}
}
},
@@ -179015,18 +188363,19 @@
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-32/33",
+ "content-range": "bytes 0-4/5",
"content-type": "application/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-etag\"",
+ "etag": "\"a-different-etag\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "fixture-request-id"
+ "x-amz-request-id": "another-id",
+ "x-fixture-unknown": "ignored"
},
"body": {
"encoding": "base64",
- "data": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
+ "data": "aGVsbG8="
}
}
}
@@ -179047,23 +188396,24 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "PEVycm9yPnN0aWxsIG9iamVjdCBieXRlczwvRXJyb3I+"
+ "value": "aGVsbG8="
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-noise-tolerance",
+ "id": "operations/s3-express/get-body-cut-short",
"profile": "s3-express",
"lane": "core",
- "purpose": "get noise tolerance",
+ "purpose": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html"
+ "https://www.rfc-editor.org/rfc/rfc9112#section-8",
+ "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_client.cpp"
],
- "origin": "constructed",
+ "origin": "transient",
"call": {
- "key": "object",
+ "key": "object-tests/read/object.txt",
"op": "get"
},
"exchanges": [
@@ -179157,7 +188507,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -179168,18 +188518,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -179205,24 +188543,25 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "application/octet-stream",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"a-different-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "another-id",
- "x-fixture-unknown": "ignored"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
- }
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ },
+ "truncate_body_after": 15
}
},
{
@@ -179240,7 +188579,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -179251,18 +188590,6 @@
"value": ""
}
},
- {
- "at": "/headers/content-type",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- "application/xml",
- "application/octet-stream",
- "binary/octet-stream"
- ]
- }
- },
{
"at": "/headers/range",
"optional": false,
@@ -179296,65 +188623,30 @@
}
}
],
- "allow_headers": [],
+ "allow_headers": [
+ "content-type"
+ ],
"allow_query": [],
"response": {
"status": 206,
"headers": {
- "content-range": "bytes 0-4/5",
- "content-type": "application/octet-stream",
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"a-different-etag\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-request-id": "another-id",
- "x-fixture-unknown": "ignored"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "aGVsbG8="
- }
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ },
+ "truncate_body_after": 15
}
}
]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
},
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "aGVsbG8="
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/get-body-cut-short",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "Report a body that ends before its Content-Length as an error, or resume it, but never return the short body",
- "sources": [
- "https://www.rfc-editor.org/rfc/rfc9112#section-8",
- "azure-sdk-for-cpp/sdk/storage/azure-storage-blobs/src/blob_client.cpp"
- ],
- "origin": "transient",
- "call": {
- "key": "object-tests/read/object.txt",
- "op": "get"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -179372,11 +188664,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
+ "value": "/object-tests/read/object.txt"
}
},
{
- "at": "/query/session",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
@@ -179392,44 +188684,43 @@
}
},
{
- "at": "/headers/authorization",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "absent"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
"allow_headers": [
+ "content-type",
"content-type"
],
"allow_query": [],
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml"
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
- },
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
- }
- ]
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -179456,6 +188747,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -179482,12 +188781,14 @@
}
],
"allow_headers": [
+ "content-type",
"content-type"
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 206,
"headers": {
+ "content-range": "bytes 0-29/30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
@@ -179498,8 +188799,7 @@
"body": {
"encoding": "base64",
"data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- },
- "truncate_body_after": 15
+ }
}
},
{
@@ -179531,9 +188831,179 @@
{
"at": "/headers/range",
"optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "bytes=15-"
+ }
+ },
+ {
+ "at": "/headers/if-match",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-672b31e65569\""
+ }
+ }
+ ],
+ "allow_headers": [],
+ "allow_query": [],
+ "response": {
+ "status": 206,
+ "headers": {
+ "content-range": "bytes 15-29/30",
+ "content-type": "binary/octet-stream",
+ "date": {
+ "from": "now"
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "base64",
+ "data": "Y3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ }
+ ],
+ "optional": true
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "error",
+ "ok"
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/get-slow-down",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report a 503 SlowDown answer as an error, after at most 5 retries",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
+ ],
+ "origin": "transient",
+ "call": {
+ "key": "object-tests/read/object.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
"rule": {
"is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/read/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
},
{
@@ -179566,27 +189036,20 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 503,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
},
- "truncate_body_after": 15
+ "framing": "chunked"
}
- }
- ]
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -179613,6 +189076,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -179639,26 +189110,28 @@
}
],
"allow_headers": [
- "content-type",
"content-type"
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 503,
"headers": {
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
}
- },
+ }
+ ]
+ },
+ {
+ "alternatives": [
{
"request": [
{
@@ -179685,14 +189158,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -179719,25 +189184,22 @@
}
],
"allow_headers": [
- "content-type",
"content-type"
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 503,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
+ "encoding": "utf8",
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
}
},
{
@@ -179770,113 +189232,24 @@
"at": "/headers/range",
"optional": false,
"rule": {
- "is": "equal",
- "value": "bytes=15-"
- }
- },
- {
- "at": "/headers/if-match",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- }
- ],
- "allow_headers": [],
- "allow_query": [],
- "response": {
- "status": 206,
- "headers": {
- "content-range": "bytes 15-29/30",
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": "Y3QtdGVzdHMtb2JqZWN0"
- }
- }
- }
- ],
- "optional": true
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "one_of",
- "values": [
- "error",
- "ok"
- ]
- }
- },
- {
- "at": "/value/body_base64",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/get-slow-down",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "Report a 503 SlowDown answer as an error, after at most 5 retries",
- "sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
- ],
- "origin": "transient",
- "call": {
- "key": "object-tests/read/object.txt",
- "op": "get"
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
}
},
{
- "at": "/query/session",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "value": "fixture-session-token"
}
},
{
@@ -179884,14 +189257,7 @@
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "absent"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
}
],
@@ -179900,21 +189266,22 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 503,
"headers": {
- "content-type": "application/xml"
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
},
"body": {
"encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "\nSlowDownPlease reduce your request rate.fixture"
},
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
+ "framing": "chunked"
}
}
- ]
+ ],
+ "optional": true
},
{
"alternatives": [
@@ -180066,7 +189433,8 @@
"framing": "chunked"
}
}
- ]
+ ],
+ "optional": true
},
{
"alternatives": [
@@ -180292,90 +189660,7 @@
},
"framing": "chunked"
}
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/read/object.txt"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
- },
- "body": {
- "encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
- },
- "framing": "chunked"
- }
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -180402,6 +189687,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -180445,7 +189738,12 @@
},
"framing": "chunked"
}
- },
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
{
"request": [
{
@@ -180472,14 +189770,6 @@
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -180523,12 +189813,7 @@
},
"framing": "chunked"
}
- }
- ],
- "optional": true
- },
- {
- "alternatives": [
+ },
{
"request": [
{
@@ -180555,6 +189840,14 @@
"value": ""
}
},
+ {
+ "at": "/headers/range",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "bytes=0-[1-9][0-9]{2,}"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -180598,7 +189891,55 @@
},
"framing": "chunked"
}
- },
+ }
+ ],
+ "optional": true
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "error"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 503
+ }
+ },
+ {
+ "at": "/code",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "SlowDown"
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/get-if-unmodified-since-past",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Refuse a read with 412 when the object changed after If-Unmodified-Since",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "key": "object-tests/read/object.txt",
+ "op": "get"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
{
"request": [
{
@@ -180614,25 +189955,17 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/"
}
},
{
- "at": "/body_base64",
+ "at": "/query/session",
"optional": false,
"rule": {
"is": "equal",
"value": ""
}
},
- {
- "at": "/headers/range",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -180642,19 +189975,18 @@
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/authorization",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "absent"
}
}
],
@@ -180663,22 +189995,21 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
- ],
- "optional": true
+ ]
},
{
"alternatives": [
@@ -180731,6 +190062,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/if-unmodified-since",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ }
}
],
"allow_headers": [
@@ -180738,7 +190077,7 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
@@ -180747,7 +190086,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nPreconditionFailedFixture error"
},
"framing": "chunked"
}
@@ -180809,6 +190148,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/if-unmodified-since",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ }
}
],
"allow_headers": [
@@ -180816,7 +190163,7 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 412,
"headers": {
"content-type": "application/xml",
"date": {
@@ -180825,13 +190172,12 @@
},
"body": {
"encoding": "utf8",
- "data": "\nSlowDownPlease reduce your request rate.fixture"
+ "data": "\nPreconditionFailedFixture error"
},
"framing": "chunked"
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -180848,7 +190194,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 503
+ "value": 412
}
},
{
@@ -180856,22 +190202,22 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "SlowDown"
+ "value": "PreconditionFailed"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-if-unmodified-since-past",
+ "id": "operations/s3-express/get-if-modified-since-future",
"profile": "s3-express",
"lane": "core",
- "purpose": "Refuse a read with 412 when the object changed after If-Unmodified-Since",
+ "purpose": "Read an object when If-Modified-Since names a future date",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "if_modified_since": "Fri, 01 Jan 2100 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -181002,11 +190348,11 @@
}
},
{
- "at": "/headers/if-unmodified-since",
+ "at": "/headers/if-modified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "Fri, 01 Jan 2100 00:00:00 GMT"
}
}
],
@@ -181015,18 +190361,19 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nPreconditionFailedFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
}
},
{
@@ -181088,11 +190435,11 @@
}
},
{
- "at": "/headers/if-unmodified-since",
+ "at": "/headers/if-modified-since",
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "Fri, 01 Jan 2100 00:00:00 GMT"
}
}
],
@@ -181101,18 +190448,20 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 206,
"headers": {
- "content-type": "application/xml",
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "utf8",
- "data": "\nPreconditionFailedFixture error"
- },
- "framing": "chunked"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ }
}
}
]
@@ -181124,38 +190473,65 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-672b31e65569\""
}
},
{
- "at": "/code",
+ "at": "/value/size",
"optional": false,
"rule": {
"is": "equal",
- "value": "PreconditionFailed"
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-if-modified-since-future",
+ "id": "operations/s3-express/get-if-modified-since-past",
"profile": "s3-express",
"lane": "core",
- "purpose": "Read an object when If-Modified-Since names a future date",
+ "purpose": "Read an object modified since a past date",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_modified_since": "Fri, 01 Jan 2100 00:00:00 GMT",
+ "if_modified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -181290,7 +190666,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Fri, 01 Jan 2100 00:00:00 GMT"
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
}
}
],
@@ -181377,7 +190753,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Fri, 01 Jan 2100 00:00:00 GMT"
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
}
}
],
@@ -181461,15 +190837,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/get-if-modified-since-past",
+ "id": "operations/s3-express/get-if-modified-since-unchanged",
"profile": "s3-express",
"lane": "core",
- "purpose": "Read an object modified since a past date",
+ "purpose": "Report an object not changed since the If-Modified-Since date as 304 Not Modified, not as an error of the service or an empty object",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_modified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
+ "if_modified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -181604,7 +190980,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "Mon, 01 Jan 2024 00:00:00 GMT"
}
}
],
@@ -181613,18 +190989,16 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 304,
"headers": {
- "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
+ "etag": "\"fixture-ad03f2ab332a\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "encoding": "empty"
}
}
},
@@ -181691,7 +191065,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ "value": "Mon, 01 Jan 2024 00:00:00 GMT"
}
}
],
@@ -181700,19 +191074,16 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 304,
"headers": {
- "content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
+ "etag": "\"fixture-ad03f2ab332a\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "encoding": "empty"
}
}
}
@@ -181725,65 +191096,30 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "error"
}
},
{
- "at": "/value/body_base64",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": 304
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/get-if-modified-since-unchanged",
+ "id": "operations/s3-express/get-if-modified-since-invalid",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report an object not changed since the If-Modified-Since date as 304 Not Modified, not as an error of the service or an empty object",
+ "purpose": "Read an object when If-Modified-Since is not an HTTP date, which S3 ignores. A client may refuse the date instead",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_modified_since": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "if_modified_since": "not a date",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -181918,7 +191254,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "value": "not a date"
}
}
],
@@ -181927,16 +191263,18 @@
],
"allow_query": [],
"response": {
- "status": 304,
+ "status": 200,
"headers": {
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ad03f2ab332a\"",
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
},
@@ -182003,7 +191341,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "value": "not a date"
}
}
],
@@ -182012,16 +191350,19 @@
],
"allow_query": [],
"response": {
- "status": 304,
+ "status": 206,
"headers": {
+ "content-range": "bytes 0-29/30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ad03f2ab332a\"",
+ "etag": "\"fixture-672b31e65569\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
}
@@ -182034,30 +191375,90 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 304
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "if_modified_since"
+ }
+ }
+ ],
+ "decline_permitted": true
},
{
- "id": "operations/s3-express/get-if-modified-since-invalid",
+ "id": "operations/s3-express/get-content-properties",
"profile": "s3-express",
"lane": "core",
- "purpose": "Read an object when If-Modified-Since is not an HTTP date, which S3 ignores. A client may refuse the date instead",
+ "purpose": "Return the stored content properties from a GET",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_modified_since": "not a date",
"key": "object-tests/read/object.txt",
"op": "get"
},
@@ -182121,11 +191522,14 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml"
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
+ "content-type": "text/plain; charset=utf-8"
},
"body": {
"encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "fixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
"body_time": {
"text": "SESSION_EXPIRATION",
@@ -182186,14 +191590,6 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
- },
- {
- "at": "/headers/if-modified-since",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "not a date"
- }
}
],
"allow_headers": [
@@ -182203,7 +191599,10 @@
"response": {
"status": 200,
"headers": {
- "content-type": "binary/octet-stream",
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
+ "content-type": "text/plain; charset=utf-8",
"date": {
"from": "now"
},
@@ -182273,14 +191672,6 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
- },
- {
- "at": "/headers/if-modified-since",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "not a date"
- }
}
],
"allow_headers": [
@@ -182290,8 +191681,11 @@
"response": {
"status": 206,
"headers": {
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
"content-range": "bytes 0-29/30",
- "content-type": "binary/octet-stream",
+ "content-type": "text/plain; charset=utf-8",
"date": {
"from": "now"
},
@@ -182332,14 +191726,6 @@
"value": 30
}
},
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
{
"at": "/value/version",
"optional": true,
@@ -182358,47 +191744,53 @@
"is": "equal",
"value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
}
- }
- ],
- "refusal": [
+ },
{
- "at": "/outcome",
+ "at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": "refused"
+ "value": "text/plain; charset=utf-8"
}
},
{
- "at": "/kind",
+ "at": "/value/content_language",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": ".+"
+ "is": "equal",
+ "value": "nl-NL"
}
},
{
- "at": "/parameter",
+ "at": "/value/content_disposition",
"optional": false,
"rule": {
"is": "equal",
- "value": "if_modified_since"
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/value/cache_control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
}
}
],
- "decline_permitted": true
+ "refusal": null
},
{
- "id": "operations/s3-express/get-content-properties",
+ "id": "operations/s3-express/head-committed",
"profile": "s3-express",
"lane": "core",
- "purpose": "Return the stored content properties from a GET",
+ "purpose": "head committed",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/object.txt",
- "op": "get"
+ "key": "object-tests/multipart/object.bin",
+ "op": "head"
},
"exchanges": [
{
@@ -182460,14 +191852,11 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-type": "text/plain; charset=utf-8"
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "fixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
"body_time": {
"text": "SESSION_EXPIRATION",
@@ -182486,7 +191875,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "GET"
+ "value": "HEAD"
}
},
{
@@ -182494,7 +191883,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/multipart/object.bin"
}
},
{
@@ -182537,22 +191926,85 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-type": "text/plain; charset=utf-8",
+ "content-length": "5242886",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
+ "etag": "\"fixture-ec4f3b9bcac2\"",
"last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": ""
}
}
- },
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ec4f3b9bcac2\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 5242886
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/head-metadata",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "head metadata",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "key": "object-tests/metadata/object.txt",
+ "op": "head"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
{
"request": [
{
@@ -182568,11 +192020,11 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/"
}
},
{
- "at": "/body_base64",
+ "at": "/query/session",
"optional": false,
"rule": {
"is": "equal",
@@ -182580,11 +192032,76 @@
}
},
{
- "at": "/headers/range",
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "bytes=0-[1-9][0-9]{2,}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "HEAD"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/object-tests/metadata/object.txt"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
}
},
{
@@ -182617,22 +192134,21 @@
],
"allow_query": [],
"response": {
- "status": 206,
+ "status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-range": "bytes 0-29/30",
- "content-type": "text/plain; charset=utf-8",
+ "content-length": "1",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "etag": "\"fixture-ee657e36119d\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-meta-name": "value",
+ "x-amz-meta-second": "2"
},
"body": {
"encoding": "base64",
- "data": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "data": ""
}
}
}
@@ -182653,7 +192169,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-672b31e65569\""
+ "value": "\"fixture-ee657e36119d\""
}
},
{
@@ -182661,26 +192177,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "MDEyMzQ1Njc4OS1vYmplY3QtdGVzdHMtb2JqZWN0"
+ "value": 1
}
},
{
@@ -182688,46 +192185,49 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain; charset=utf-8"
+ "value": "binary/octet-stream"
}
},
{
- "at": "/value/content_language",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "nl-NL"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
},
{
- "at": "/value/content_disposition",
+ "at": "/value/metadata/name",
"optional": false,
"rule": {
"is": "equal",
- "value": "attachment; filename=\"report.txt\""
+ "value": "value"
}
},
{
- "at": "/value/cache_control",
+ "at": "/value/metadata/second",
"optional": false,
"rule": {
"is": "equal",
- "value": "max-age=3600"
+ "value": "2"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head-committed",
+ "id": "operations/s3-express/head-missing",
"profile": "s3-express",
"lane": "core",
- "purpose": "head committed",
+ "purpose": "Report a HEAD answered 404 as not_found or missing. Its answer has no body, so it cannot say whether the object or the bucket is absent",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/multipart/object.bin",
+ "key": "object-tests/read/absent.txt",
"op": "head"
},
"exchanges": [
@@ -182821,7 +192321,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/multipart/object.bin"
+ "value": "/object-tests/read/absent.txt"
}
},
{
@@ -182862,15 +192362,12 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 404,
"headers": {
- "content-length": "5242886",
- "content-type": "binary/octet-stream",
+ "content-type": "application/xml",
"date": {
"from": "now"
- },
- "etag": "\"fixture-ec4f3b9bcac2\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
"encoding": "base64",
@@ -182887,41 +192384,25 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-ec4f3b9bcac2\""
+ "value": "error"
}
},
{
- "at": "/value/size",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": 5242886
+ "value": 404
}
},
{
- "at": "/value/content_type",
+ "at": "/kind",
"optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
"rule": {
"is": "one_of",
"values": [
- null,
- ""
+ "not_found",
+ "missing"
]
}
}
@@ -182929,15 +192410,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-metadata",
+ "id": "operations/s3-express/head",
"profile": "s3-express",
"lane": "core",
- "purpose": "head metadata",
+ "purpose": "head",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/metadata/object.txt",
+ "key": "object-tests/read/object.txt",
"op": "head"
},
"exchanges": [
@@ -183031,7 +192512,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/metadata/object.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -183074,15 +192555,13 @@
"response": {
"status": 200,
"headers": {
- "content-length": "1",
+ "content-length": "30",
"content-type": "binary/octet-stream",
"date": {
"from": "now"
},
- "etag": "\"fixture-ee657e36119d\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-amz-meta-name": "value",
- "x-amz-meta-second": "2"
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
@@ -183107,7 +192586,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-ee657e36119d\""
+ "value": "\"fixture-672b31e65569\""
}
},
{
@@ -183115,7 +192594,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 1
+ "value": 30
}
},
{
@@ -183136,36 +192615,20 @@
""
]
}
- },
- {
- "at": "/value/metadata/name",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "value"
- }
- },
- {
- "at": "/value/metadata/second",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head-missing",
+ "id": "operations/s3-express/head-content-properties",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report a HEAD answered 404 as not_found or missing. Its answer has no body, so it cannot say whether the object or the bucket is absent",
+ "purpose": "Return the stored content properties from a HEAD",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/absent.txt",
+ "key": "object-tests/read/object.txt",
"op": "head"
},
"exchanges": [
@@ -183228,11 +192691,14 @@
"response": {
"status": 200,
"headers": {
- "content-type": "application/xml"
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
+ "content-type": "text/plain; charset=utf-8"
},
"body": {
"encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "fixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
"body_time": {
"text": "SESSION_EXPIRATION",
@@ -183259,7 +192725,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/absent.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -183300,12 +192766,18 @@
],
"allow_query": [],
"response": {
- "status": 404,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
+ "cache-control": "max-age=3600",
+ "content-disposition": "attachment; filename=\"report.txt\"",
+ "content-language": "nl-NL",
+ "content-length": "30",
+ "content-type": "text/plain; charset=utf-8",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "base64",
@@ -183322,40 +192794,81 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 404
+ "value": "\"fixture-672b31e65569\""
}
},
{
- "at": "/kind",
+ "at": "/value/size",
"optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
"rule": {
"is": "one_of",
"values": [
- "not_found",
- "missing"
+ null,
+ ""
]
}
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "text/plain; charset=utf-8"
+ }
+ },
+ {
+ "at": "/value/content_language",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "nl-NL"
+ }
+ },
+ {
+ "at": "/value/content_disposition",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "attachment; filename=\"report.txt\""
+ }
+ },
+ {
+ "at": "/value/cache_control",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "max-age=3600"
+ }
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head",
+ "id": "operations/s3-express/head-if-unmodified-since-past",
"profile": "s3-express",
"lane": "core",
- "purpose": "head",
+ "purpose": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
+ "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
"key": "object-tests/read/object.txt",
"op": "head"
},
@@ -183484,6 +192997,14 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
+ },
+ {
+ "at": "/headers/if-unmodified-since",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "Sat, 01 Jan 2000 00:00:00 GMT"
+ }
}
],
"allow_headers": [
@@ -183491,19 +193012,14 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 412,
"headers": {
- "content-length": "30",
- "content-type": "binary/octet-stream",
"date": {
"from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
- "encoding": "base64",
- "data": ""
+ "encoding": "empty"
}
}
}
@@ -183516,57 +193032,30 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
+ "value": "error"
}
},
{
- "at": "/value/content_type",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": 412
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head-content-properties",
+ "id": "operations/s3-express/head-key-question",
"profile": "s3-express",
"lane": "core",
- "purpose": "Return the stored content properties from a HEAD",
+ "purpose": "head, with the key \"question?mark.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/read/object.txt",
+ "key": "object-tests/keys/question?mark.txt",
"op": "head"
},
"exchanges": [
@@ -183629,14 +193118,11 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
- "content-type": "text/plain; charset=utf-8"
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "fixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
"body_time": {
"text": "SESSION_EXPIRATION",
@@ -183663,7 +193149,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/keys/question?mark.txt"
}
},
{
@@ -183706,11 +193192,8 @@
"response": {
"status": 200,
"headers": {
- "cache-control": "max-age=3600",
- "content-disposition": "attachment; filename=\"report.txt\"",
- "content-language": "nl-NL",
"content-length": "30",
- "content-type": "text/plain; charset=utf-8",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
},
@@ -183751,63 +193234,38 @@
"value": 30
}
},
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
{
"at": "/value/content_type",
"optional": false,
"rule": {
"is": "equal",
- "value": "text/plain; charset=utf-8"
- }
- },
- {
- "at": "/value/content_language",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "nl-NL"
- }
- },
- {
- "at": "/value/content_disposition",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "attachment; filename=\"report.txt\""
+ "value": "binary/octet-stream"
}
},
{
- "at": "/value/cache_control",
- "optional": false,
+ "at": "/value/version",
+ "optional": true,
"rule": {
- "is": "equal",
- "value": "max-age=3600"
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head-if-unmodified-since-past",
+ "id": "operations/s3-express/head-key-hash",
"profile": "s3-express",
"lane": "core",
- "purpose": "Refuse a HEAD with 412 when the object changed after If-Unmodified-Since",
+ "purpose": "head, with the key \"hash#tag.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "if_unmodified_since": "Sat, 01 Jan 2000 00:00:00 GMT",
- "key": "object-tests/read/object.txt",
+ "key": "object-tests/keys/hash#tag.txt",
"op": "head"
},
"exchanges": [
@@ -183901,7 +193359,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/read/object.txt"
+ "value": "/object-tests/keys/hash#tag.txt"
}
},
{
@@ -183935,14 +193393,6 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
- },
- {
- "at": "/headers/if-unmodified-since",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "Sat, 01 Jan 2000 00:00:00 GMT"
- }
}
],
"allow_headers": [
@@ -183950,14 +193400,19 @@
],
"allow_query": [],
"response": {
- "status": 412,
+ "status": 200,
"headers": {
+ "content-length": "30",
+ "content-type": "binary/octet-stream",
"date": {
"from": "now"
- }
+ },
+ "etag": "\"fixture-672b31e65569\"",
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
- "encoding": "empty"
+ "encoding": "base64",
+ "data": ""
}
}
}
@@ -183970,30 +193425,57 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
+ "value": "ok"
}
},
{
- "at": "/status",
+ "at": "/value/etag",
"optional": false,
"rule": {
"is": "equal",
- "value": 412
+ "value": "\"fixture-672b31e65569\""
+ }
+ },
+ {
+ "at": "/value/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 30
+ }
+ },
+ {
+ "at": "/value/content_type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "binary/octet-stream"
+ }
+ },
+ {
+ "at": "/value/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/head-key-question",
+ "id": "operations/s3-express/head-key-percent",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"question?mark.txt\"",
+ "purpose": "head, with the key \"percent%20.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/question?mark.txt",
+ "key": "object-tests/keys/percent%20.txt",
"op": "head"
},
"exchanges": [
@@ -184087,7 +193569,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/question?mark.txt"
+ "value": "/object-tests/keys/percent%20.txt"
}
},
{
@@ -184195,15 +193677,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-hash",
+ "id": "operations/s3-express/head-key-plus",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"hash#tag.txt\"",
+ "purpose": "head, with the key \"plus+plus.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/hash#tag.txt",
+ "key": "object-tests/keys/plus+plus.txt",
"op": "head"
},
"exchanges": [
@@ -184297,7 +193779,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/hash#tag.txt"
+ "value": "/object-tests/keys/plus+plus.txt"
}
},
{
@@ -184405,15 +193887,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-percent",
+ "id": "operations/s3-express/head-key-space",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"percent%20.txt\"",
+ "purpose": "head, with the key \"space name.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/percent%20.txt",
+ "key": "object-tests/keys/space name.txt",
"op": "head"
},
"exchanges": [
@@ -184507,7 +193989,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/percent%20.txt"
+ "value": "/object-tests/keys/space name.txt"
}
},
{
@@ -184615,15 +194097,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-plus",
+ "id": "operations/s3-express/head-key-non-ascii",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"plus+plus.txt\"",
+ "purpose": "head, with the key \"café/雪.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/plus+plus.txt",
+ "key": "object-tests/keys/café/雪.txt",
"op": "head"
},
"exchanges": [
@@ -184717,7 +194199,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/plus+plus.txt"
+ "value": "/object-tests/keys/café/雪.txt"
}
},
{
@@ -184825,15 +194307,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-space",
+ "id": "operations/s3-express/head-key-double-slash",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"space name.txt\"",
+ "purpose": "head, with the key \"double//slash.txt\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/space name.txt",
+ "key": "object-tests/keys/double//slash.txt",
"op": "head"
},
"exchanges": [
@@ -184927,7 +194409,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/space name.txt"
+ "value": "/object-tests/keys/double//slash.txt"
}
},
{
@@ -185035,15 +194517,15 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-non-ascii",
+ "id": "operations/s3-express/head-key-trailing-slash",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"café/雪.txt\"",
+ "purpose": "head, with the key \"trailing-slash/\"",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
- "key": "object-tests/keys/café/雪.txt",
+ "key": "object-tests/keys/trailing-slash/",
"op": "head"
},
"exchanges": [
@@ -185137,7 +194619,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/café/雪.txt"
+ "value": "/object-tests/keys/trailing-slash/"
}
},
{
@@ -185245,15 +194727,17 @@
"refusal": null
},
{
- "id": "operations/s3-express/head-key-double-slash",
+ "id": "operations/s3-express/head-checksum",
"profile": "s3-express",
"lane": "core",
- "purpose": "head, with the key \"double//slash.txt\"",
+ "purpose": "Ask a HEAD for the object's checksum with x-amz-checksum-mode: ENABLED, and report it",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html"
],
"call": {
- "key": "object-tests/keys/double//slash.txt",
+ "checksum_mode": true,
+ "key": "object-tests/read/object.txt",
"op": "head"
},
"exchanges": [
@@ -185347,7 +194831,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "/object-tests/keys/double//slash.txt"
+ "value": "/object-tests/read/object.txt"
}
},
{
@@ -185381,215 +194865,13 @@
"is": "matches",
"pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-length": "30",
- "content-type": "binary/octet-stream",
- "date": {
- "from": "now"
- },
- "etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
- },
- "body": {
- "encoding": "base64",
- "data": ""
- }
- }
- }
- ]
- }
- ],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-672b31e65569\""
- }
- },
- {
- "at": "/value/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 30
- }
- },
- {
- "at": "/value/content_type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "binary/octet-stream"
- }
- },
- {
- "at": "/value/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/head-key-trailing-slash",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "head, with the key \"trailing-slash/\"",
- "sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
- ],
- "call": {
- "key": "object-tests/keys/trailing-slash/",
- "op": "head"
- },
- "exchanges": [
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
},
{
- "at": "/path",
+ "at": "/headers/x-amz-checksum-mode",
"optional": false,
"rule": {
"is": "equal",
- "value": "/"
- }
- },
- {
- "at": "/query/session",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "absent"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 200,
- "headers": {
- "content-type": "application/xml"
- },
- "body": {
- "encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
- },
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
- }
- }
- ]
- },
- {
- "alternatives": [
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "HEAD"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/object-tests/keys/trailing-slash/"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
- }
- },
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "value": "ENABLED"
}
}
],
@@ -185606,7 +194888,9 @@
"from": "now"
},
"etag": "\"fixture-672b31e65569\"",
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT",
+ "x-amz-checksum-crc64nvme": "efafnZ4dTjo=",
+ "x-amz-checksum-type": "FULL_OBJECT"
},
"body": {
"encoding": "base64",
@@ -185660,6 +194944,18 @@
""
]
}
+ },
+ {
+ "at": "/value/checksum",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": {
+ "algorithm": "crc64nvme",
+ "type": "full_object",
+ "value_base64": "efafnZ4dTjo="
+ }
+ }
}
],
"refusal": null
@@ -188225,38 +197521,1353 @@
}
},
{
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 10
- }
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 10
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-first-page",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Send page_size as max-keys, and report a truncated page's NextContinuationToken as the continuation token",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "op": "list_page",
+ "page_size": 2,
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=22trueCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ }
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=22urltrueCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/entries/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/z.txt"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-7d1b875717fa\""
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/nested/c.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-d9b959b4d7a6\""
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-marker+/88ab99096baf="
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-service-unavailable",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report a 503 ServiceUnavailable answer as an error, after at most 5 retries",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
+ ],
+ "origin": "transient",
+ "call": {
+ "op": "list_page",
+ "page_size": 2,
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ }
+ ],
+ "optional": true
},
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
- }
- }
- ],
- "refusal": null
- },
- {
- "id": "operations/s3-express/list-first-page",
- "profile": "s3-express",
- "lane": "core",
- "purpose": "Send page_size as max-keys, and report a truncated page's NextContinuationToken as the continuation token",
- "sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
- ],
- "call": {
- "op": "list_page",
- "page_size": 2,
- "prefix": "object-tests/board/"
- },
- "exchanges": [
{
"alternatives": [
{
@@ -188278,13 +198889,37 @@
}
},
{
- "at": "/query/session",
+ "at": "/body_base64",
"optional": false,
"rule": {
"is": "equal",
"value": ""
}
},
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -188293,19 +198928,122 @@
"value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
{
"at": "/headers/authorization",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 503,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
+ }
+ },
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/"
+ }
+ },
+ {
+ "at": "/query/max-keys",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "2"
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
"at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "absent"
+ "is": "equal",
+ "value": "fixture-session-token"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/query/encoding-type",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "url"
}
}
],
@@ -188314,21 +199052,22 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 503,
"headers": {
- "content-type": "application/xml"
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ }
},
"body": {
"encoding": "utf8",
- "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
},
- "body_time": {
- "text": "SESSION_EXPIRATION",
- "offset_seconds": 300
- }
+ "framing": "chunked"
}
}
- ]
+ ],
+ "optional": true
},
{
"alternatives": [
@@ -188412,18 +199151,18 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 503,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=22trueCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
- }
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
}
},
{
@@ -188514,21 +199253,22 @@
],
"allow_query": [],
"response": {
- "status": 200,
+ "status": 503,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- },
- "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ }
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=22urltrueCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
- }
+ "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ },
+ "framing": "chunked"
}
}
- ]
+ ],
+ "optional": true
}
],
"expect": [
@@ -188537,162 +199277,39 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/z.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-7d1b875717fa\""
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/nested/c.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
+ "value": "error"
}
},
{
- "at": "/value/entries/1/etag",
+ "at": "/status",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-d9b959b4d7a6\""
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "value": 503
}
},
{
- "at": "/value/continuation_token",
+ "at": "/code",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-marker+/88ab99096baf="
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 2
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 0
+ "value": "ServiceUnavailable"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/list-service-unavailable",
+ "id": "operations/s3-express/list-max-keys-zero",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report a 503 ServiceUnavailable answer as an error, after at most 5 retries",
+ "purpose": "Send page_size 0 as max-keys=0; S3 answers an empty page that is not truncated",
"sources": [
- "https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html"
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
- "origin": "transient",
"call": {
"op": "list_page",
- "page_size": 2,
+ "page_size": 0,
"prefix": "object-tests/board/"
},
"exchanges": [
@@ -188818,7 +199435,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "0"
}
},
{
@@ -188851,18 +199468,18 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/board/00false"
+ }
}
},
{
@@ -188912,7 +199529,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "0"
}
},
{
@@ -188953,18 +199570,143 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/board/00urlfalse"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-next-page",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Send the continuation token as continuation-token, a + in it as %2B, and report an empty token for the last page",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "continuation_token": "fixture-marker+/88ab99096baf=",
+ "op": "list_page",
+ "page_size": 2,
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
}
},
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
]
@@ -189021,6 +199763,14 @@
"value": "2"
}
},
+ {
+ "at": "/query/continuation-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-marker+/88ab99096baf="
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -189051,18 +199801,18 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=12falseCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ }
}
},
{
@@ -189115,6 +199865,14 @@
"value": "2"
}
},
+ {
+ "at": "/query/continuation-token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-marker+/88ab99096baf="
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -189153,22 +199911,202 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml",
+ "date": {
+ "from": "now"
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixtureobject-tests/board/Aa76REiOO0gPR6lKkFyUFtl1AAAAAAAAAAGoXKBqAAAAAAQAAAAAAAAAscQ7ZzgAAAAAAAAAQUI4QUFBQUFBQUFBYjJKcVpXTjBMWFJsYzNSekwySnZZWEprTDI1bGMzUmxaQzlqTG5SNGRBRT3cnmYCxwsmD0raHf15FaRAP0L8TRD3Kes0lU2EWDoJdA==12urlfalseCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/entries/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/a.txt"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 8
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ca40e4206a8d\""
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-order-delimited",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report the entries and the common prefixes in the order a directory bucket sends them, without sorting them",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "delimiter": "/",
+ "op": "list_page",
+ "prefix": "object-tests/order/"
+ },
+ "exchanges": [
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "GET"
+ }
+ },
+ {
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/query/session",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/headers/host",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ }
+ },
+ {
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
"headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
- ],
- "optional": true
+ ]
},
{
"alternatives": [
@@ -189211,15 +200149,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "object-tests/order/"
}
},
{
- "at": "/query/max-keys",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "/"
}
},
{
@@ -189252,18 +200190,18 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/order/81000falseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/é2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT/object-tests/order/a/"
+ }
}
},
{
@@ -189305,15 +200243,15 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "object-tests/order/"
}
},
{
- "at": "/query/max-keys",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "/"
}
},
{
@@ -189354,23 +200292,479 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/order/81000urlfalseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/%C3%A92024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT/object-tests/order/a/"
+ }
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/entries/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-67e7081fe36a\""
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/é"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-e93bd77ca678\""
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a0"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-b6a492ea4100\""
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a.txt"
+ }
+ },
+ {
+ "at": "/value/entries/3/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/3/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-3a908dcdb129\""
+ }
},
+ {
+ "at": "/value/entries/3/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/A"
+ }
+ },
+ {
+ "at": "/value/entries/4/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/4/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-a19aa03709bc\""
+ }
+ },
+ {
+ "at": "/value/entries/4/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a-b"
+ }
+ },
+ {
+ "at": "/value/entries/5/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/5/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-62a88dc05318\""
+ }
+ },
+ {
+ "at": "/value/entries/5/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/b"
+ }
+ },
+ {
+ "at": "/value/entries/6/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/6/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-58bd4a8a6eb3\""
+ }
+ },
+ {
+ "at": "/value/entries/6/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/prefixes/0",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a/"
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 7
+ }
+ },
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 1
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-order",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report the entries in the order a directory bucket sends them, which is not sorted, without sorting them again",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "op": "list_page",
+ "prefix": "object-tests/order/"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -189392,7 +200786,7 @@
}
},
{
- "at": "/body_base64",
+ "at": "/query/session",
"optional": false,
"rule": {
"is": "equal",
@@ -189400,29 +200794,94 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/authorization",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ }
+ },
+ {
+ "at": "/headers/x-amz-s3session-token",
+ "optional": false,
+ "rule": {
+ "is": "absent"
+ }
+ }
+ ],
+ "allow_headers": [
+ "content-type"
+ ],
+ "allow_query": [],
+ "response": {
+ "status": 200,
+ "headers": {
+ "content-type": "application/xml"
+ },
+ "body": {
+ "encoding": "utf8",
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
+ },
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
+ }
+ }
+ ]
+ },
+ {
+ "alternatives": [
+ {
+ "request": [
+ {
+ "at": "/method",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "GET"
}
},
{
- "at": "/query/max-keys",
+ "at": "/path",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "/"
+ }
+ },
+ {
+ "at": "/body_base64",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/query/list-type",
"optional": false,
"rule": {
"is": "equal",
"value": "2"
}
},
+ {
+ "at": "/query/prefix",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/"
+ }
+ },
{
"at": "/headers/host",
"optional": false,
@@ -189453,18 +200912,18 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/order/81000falseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/é2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-bdef091a4e21"object-tests/order/a/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ }
}
},
{
@@ -189506,15 +200965,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/max-keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
+ "value": "object-tests/order/"
}
},
{
@@ -189555,23 +201006,529 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
+ "data": "\nfixtureobject-tests/order/81000urlfalseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/%C3%A92024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-bdef091a4e21"object-tests/order/a/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ }
}
}
- ],
- "optional": true
+ ]
+ }
+ ],
+ "expect": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/entries/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-67e7081fe36a\""
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/é"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-e93bd77ca678\""
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a0"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-b6a492ea4100\""
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a.txt"
+ }
+ },
+ {
+ "at": "/value/entries/3/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/3/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-3a908dcdb129\""
+ }
+ },
+ {
+ "at": "/value/entries/3/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/3/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/A"
+ }
+ },
+ {
+ "at": "/value/entries/4/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/4/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-a19aa03709bc\""
+ }
+ },
+ {
+ "at": "/value/entries/4/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/4/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a/b"
+ }
+ },
+ {
+ "at": "/value/entries/5/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/5/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-bdef091a4e21\""
+ }
+ },
+ {
+ "at": "/value/entries/5/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/5/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/a-b"
+ }
+ },
+ {
+ "at": "/value/entries/6/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/6/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-62a88dc05318\""
+ }
+ },
+ {
+ "at": "/value/entries/6/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/6/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/7/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/order/b"
+ }
+ },
+ {
+ "at": "/value/entries/7/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/7/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-58bd4a8a6eb3\""
+ }
+ },
+ {
+ "at": "/value/entries/7/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/7/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/7/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/continuation_token",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": ""
+ }
+ },
+ {
+ "at": "/value/entries",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 8
+ }
},
+ {
+ "at": "/value/prefixes",
+ "optional": false,
+ "rule": {
+ "is": "array_length",
+ "value": 0
+ }
+ }
+ ],
+ "refusal": null
+ },
+ {
+ "id": "operations/s3-express/list-other-delimiter",
+ "profile": "s3-express",
+ "lane": "core",
+ "purpose": "Report the 400 InvalidRequest that a directory bucket answers to a delimiter other than /, or refuse it before sending",
+ "sources": [
+ "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ ],
+ "call": {
+ "delimiter": "-",
+ "op": "list_page",
+ "prefix": "object-tests/board/"
+ },
+ "exchanges": [
{
"alternatives": [
{
@@ -189593,37 +201550,13 @@
}
},
{
- "at": "/body_base64",
+ "at": "/query/session",
"optional": false,
"rule": {
"is": "equal",
"value": ""
}
},
- {
- "at": "/query/list-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/max-keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -189632,122 +201565,19 @@
"value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
- {
- "at": "/headers/x-amz-s3session-token",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
{
"at": "/headers/authorization",
"optional": false,
"rule": {
"is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- }
- ],
- "allow_headers": [
- "content-type"
- ],
- "allow_query": [],
- "response": {
- "status": 503,
- "headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
- },
- "body": {
- "encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
- },
- "framing": "chunked"
- }
- },
- {
- "request": [
- {
- "at": "/method",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "GET"
- }
- },
- {
- "at": "/path",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "/"
- }
- },
- {
- "at": "/body_base64",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": ""
- }
- },
- {
- "at": "/query/list-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/max-keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/headers/host",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "pattern": "AWS4-HMAC-SHA256 Credential=offline/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
"at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
- }
- },
- {
- "at": "/query/encoding-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "url"
+ "is": "absent"
}
}
],
@@ -189756,22 +201586,21 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 200,
"headers": {
- "content-type": "application/xml",
- "date": {
- "from": "now"
- }
+ "content-type": "application/xml"
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ "data": "\nfixture-session-tokenfixture-secret-keyfixture-access-keySESSION_EXPIRATION"
},
- "framing": "chunked"
+ "body_time": {
+ "text": "SESSION_EXPIRATION",
+ "offset_seconds": 300
+ }
}
}
- ],
- "optional": true
+ ]
},
{
"alternatives": [
@@ -189818,11 +201647,11 @@
}
},
{
- "at": "/query/max-keys",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "-"
}
},
{
@@ -189855,7 +201684,7 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
@@ -189864,7 +201693,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ "data": "\nInvalidRequestFixture error"
},
"framing": "chunked"
}
@@ -189912,11 +201741,11 @@
}
},
{
- "at": "/query/max-keys",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "-"
}
},
{
@@ -189957,7 +201786,7 @@
],
"allow_query": [],
"response": {
- "status": 503,
+ "status": 400,
"headers": {
"content-type": "application/xml",
"date": {
@@ -189966,13 +201795,12 @@
},
"body": {
"encoding": "utf8",
- "data": "\nServiceUnavailablePlease reduce your request rate.fixture"
+ "data": "\nInvalidRequestThis bucket only supports '/' as a delimiter01a36c7dc10001a08269f29d0c1a80c2547f97e2NIAczpdqY"
},
"framing": "chunked"
}
}
- ],
- "optional": true
+ ]
}
],
"expect": [
@@ -189989,7 +201817,7 @@
"optional": false,
"rule": {
"is": "equal",
- "value": 503
+ "value": 400
}
},
{
@@ -189997,23 +201825,63 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "ServiceUnavailable"
+ "value": "InvalidRequest"
}
}
],
- "refusal": null
+ "refusal": [
+ {
+ "at": "/outcome",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "refused"
+ }
+ },
+ {
+ "at": "/kind",
+ "optional": false,
+ "rule": {
+ "is": "matches",
+ "pattern": ".+"
+ }
+ },
+ {
+ "at": "/parameter",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "delimiter"
+ }
+ },
+ {
+ "at": "/status",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": 400
+ }
+ },
+ {
+ "at": "/code",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "InvalidRequest"
+ }
+ }
+ ]
},
{
- "id": "operations/s3-express/list-max-keys-zero",
+ "id": "operations/s3-express/list-page",
"profile": "s3-express",
"lane": "core",
- "purpose": "Send page_size 0 as max-keys=0; S3 answers an empty page that is not truncated",
+ "purpose": "List a prefix with ListObjectsV2 (list-type=2), and report each entry's key, size and ETag, quotes included",
"sources": [
"aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
],
"call": {
"op": "list_page",
- "page_size": 0,
"prefix": "object-tests/board/"
},
"exchanges": [
@@ -190134,14 +202002,6 @@
"value": "object-tests/board/"
}
},
- {
- "at": "/query/max-keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "0"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -190182,7 +202042,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/00false"
+ "data": "\nfixtureobject-tests/board/31000falseCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
}
}
},
@@ -190228,14 +202088,6 @@
"value": "object-tests/board/"
}
},
- {
- "at": "/query/max-keys",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "0"
- }
- },
{
"at": "/headers/host",
"optional": false,
@@ -190284,7 +202136,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/00urlfalse"
+ "data": "\nfixtureobject-tests/board/31000urlfalseCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
}
}
}
@@ -190300,6 +202152,177 @@
"value": "ok"
}
},
+ {
+ "at": "/value/entries/0/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/z.txt"
+ }
+ },
+ {
+ "at": "/value/entries/0/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 2
+ }
+ },
+ {
+ "at": "/value/entries/0/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-7d1b875717fa\""
+ }
+ },
+ {
+ "at": "/value/entries/0/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/0/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/nested/c.txt"
+ }
+ },
+ {
+ "at": "/value/entries/1/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 1
+ }
+ },
+ {
+ "at": "/value/entries/1/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-d9b959b4d7a6\""
+ }
+ },
+ {
+ "at": "/value/entries/1/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/1/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/key",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "object-tests/board/a.txt"
+ }
+ },
+ {
+ "at": "/value/entries/2/size",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": 8
+ }
+ },
+ {
+ "at": "/value/entries/2/etag",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "\"fixture-ca40e4206a8d\""
+ }
+ },
+ {
+ "at": "/value/entries/2/snapshot",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ ""
+ ]
+ }
+ },
+ {
+ "at": "/value/entries/2/is_current_version",
+ "optional": true,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ null,
+ false
+ ]
+ }
+ },
{
"at": "/value/continuation_token",
"optional": false,
@@ -190313,7 +202336,7 @@
"optional": false,
"rule": {
"is": "array_length",
- "value": 0
+ "value": 3
}
},
{
@@ -190328,18 +202351,16 @@
"refusal": null
},
{
- "id": "operations/s3-express/list-next-page",
+ "id": "operations/s3-express/list-uploads",
"profile": "s3-express",
"lane": "core",
- "purpose": "Send the continuation token as continuation-token, a + in it as %2B, and report an empty token for the last page",
+ "purpose": "List the multipart uploads in progress under a prefix with ListMultipartUploads, a GET with ?uploads, and report each upload's key and upload ID, in key order",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
],
"call": {
- "continuation_token": "fixture-marker+/88ab99096baf=",
- "op": "list_page",
- "page_size": 2,
- "prefix": "object-tests/board/"
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
},
"exchanges": [
{
@@ -190444,59 +202465,46 @@
}
},
{
- "at": "/query/list-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/query/prefix",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/max-keys",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture-session-token"
}
},
{
- "at": "/query/continuation-token",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-marker+/88ab99096baf="
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/host",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
- }
- },
- {
- "at": "/headers/authorization",
- "optional": false,
- "rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "value": "object-tests/uploads/"
}
}
],
@@ -190515,7 +202523,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/fixture-marker+/88ab99096baf=12falseCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000falseobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Zobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
},
@@ -190546,67 +202554,54 @@
}
},
{
- "at": "/query/list-type",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "2"
- }
- },
- {
- "at": "/query/prefix",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/"
- }
- },
- {
- "at": "/query/max-keys",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/continuation-token",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-marker+/88ab99096baf="
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/encoding-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "url"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/query/encoding-type",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "url"
+ "value": "object-tests/uploads/"
}
}
],
@@ -190625,7 +202620,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/Aa76REiOO0gPR6lKkFyUFtl1AAAAAAAAAAGoXKBqAAAAAAQAAAAAAAAAscQ7ZzgAAAAAAAAAQUI4QUFBQUFBQUFBYjJKcVpXTjBMWFJsYzNSekwySnZZWEprTDI1bGMzUmxaQzlqTG5SNGRBRT3cnmYCxwsmD0raHf15FaRAP0L8TRD3Kes0lU2EWDoJdA==12urlfalseCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/b.binfixture-upload-bobject-tests/uploads/1000urlfalseobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Zobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
}
@@ -190642,101 +202637,76 @@
}
},
{
- "at": "/value/entries/0/key",
+ "at": "/value/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "object-tests/board/a.txt"
+ "is": "array_length",
+ "value": 2
}
},
{
- "at": "/value/entries/0/size",
+ "at": "/value/uploads/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": 8
+ "value": "object-tests/uploads/a.bin"
}
},
{
- "at": "/value/entries/0/etag",
+ "at": "/value/uploads/0/upload_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-ca40e4206a8d\""
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "fixture-upload-a"
}
},
{
- "at": "/value/entries/0/is_current_version",
- "optional": true,
+ "at": "/value/uploads/1/key",
+ "optional": false,
"rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "is": "equal",
+ "value": "object-tests/uploads/b.bin"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/uploads/1/upload_id",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "fixture-upload-b"
}
},
{
- "at": "/value/entries",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
"is": "array_length",
- "value": 1
+ "value": 0
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/is_truncated",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": false
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/list-order-delimited",
+ "id": "operations/s3-express/list-uploads-page",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report the entries and the common prefixes in the order a directory bucket sends them, without sorting them",
+ "purpose": "List one upload a page with max-uploads=1. A truncated page names the next page's start in NextKeyMarker and NextUploadIdMarker, which a client reports",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
],
"call": {
- "delimiter": "/",
- "op": "list_page",
- "prefix": "object-tests/order/"
+ "op": "s3.list_uploads",
+ "page_size": 1,
+ "prefix": "object-tests/uploads/"
},
"exchanges": [
{
@@ -190841,51 +202811,54 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "/"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/host",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "object-tests/uploads/"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/max-uploads",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "1"
}
}
],
@@ -190904,7 +202877,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/order/81000falseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/é2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT/object-tests/order/a/"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/a.binfixture-upload-aobject-tests/uploads/1trueobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
},
@@ -190935,59 +202908,62 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "/"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/host",
+ "at": "/query/encoding-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "value": "url"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/prefix",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "object-tests/uploads/"
}
},
{
- "at": "/query/encoding-type",
+ "at": "/query/max-uploads",
"optional": false,
"rule": {
"is": "equal",
- "value": "url"
+ "value": "1"
}
}
],
@@ -191006,467 +202982,93 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/order/81000urlfalseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/%C3%A92024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT/object-tests/order/a/"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/a.binfixture-upload-aobject-tests/uploads/1urltrueobject-tests/uploads/a.binfixture-upload-afixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
}
]
}
],
- "expect": [
- {
- "at": "/outcome",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "ok"
- }
- },
- {
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-67e7081fe36a\""
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/é"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-e93bd77ca678\""
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a0"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b6a492ea4100\""
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/3/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a.txt"
- }
- },
- {
- "at": "/value/entries/3/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/3/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-3a908dcdb129\""
- }
- },
- {
- "at": "/value/entries/3/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/3/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/3/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/4/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/A"
- }
- },
- {
- "at": "/value/entries/4/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/4/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-a19aa03709bc\""
- }
- },
- {
- "at": "/value/entries/4/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/4/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/4/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
+ "expect": [
{
- "at": "/value/entries/5/key",
+ "at": "/outcome",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a-b"
+ "value": "ok"
}
},
{
- "at": "/value/entries/5/size",
+ "at": "/value/uploads",
"optional": false,
"rule": {
- "is": "equal",
+ "is": "array_length",
"value": 1
}
},
{
- "at": "/value/entries/5/etag",
+ "at": "/value/uploads/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-62a88dc05318\""
- }
- },
- {
- "at": "/value/entries/5/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/5/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
+ "value": "object-tests/uploads/a.bin"
}
},
{
- "at": "/value/entries/5/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/6/key",
+ "at": "/value/uploads/0/upload_id",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/b"
+ "value": "fixture-upload-a"
}
},
{
- "at": "/value/entries/6/size",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "equal",
- "value": 1
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/entries/6/etag",
+ "at": "/value/is_truncated",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-58bd4a8a6eb3\""
- }
- },
- {
- "at": "/value/entries/6/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "value": true
}
},
{
- "at": "/value/prefixes/0",
+ "at": "/value/next_key_marker",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/a/"
+ "value": "object-tests/uploads/a.bin"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/next_upload_id_marker",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
- }
- },
- {
- "at": "/value/entries",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 7
- }
- },
- {
- "at": "/value/prefixes",
- "optional": false,
- "rule": {
- "is": "array_length",
- "value": 1
+ "value": "fixture-upload-a"
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/list-order",
+ "id": "operations/s3-express/list-uploads-after-key",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report the entries in the order a directory bucket sends them, which is not sorted, without sorting them again",
+ "purpose": "On a directory bucket, list the uploads after the first page by passing its NextKeyMarker, an opaque token, in key-marker. A key there is refused with 400 InvalidArgument",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/order/"
+ "key_marker": "fixture-next-key-marker",
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
},
"exchanges": [
{
@@ -191571,43 +203173,54 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/uploads",
+ "optional": false,
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
+ }
+ },
+ {
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "object-tests/uploads/"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/key-marker",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "fixture-next-key-marker"
}
}
],
@@ -191626,7 +203239,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/order/81000falseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/é2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-bdef091a4e21"object-tests/order/a/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3fixture-next-key-markerobject-tests/uploads/1000falseobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
},
@@ -191657,51 +203270,62 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/order/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/encoding-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "url"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/query/encoding-type",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "url"
+ "value": "object-tests/uploads/"
+ }
+ },
+ {
+ "at": "/query/key-marker",
+ "optional": false,
+ "rule": {
+ "is": "equal",
+ "value": "fixture-next-key-marker"
}
}
],
@@ -191720,7 +203344,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/order/81000urlfalseCRC64NVME"fixture-67e7081fe36a"object-tests/order/a2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-e93bd77ca678"object-tests/order/%C3%A92024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-b6a492ea4100"object-tests/order/a02024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-3a908dcdb129"object-tests/order/a.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-a19aa03709bc"object-tests/order/A2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-bdef091a4e21"object-tests/order/a/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-62a88dc05318"object-tests/order/a-b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-58bd4a8a6eb3"object-tests/order/b2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3fixture-next-key-markerobject-tests/uploads/1000urlfalseobject-tests/uploads/b.binfixture-upload-bfixture-initiatorfixture-initiatorEXPRESS_ONEZONE2024-01-01T00:00:00.000Z"
}
}
}
@@ -191737,500 +203361,60 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-67e7081fe36a\""
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/é"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-e93bd77ca678\""
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a0"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-b6a492ea4100\""
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/3/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a.txt"
- }
- },
- {
- "at": "/value/entries/3/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/3/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-3a908dcdb129\""
- }
- },
- {
- "at": "/value/entries/3/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/3/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/3/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/4/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/A"
- }
- },
- {
- "at": "/value/entries/4/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/4/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-a19aa03709bc\""
- }
- },
- {
- "at": "/value/entries/4/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/4/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/4/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/5/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a/b"
- }
- },
- {
- "at": "/value/entries/5/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/5/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-bdef091a4e21\""
- }
- },
- {
- "at": "/value/entries/5/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/5/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/5/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/6/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/a-b"
- }
- },
- {
- "at": "/value/entries/6/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/6/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-62a88dc05318\""
- }
- },
- {
- "at": "/value/entries/6/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/6/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/7/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/order/b"
- }
- },
- {
- "at": "/value/entries/7/size",
+ "at": "/value/uploads",
"optional": false,
"rule": {
- "is": "equal",
+ "is": "array_length",
"value": 1
}
},
{
- "at": "/value/entries/7/etag",
+ "at": "/value/uploads/0/key",
"optional": false,
"rule": {
"is": "equal",
- "value": "\"fixture-58bd4a8a6eb3\""
- }
- },
- {
- "at": "/value/entries/7/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/7/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/7/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
+ "value": "object-tests/uploads/b.bin"
}
},
{
- "at": "/value/continuation_token",
+ "at": "/value/uploads/0/upload_id",
"optional": false,
"rule": {
"is": "equal",
- "value": ""
+ "value": "fixture-upload-b"
}
},
{
- "at": "/value/entries",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
"is": "array_length",
- "value": 8
+ "value": 0
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/is_truncated",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": false
}
}
],
"refusal": null
},
{
- "id": "operations/s3-express/list-other-delimiter",
+ "id": "operations/s3-express/list-uploads-delimited",
"profile": "s3-express",
"lane": "core",
- "purpose": "Report the 400 InvalidRequest that a directory bucket answers to a delimiter other than /, or refuse it before sending",
+ "purpose": "List uploads with delimiter=/: the uploads under a deeper prefix are reported as that common prefix",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
],
"call": {
- "delimiter": "-",
- "op": "list_page",
- "prefix": "object-tests/board/"
+ "delimiter": "/",
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/"
},
"exchanges": [
{
@@ -192335,51 +203519,54 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "-"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/host",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "object-tests/"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "/"
}
}
],
@@ -192388,18 +203575,18 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nInvalidRequestFixture error"
- },
- "framing": "chunked"
+ "data": "\nfixture--euc1-az1--x-s3/object-tests/1000falseobject-tests/uploads/"
+ }
}
},
{
@@ -192429,59 +203616,62 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/query/delimiter",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "-"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/host",
+ "at": "/query/encoding-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "value": "url"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/prefix",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "object-tests/"
}
},
{
- "at": "/query/encoding-type",
+ "at": "/query/delimiter",
"optional": false,
"rule": {
"is": "equal",
- "value": "url"
+ "value": "/"
}
}
],
@@ -192490,18 +203680,18 @@
],
"allow_query": [],
"response": {
- "status": 400,
+ "status": 200,
"headers": {
"content-type": "application/xml",
"date": {
"from": "now"
- }
+ },
+ "last-modified": "Mon, 01 Jan 2024 00:00:00 GMT"
},
"body": {
"encoding": "utf8",
- "data": "\nInvalidRequestThis bucket only supports '/' as a delimiter01a36c7dc10001a08269f29d0c1a80c2547f97e2NIAczpdqY"
- },
- "framing": "chunked"
+ "data": "\nfixture--euc1-az1--x-s3/object-tests/1000urlfalseobject-tests/uploads/"
+ }
}
}
]
@@ -192513,80 +203703,55 @@
"optional": false,
"rule": {
"is": "equal",
- "value": "error"
- }
- },
- {
- "at": "/status",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "ok"
}
},
{
- "at": "/code",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "InvalidRequest"
- }
- }
- ],
- "refusal": [
- {
- "at": "/outcome",
+ "at": "/value/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "refused"
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/kind",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": ".+"
+ "is": "array_length",
+ "value": 1
}
},
{
- "at": "/parameter",
+ "at": "/value/prefixes/0",
"optional": false,
"rule": {
"is": "equal",
- "value": "delimiter"
- }
- },
- {
- "at": "/status",
- "optional": true,
- "rule": {
- "is": "equal",
- "value": 400
+ "value": "object-tests/uploads/"
}
},
{
- "at": "/code",
- "optional": true,
+ "at": "/value/is_truncated",
+ "optional": false,
"rule": {
"is": "equal",
- "value": "InvalidRequest"
+ "value": false
}
}
- ]
+ ],
+ "refusal": null
},
{
- "id": "operations/s3-express/list-page",
+ "id": "operations/s3-express/list-uploads-none",
"profile": "s3-express",
"lane": "core",
- "purpose": "List a prefix with ListObjectsV2 (list-type=2), and report each entry's key, size and ETag, quotes included",
+ "purpose": "List a prefix with no upload in progress: an empty list, not an error",
"sources": [
- "aws-sdk-cpp/generated/src/aws-cpp-sdk-s3-crt"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html"
],
"call": {
- "op": "list_page",
- "prefix": "object-tests/board/"
+ "op": "s3.list_uploads",
+ "prefix": "object-tests/uploads/"
},
"exchanges": [
{
@@ -192691,43 +203856,46 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture-session-token"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/prefix",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "equal",
+ "value": "object-tests/uploads/"
}
}
],
@@ -192746,7 +203914,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/31000falseCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/1000false"
}
}
},
@@ -192777,51 +203945,54 @@
}
},
{
- "at": "/query/list-type",
+ "at": "/headers/host",
"optional": false,
"rule": {
"is": "equal",
- "value": "2"
+ "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
}
},
{
- "at": "/query/prefix",
+ "at": "/headers/x-amz-s3session-token",
"optional": false,
"rule": {
"is": "equal",
- "value": "object-tests/board/"
+ "value": "fixture-session-token"
}
},
{
- "at": "/headers/host",
+ "at": "/headers/authorization",
"optional": false,
"rule": {
- "is": "equal",
- "value": "fixture--euc1-az1--x-s3.s3express-euc1-az1.fixture.invalid"
+ "is": "matches",
+ "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
}
},
{
- "at": "/headers/x-amz-s3session-token",
+ "at": "/query/encoding-type",
"optional": false,
"rule": {
"is": "equal",
- "value": "fixture-session-token"
+ "value": "url"
}
},
{
- "at": "/headers/authorization",
+ "at": "/query/uploads",
"optional": false,
"rule": {
- "is": "matches",
- "pattern": "AWS4-HMAC-SHA256 Credential=fixture-access-key/[0-9]{8}/eu-central-1/s3express/aws4_request, SignedHeaders=.+, Signature=[a-f0-9]{64}"
+ "is": "one_of",
+ "values": [
+ "",
+ "uploads"
+ ]
}
},
{
- "at": "/query/encoding-type",
+ "at": "/query/prefix",
"optional": false,
"rule": {
"is": "equal",
- "value": "url"
+ "value": "object-tests/uploads/"
}
}
],
@@ -192840,7 +204011,7 @@
},
"body": {
"encoding": "utf8",
- "data": "\nfixtureobject-tests/board/31000urlfalseCRC64NVME"fixture-7d1b875717fa"object-tests/board/z.txt2024-01-01T00:00:00.000Z2EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-d9b959b4d7a6"object-tests/board/nested/c.txt2024-01-01T00:00:00.000Z1EXPRESS_ONEZONEFULL_OBJECTCRC64NVME"fixture-ca40e4206a8d"object-tests/board/a.txt2024-01-01T00:00:00.000Z8EXPRESS_ONEZONEFULL_OBJECT"
+ "data": "\nfixture--euc1-az1--x-s3object-tests/uploads/1000urlfalse"
}
}
}
@@ -192857,198 +204028,27 @@
}
},
{
- "at": "/value/entries/0/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/z.txt"
- }
- },
- {
- "at": "/value/entries/0/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 2
- }
- },
- {
- "at": "/value/entries/0/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-7d1b875717fa\""
- }
- },
- {
- "at": "/value/entries/0/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/0/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/1/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/nested/c.txt"
- }
- },
- {
- "at": "/value/entries/1/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 1
- }
- },
- {
- "at": "/value/entries/1/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-d9b959b4d7a6\""
- }
- },
- {
- "at": "/value/entries/1/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/1/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/entries/2/key",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "object-tests/board/a.txt"
- }
- },
- {
- "at": "/value/entries/2/size",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": 8
- }
- },
- {
- "at": "/value/entries/2/etag",
- "optional": false,
- "rule": {
- "is": "equal",
- "value": "\"fixture-ca40e4206a8d\""
- }
- },
- {
- "at": "/value/entries/2/snapshot",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- ""
- ]
- }
- },
- {
- "at": "/value/entries/2/is_current_version",
- "optional": true,
- "rule": {
- "is": "one_of",
- "values": [
- null,
- false
- ]
- }
- },
- {
- "at": "/value/continuation_token",
+ "at": "/value/uploads",
"optional": false,
"rule": {
- "is": "equal",
- "value": ""
+ "is": "array_length",
+ "value": 0
}
},
{
- "at": "/value/entries",
+ "at": "/value/prefixes",
"optional": false,
"rule": {
"is": "array_length",
- "value": 3
+ "value": 0
}
},
{
- "at": "/value/prefixes",
+ "at": "/value/is_truncated",
"optional": false,
"rule": {
- "is": "array_length",
- "value": 0
+ "is": "equal",
+ "value": false
}
}
],
diff --git a/cases/vectors.json b/cases/vectors.json
index 0635b6d..1c49fbb 100644
--- a/cases/vectors.json
+++ b/cases/vectors.json
@@ -132,8 +132,8 @@
]
},
{
- "id": "azure/hmac-sha256-rfc4231",
- "profile": "azure",
+ "id": "s3/hmac-sha256-rfc4231",
+ "profile": "s3",
"lane": "vectors",
"purpose": "RFC 4231 test case 1.",
"sources": [
@@ -162,17 +162,28 @@
]
},
{
- "id": "s3/hmac-sha256-rfc4231",
+ "id": "s3/sigv4-get-range",
"profile": "s3",
"lane": "vectors",
- "purpose": "RFC 4231 test case 1.",
+ "purpose": "Sign the AWS documentation's GET with a range header. The exact signature catches canonicalization and key-derivation errors",
"sources": [
- "https://www.rfc-editor.org/rfc/rfc4231#section-4.2"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
],
"call": {
- "op": "hmac_sha256",
- "key_base64": "CwsLCwsLCwsLCwsLCwsLCwsLCws=",
- "body_base64": "SGkgVGhlcmU="
+ "op": "s3.sign",
+ "method": "GET",
+ "url": "https://examplebucket.s3.amazonaws.com/test.txt",
+ "headers": {
+ "range": "bytes=0-9"
+ },
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
},
"expect": [
{
@@ -183,29 +194,38 @@
}
},
{
- "at": "/value/digest_base64",
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;range;x-amz-content-sha256;x-amz-date,Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-content-sha256;x-amz-date, Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
"rule": {
"is": "equal",
- "value": "sDRMYdjbOFNcqK/OrwvxK4gdwgDJgz2nJuk3bC4yz/c="
+ "value": "GET\n/test.txt\n\nhost:examplebucket.s3.amazonaws.com\nrange:bytes=0-9\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;range;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
]
},
{
- "id": "s3/sigv4-get-range",
+ "id": "s3/sigv4-path-encoded",
"profile": "s3",
"lane": "vectors",
- "purpose": "Fixed-clock AWS GET range example; exact signature detects canonicalization and key-derivation defects. Whitespace in Authorization is normalized by the sign adapter only if its SDK returns structured fields.",
+ "purpose": "Sign a path with a space, +, =, ~ and é as sent, percent-encoded once: S3 does not encode the path again, and ~ stays as it is",
"sources": [
"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
],
"call": {
"op": "s3.sign",
"method": "GET",
- "url": "https://examplebucket.s3.amazonaws.com/test.txt",
- "headers": {
- "range": "bytes=0-9"
- },
+ "url": "https://examplebucket.s3.amazonaws.com/photos/a%20b%2Bc%3Dd~e%C3%A9.jpg",
+ "headers": {},
"body_base64": "",
"clock": "2013-05-24T00:00:00Z",
"credentials": {
@@ -228,33 +248,42 @@
"rule": {
"is": "one_of",
"values": [
- "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;range;x-amz-content-sha256;x-amz-date,Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41",
- "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-content-sha256;x-amz-date, Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41"
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=46ba6bcfb3bbdc32c61f378dcc2dfa733dc710c94204f443ad07af7bab996b6b",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=46ba6bcfb3bbdc32c61f378dcc2dfa733dc710c94204f443ad07af7bab996b6b"
]
}
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "GET\n/photos/a%20b%2Bc%3Dd~e%C3%A9.jpg\n\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
}
]
},
{
- "id": "s3/canonical-get-range",
+ "id": "s3/sigv4-path-not-normalized",
"profile": "s3",
"lane": "vectors",
- "purpose": "Canonical text is optional diagnostic coverage; an opaque signer can declare unsupported.",
+ "purpose": "Sign a path with an empty segment, a . segment and a trailing / as sent. S3 keys keep them, so a signer must not normalize the path",
"sources": [
"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
],
"call": {
- "op": "s3.canonical_request",
+ "op": "s3.sign",
"method": "GET",
- "path": "/test.txt",
- "query": [],
- "headers": {
- "Host": "examplebucket.s3.amazonaws.com",
- "Range": "bytes=0-9",
- "x-amz-content-sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "x-amz-date": "20130524T000000Z"
+ "url": "https://examplebucket.s3.amazonaws.com/a//b/./c/",
+ "headers": {},
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
},
- "payload_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ "region": "us-east-1",
+ "service": "s3"
},
"expect": [
{
@@ -265,36 +294,146 @@
}
},
{
- "at": "/value/text",
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=9e729769b19cb3b56595178e160b82b09055e83f320bc6a8dc8e5beb7bf158d4",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=9e729769b19cb3b56595178e160b82b09055e83f320bc6a8dc8e5beb7bf158d4"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
"rule": {
"is": "equal",
- "value": "GET\n/test.txt\n\nhost:examplebucket.s3.amazonaws.com\nrange:bytes=0-9\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;range;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ "value": "GET\n/a//b/./c/\n\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
]
},
{
- "id": "azure/shared-key-encoded-name",
- "profile": "azure",
+ "id": "s3/sigv4-query-sorted",
+ "profile": "s3",
"lane": "vectors",
- "purpose": "Document-derived Shared Key example with a public synthetic key; the canonicalized resource keeps the escaped path.",
+ "purpose": "Sign a query whose parameters arrive out of order: the canonical query sorts them by encoded name",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
],
"call": {
- "op": "azure.sign",
+ "op": "s3.sign",
"method": "GET",
- "url": "https://fixture.blob.core.windows.net/fixture/a%20b?comp=metadata",
- "headers": {
- "x-ms-date": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-version": "2023-11-03"
+ "url": "https://examplebucket.s3.amazonaws.com/?prefix=photos%2F2024&max-keys=5&list-type=2&delimiter=%2F&encoding-type=url",
+ "headers": {},
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
},
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=ce1ecd0ddb684e93c5b42fc7485057631da71ce4380a0b010a09638d84cd052b",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=ce1ecd0ddb684e93c5b42fc7485057631da71ce4380a0b010a09638d84cd052b"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "GET\n/\ndelimiter=%2F&encoding-type=url&list-type=2&max-keys=5&prefix=photos%2F2024\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-query-empty-value",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign a subresource without a value beside one with a value: the canonical query writes it as tagging=, with an empty value",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "GET",
+ "url": "https://examplebucket.s3.amazonaws.com/test.txt?versionId=3HL4kqtJlcpXroDTDmJ%2BrmSpXd3dIbrHY&tagging",
+ "headers": {},
"body_base64": "",
- "clock": "2024-01-01T00:00:00Z",
+ "clock": "2013-05-24T00:00:00Z",
"credentials": {
- "account": "fixture",
- "key_base64": "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8="
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=f6b600c6d5b18b096cd8d1e97abc47cfd5104e236732b39e4058235313893d8a",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=f6b600c6d5b18b096cd8d1e97abc47cfd5104e236732b39e4058235313893d8a"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "GET\n/test.txt\ntagging=&versionId=3HL4kqtJlcpXroDTDmJ%2BrmSpXd3dIbrHY\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
}
+ ]
+ },
+ {
+ "id": "s3/sigv4-query-reencoded",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign query values sent with a raw / and a lowercase %7e: the canonical query decodes each value and encodes it again, as %2F and ~",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "GET",
+ "url": "https://examplebucket.s3.amazonaws.com/?list-type=2&prefix=photos/2024&start-after=a%7eb",
+ "headers": {},
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
},
"expect": [
{
@@ -306,31 +445,260 @@
},
{
"at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=3163c4c2b02342c53821b7f7ad4be9296b17e46b6b27ae697a0096db62f532f5",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=3163c4c2b02342c53821b7f7ad4be9296b17e46b6b27ae697a0096db62f532f5"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
"rule": {
"is": "equal",
- "value": "SharedKey fixture:klWCi6Ppc/uMEOOhAHKe9/os6gErdqBdFvMjaTd9lx4="
+ "value": "GET\n/\nlist-type=2&prefix=photos%2F2024&start-after=a~b\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}
]
},
{
- "id": "azure/canonical-shared-key",
- "profile": "azure",
+ "id": "s3/sigv4-query-repeated",
+ "profile": "s3",
"lane": "vectors",
- "purpose": "Empty standard fields and final query line are significant; no newline is appended after the resource.",
+ "purpose": "Sign a parameter sent twice: the canonical query keeps both, sorted by value",
"sources": [
- "https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key"
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
],
"call": {
- "op": "azure.string_to_sign",
+ "op": "s3.sign",
"method": "GET",
- "url": "https://fixture.blob.core.windows.net/fixture/a%20b?comp=metadata",
- "account": "fixture",
+ "url": "https://examplebucket.s3.amazonaws.com/?list-type=2&prefix=b&prefix=a",
+ "headers": {},
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=43934bb8bce3b95073acc5bff7f2d05d06a541faaa470a16bde4e30de49c5735",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=43934bb8bce3b95073acc5bff7f2d05d06a541faaa470a16bde4e30de49c5735"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "GET\n/\nlist-type=2&prefix=a&prefix=b\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-header-whitespace",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign headers with a mixed-case name and a value with spaces around and inside it: the canonical header is lowercase, trimmed, with each run of spaces as one",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "PUT",
+ "url": "https://examplebucket.s3.amazonaws.com/notes.txt",
"headers": {
- "x-ms-date": "Mon, 01 Jan 2024 00:00:00 GMT",
- "x-ms-version": "2023-11-03"
+ "Content-Type": "text/plain",
+ "X-Amz-Meta-Note": " two spaces inside "
},
- "body_base64": ""
+ "body_base64": "aGVsbG8=",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-meta-note,Signature=75def3066cddb5a656f19b5db5cece913ec8ad5b1f8316707da1385787ad6ba8",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date;x-amz-meta-note, Signature=75def3066cddb5a656f19b5db5cece913ec8ad5b1f8316707da1385787ad6ba8"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "PUT\n/notes.txt\n\ncontent-type:text/plain\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824\nx-amz-date:20130524T000000Z\nx-amz-meta-note:two spaces inside\n\ncontent-type;host;x-amz-content-sha256;x-amz-date;x-amz-meta-note\n2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-header-repeated",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign a header sent twice: the canonical header joins its values with a comma, in the order sent",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "PUT",
+ "url": "https://examplebucket.s3.amazonaws.com/tags.txt",
+ "headers": {
+ "x-amz-meta-tag": [
+ "one",
+ "two"
+ ]
+ },
+ "body_base64": "aGVsbG8=",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-meta-tag,Signature=0516b9a84faa9af1cf8bfa9da6e0a8efdea9f8db9f6c8f1deb5ca30824cc50ab",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-meta-tag, Signature=0516b9a84faa9af1cf8bfa9da6e0a8efdea9f8db9f6c8f1deb5ca30824cc50ab"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "PUT\n/tags.txt\n\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824\nx-amz-date:20130524T000000Z\nx-amz-meta-tag:one,two\n\nhost;x-amz-content-sha256;x-amz-date;x-amz-meta-tag\n2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-unsigned-payload",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign a PUT whose body is not hashed: x-amz-content-sha256 is UNSIGNED-PAYLOAD, signed in its place",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "PUT",
+ "url": "https://examplebucket.s3.amazonaws.com/unsigned.txt",
+ "headers": {},
+ "body_base64": "aGVsbG8=",
+ "payload_hash": "UNSIGNED-PAYLOAD",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=1db0ae7bc2758ec76c3a4eb728d7aeb744b1b1dfd1b7b8c1443efa0f814de19c",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1db0ae7bc2758ec76c3a4eb728d7aeb744b1b1dfd1b7b8c1443efa0f814de19c"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "PUT\n/unsigned.txt\n\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:UNSIGNED-PAYLOAD\nx-amz-date:20130524T000000Z\n\nhost;x-amz-content-sha256;x-amz-date\nUNSIGNED-PAYLOAD"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-streaming-trailer",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign an aws-chunked PUT with a trailing checksum: x-amz-content-sha256 is STREAMING-UNSIGNED-PAYLOAD-TRAILER, and the chunked headers are signed",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html",
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-streaming.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "PUT",
+ "url": "https://examplebucket.s3.amazonaws.com/chunked.txt",
+ "headers": {
+ "content-encoding": "aws-chunked",
+ "x-amz-decoded-content-length": "5",
+ "x-amz-trailer": "x-amz-checksum-crc32"
+ },
+ "body_base64": "",
+ "payload_hash": "STREAMING-UNSIGNED-PAYLOAD-TRAILER",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
+ },
+ "region": "us-east-1",
+ "service": "s3"
},
"expect": [
{
@@ -341,10 +709,79 @@
}
},
{
- "at": "/value/text",
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-trailer,Signature=8daf895f8f59abcad7f7e192b546eb49de31bb1567134b2e1cc1b68dfe70a1e7",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-trailer, Signature=8daf895f8f59abcad7f7e192b546eb49de31bb1567134b2e1cc1b68dfe70a1e7"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "PUT\n/chunked.txt\n\ncontent-encoding:aws-chunked\nhost:examplebucket.s3.amazonaws.com\nx-amz-content-sha256:STREAMING-UNSIGNED-PAYLOAD-TRAILER\nx-amz-date:20130524T000000Z\nx-amz-decoded-content-length:5\nx-amz-trailer:x-amz-checksum-crc32\n\ncontent-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-trailer\nSTREAMING-UNSIGNED-PAYLOAD-TRAILER"
+ }
+ }
+ ]
+ },
+ {
+ "id": "s3/sigv4-session-token",
+ "profile": "s3",
+ "lane": "vectors",
+ "purpose": "Sign with temporary credentials in eu-central-1: the signer adds x-amz-security-token, signs it, and scopes the signature to the region",
+ "sources": [
+ "https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html"
+ ],
+ "call": {
+ "op": "s3.sign",
+ "method": "GET",
+ "url": "https://examplebucket.s3.eu-central-1.amazonaws.com/test.txt",
+ "headers": {},
+ "body_base64": "",
+ "clock": "2013-05-24T00:00:00Z",
+ "credentials": {
+ "access_key_id": "AKIAIOSFODNN7EXAMPLE",
+ "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
+ "session_token": "AQoDYXdzEJr1K2oP+ExampleSessionToken/With+Slash=="
+ },
+ "region": "eu-central-1",
+ "service": "s3"
+ },
+ "expect": [
+ {
+ "at": "/outcome",
+ "rule": {
+ "is": "equal",
+ "value": "ok"
+ }
+ },
+ {
+ "at": "/value/authorization",
+ "rule": {
+ "is": "one_of",
+ "values": [
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/eu-central-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token,Signature=50d38e8876d089a6a390dd3f3af3ac8f6c8b59446d0eaef776e2675798fd52c2",
+ "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/eu-central-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-security-token, Signature=50d38e8876d089a6a390dd3f3af3ac8f6c8b59446d0eaef776e2675798fd52c2"
+ ]
+ }
+ },
+ {
+ "at": "/value/canonical_request",
+ "optional": true,
+ "rule": {
+ "is": "equal",
+ "value": "GET\n/test.txt\n\nhost:examplebucket.s3.eu-central-1.amazonaws.com\nx-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nx-amz-date:20130524T000000Z\nx-amz-security-token:AQoDYXdzEJr1K2oP+ExampleSessionToken/With+Slash==\n\nhost;x-amz-content-sha256;x-amz-date;x-amz-security-token\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ {
+ "at": "/value/headers/x-amz-security-token",
"rule": {
"is": "equal",
- "value": "GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Mon, 01 Jan 2024 00:00:00 GMT\nx-ms-version:2023-11-03\n/fixture/fixture/a%20b\ncomp:metadata"
+ "value": "AQoDYXdzEJr1K2oP+ExampleSessionToken/With+Slash=="
}
}
]
diff --git a/tests/grading.rs b/tests/grading.rs
index 4fb4ff8..f7f77f4 100644
--- a/tests/grading.rs
+++ b/tests/grading.rs
@@ -616,17 +616,18 @@ fn signature_mutation_fails_without_any_crypto_in_grader() {
let case = suite
.cases
.iter()
- .find(|case| case.id == "azure/shared-key-encoded-name")
+ .find(|case| case.id == "s3/sigv4-get-range")
.unwrap();
- let Rule::Equal { value } = &case.expect[1].rule else {
+ let Rule::OneOf { values } = &case.expect[1].rule else {
panic!()
};
+ let value = values[0].as_str().unwrap();
let mut result = json!({
"outcome": "ok",
"value": {"authorization": value},
});
assert!(check_assertions(&case.expect, &result, test_time()).is_empty());
- result["value"]["authorization"] = json!(format!("{}0", value.as_str().unwrap()));
+ result["value"]["authorization"] = json!(format!("{value}0"));
assert!(!check_assertions(&case.expect, &result, test_time()).is_empty());
}