Repository navigation
Test server-side copies and coverage gaps, index the cases, split out management.json - #11
Merged
Merged
Conversation
operations.json now opens with an index that maps each case ID to its purpose, before the profiles and cases, and validate requires an index, where present, to name every case with its purpose. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
59 cases on S3, S3 Express and both Azure account kinds cover replaced metadata, tags, class and tier, source conditions, sources in another bucket, container or version, encoded source keys, UploadPartCopy, Copy Blob From URL, Put Blob and Put Block From URL, copy state on a HEAD, and Abort Copy Blob. All were verified live. stage-copy-200-internal-error adds an InternalError in a 200 to a part copy on S3 and S3 Express. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
management.json holds the 22 bucket and container cases, renamed management/<profile>/<name>, and four new ones: PutBucketVersioning, GetBucketVersioning with versioning on and never turned on, and an S3 Express directory bucket's CreateBucket. All 26 were verified live. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Two request rules in Rust, blob_batch and body_checksum, grade an Azure Blob Batch part by part and a checksum header against the body. 90 new cases cover batch failures and limits, computed checksums, properties on commits and multipart starts, tag limits and encoding, error kinds and served ranges; 37 cases gain stricter checks. All were verified live. The S3 profiles accept an aws-chunked body with a trailing checksum. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Eight cases accept each form of a Content-Disposition or Content-Type outside ASCII that reads back as sent, as measured live on every profile, and permit a refusal where the plain UTF-8 bytes do not. Four cases send a tag key twice, from a call's new list of tag pairs, and accept the error, a refusal, or the call reported unsupported where a client API cannot repeat a key. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nce. The hand-written batch answers now say so and name the recorded case they edit in the new derived_from field; one without Content-IDs requires an error, and one with LF line endings accepts one. A bad token and a missing container were recorded live, and the synthesized parts follow Azure's layout. REFERENCE.md describes the grader, the adapter protocol with its error kinds and result fields, and the case format. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
It keeps the command, the adapter's input and results, the error kinds, the value conventions and the case fields whose meaning is not evident. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The reader of a value need not be the client that wrote it, so the cases no longer accept an RFC 2047 encoded word, which only its writer would decode. They accept the UTF-8 bytes where they read back and an RFC 6266 filename* in a disposition; where neither reads back, a client refuses or reports the service's error. Verified live. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
At deb671c the crate reports a missing container as such, serves content_range and access tiers, and reads batches strictly, so it gets no case wrong. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
REPLACEreplaces the content properties with the metadata, so a copy naming only metadata getsbinary/octet-stream;REPLACEwith no metadata or tags clears them, which a client API that cannot say so may refuse or decline; UploadPartCopy reports a failed source condition as 412; Copy Blob ignores content properties while Put Blob From URL honors them; a From URL source that is missing is 404CannotVerifyCopySource.deb671c, the head of itsobject-tests-gapsbranch (Improve object-tests conformance and support batch delete object-storage#41). There the crate reports a missing container as such, servescontent_rangeand access tiers, and reads batches strictly, so it gets no case wrong. Move the pin to that change's commit on master once #41 merges.derived_from, and its purpose says the answer is written by hand.ContainerNotFoundper deletion. Azure answered every recorded batch in order, up to 256 parts.REFERENCE.mdrecords the minimum the cases do not show: the adapter's input and results, the error kinds, the value conventions and the less evident case fields.InvalidRequest, Azure a disposition with 400InvalidMetadata, and an HNS account returns a content type's é as the byte e9. The cases accept only forms any reader decodes, since the reader need not be the writer: the UTF-8 bytes where they read back, and an RFC 6266filename*in a disposition. Where neither reads back, a client refuses or reports the service's error.InvalidTagorInvalidArgument, Azure 400InvalidXmlDocumentorDuplicateTagNames.blob_batchgrades an Azure Blob Batch part by part, andbody_checksumgrades a CRC32, CRC32C or CRC64NVME header against the body sent.delete-manyandput-tagginguse them.ExceedsMaxBatchRequestCount, for the whole batch.aws-chunkedtrailer; DeleteObjects<Error>entries; 1,000 and 1,001 keys.x-ms-access-tieron a HEAD.management.jsonholds every bucket and container operation, sooperations.jsonholds object operations only. The 22 existing cases moved and are renamedmanagement/<profile>/<name>, such asmanagement/s3/create-bucket. Four new ones cover the calls that build a live test setup:put-bucket-versioning,get-bucket-versioning,get-bucket-versioning-never-enabled, andmanagement/s3-express/create-bucket, which creates a directory bucket through the regional control endpoints3express-control, by path, signed with the account credentials and no session. All 26 were verified live.operations.json. It maps each case ID to its purpose, one line per case, before the profiles and the rules.validaterequires an index, where present, to name every case with its purpose.stage-copy-200-internal-erroron S3 and S3 Express. All were verified live.x-amz-metadata-directive: REPLACE.x-amz-copy-source-if-*conditions.x-amz-tagging-directive: REPLACE, a storage class, a source in another bucket, and an earlier version of the source.If-None-Match: *onto a blob that exists.Measured live
InvalidRequest, "Request must be signed with AWS Credentials". Its copy cases require the account credentials, ascopyalready did.InvalidRequestand 400InvalidArgument.PreconditionFailed, even forif-none-match, where a read answers 304.If-None-Match: *on a copy onto an existing blob with 409BlobAlreadyExists.copy-pendingandabort-copyare transient: Azure finishes a copy within one account before it answers, so their requests are verified against the finished copy and the 409NoPendingCopyOperationit sends now.For clients
{"key", "value"}pairs, which can repeat a key. A client whose API holds tags in a map may report a repeated key unsupported, namingtags.kind:not_foundfor a missing object,container_not_foundfor a missing bucket or container, andmissingfor an S3 HEAD answered 404, which cannot say which. A ranged read reportscontent_range, asbytes FIRST-LAST/SIZE.checksumwithoutvalue_base64asks the client to compute it.operations/for a bucket or container operation now startsmanagement/.s3.put_bucket_versioningwithstatus,s3.get_bucket_versioning, which reportsstatus, andavailability_zoneons3.create_bucketfor a directory bucket. Thes3-expressprofile ofmanagement.jsonnames its control endpoint incontrol_url.copyfields:source_bucket,source_container,source_version,source_if_match,source_if_none_match,source_if_modified_since,source_if_unmodified_since, andmetadata,content_type,tags,storage_classandtier, which replace the source's.syncasks Azure for Copy Blob From URL.s3.upload_part_copy,azure.put_from_url,azure.stage_block_from_urlandazure.abort_copy, withsource_rangeas an offset and an exclusive end.copy_statusandcopy_id.?of?versionId=into the key.Test plan
object-tests validatepasses forcases/operations.json(1,091 cases) andcases/management.json(26 cases).cargo testandcargo clippy --all-targets -- -D warningspass.management.jsonas well.