OCI Distribution Conformance Tests

Summary
74 passed6 skipped
Start Time Apr 3 15:51:16.571 -0400 EDT
End Time Apr 3 15:51:16.858 -0400 EDT
Time Elapsed 287.050635ms
Test Version 75d28161dfed52ec6e3dc3605ae0c033c4178c96
Configuration
OCI_ROOT_URL=http://localhost:5000
OCI_NAMESPACE=myorg/myrepo
OCI_DEBUG=0
OCI_TEST_PULL=1
OCI_TEST_PUSH=1
OCI_TEST_CONTENT_DISCOVERY=1
OCI_TEST_CONTENT_MANAGEMENT=1
OCI_HIDE_SKIPPED_WORKFLOWS=0
OCI_CROSSMOUNT_NAMESPACE=myorg/other

Pull

Setup

+

Populate registry with test blob


+

Populate registry with test blob


+

Populate registry with test layer


+

Populate registry with test manifest


+

Populate registry with test manifest


+

Get the name of a tag


+

Get tag name from environment



Pull blobs

+

HEAD request to nonexistent blob should result in 404 response


+

HEAD request to existing blob should yield 200


+

GET nonexistent blob should result in 404 response


+

GET request to existing blob URL should yield 200



Pull manifests

+

HEAD request to nonexistent manifest should return 404


+

HEAD request to manifest[0] path (digest) should yield 200 response


+

HEAD request to manifest[1] path (digest) should yield 200 response


+

HEAD request to manifest path (tag) should yield 200 response


+

GET nonexistent manifest should return 404


+

GET request to manifest[0] path (digest) should yield 200 response


+

GET request to manifest[1] path (digest) should yield 200 response


+

GET request to manifest path (tag) should yield 200 response



Error codes

+

400 response body should contain OCI-conforming JSON message



Teardown

+

Delete manifest[0] created in setup


+

Delete manifest[1] created in setup


+

Delete config[0] blob created in setup


+

Delete config[1] blob created in setup


+

Delete layer blob created in setup



Push

Blob Upload Streamed

+

PATCH request with blob in body should yield 202 response


+

PUT request to session URL with digest should yield 201 response



Blob Upload Monolithic

+

GET nonexistent blob should result in 404 response


+

POST request with digest and blob should yield a 201 or 202


+

GET request to blob URL from prior request should yield 200 or 404 based on response code


+

POST request should yield a session ID


+

PUT upload of a blob should yield a 201 Response


+

GET request to existing blob should yield 200 response


+

PUT upload of a layer blob should yield a 201 Response


+

GET request to existing layer should yield 200 response



Blob Upload Chunked

+

Out-of-order blob upload should return 416


+

PATCH request with first chunk should return 202


+

Retry previous blob chunk should return 416


+

Get on stale blob upload should return 204 with a range and location


+

PATCH request with second chunk should return 202


+

PUT request with digest should return 201



Cross-Repository Blob Mount

+

Cross-mounting of a blob without the from argument should yield session id


+

POST request to mount another repository's blob should return 201 or 202


+

GET request to test digest within cross-mount namespace should return 200


+

Cross-mounting of nonexistent blob should yield session id


+

Cross-mounting without from, and automatic content discovery enabled should return a 201


+

Cross-mounting without from, and automatic content discovery disabled should return a 202



Manifest Upload

+

GET nonexistent manifest should return 404


+

PUT should accept a manifest upload


+

Registry should accept a manifest upload with no layers


+

GET request to manifest URL (digest) should yield 200 response



Teardown

+

Delete manifest created in tests


+

Delete config blob created in tests


+

Delete layer blob created in setup



Content Discovery

Setup

+

Populate registry with test blob


+

Populate registry with test layer


+

Populate registry with test tags


+

Populate registry with test tags (no push)


+

References setup



Test content discovery endpoints (listing tags)

+

GET request to list tags should yield 200 response


+

GET number of tags should be limitable by `n` query parameter


+

GET start of tag is set by `last` query parameter



Test content discovery endpoints (listing references)

+

GET request to nonexistent blob should result in empty 200 response


+

GET request to existing blob should yield 200


+

GET request to existing blob with filter should yield 200


+

GET request to missing manifest should yield 200



Teardown

+

Delete created manifest & associated tags


+

Delete config blob created in tests


+

Delete layer blob created in setup


+

References teardown



Content Management

Setup

+

Populate registry with test config blob


+

Populate registry with test layer


+

Populate registry with test tag


+

Check how many tags there are before anything gets deleted



Manifest delete

+

DELETE request to manifest tag should return 202, unless tag deletion is disallowed (400/405)


+

DELETE request to manifest (digest) should yield 202 response unless already deleted


+

GET request to deleted manifest URL should yield 404 response, unless delete is disallowed


+

GET request to tags list should reflect manifest deletion



Blob delete

+

DELETE request to blob URL should yield 202 response


+

GET request to deleted blob URL should yield 404 response