156 lines
5.7 KiB
YAML
156 lines
5.7 KiB
YAML
description: "poc-gridfs"
|
|
|
|
schemaVersion: "1.0"
|
|
|
|
createEntities:
|
|
- client:
|
|
id: &client0 client0
|
|
- database:
|
|
id: &database0 database0
|
|
client: *client0
|
|
databaseName: &database0Name gridfs-tests
|
|
- bucket:
|
|
id: &bucket0 bucket0
|
|
database: *database0
|
|
- collection:
|
|
id: &bucket0_files_collection bucket0_files_collection
|
|
database: *database0
|
|
collectionName: &bucket0_files_collectionName fs.files
|
|
- collection:
|
|
id: &bucket0_chunks_collection bucket0_chunks_collection
|
|
database: *database0
|
|
collectionName: &bucket0_chunks_collectionName fs.chunks
|
|
|
|
initialData:
|
|
- collectionName: *bucket0_files_collectionName
|
|
databaseName: *database0Name
|
|
documents:
|
|
- _id: { $oid: "000000000000000000000005" }
|
|
length: 10
|
|
chunkSize: 4
|
|
uploadDate: { $date: "1970-01-01T00:00:00.000Z" }
|
|
md5: "57d83cd477bfb1ccd975ab33d827a92b"
|
|
filename: "length-10"
|
|
contentType: "application/octet-stream"
|
|
aliases: []
|
|
metadata: {}
|
|
- collectionName: *bucket0_chunks_collectionName
|
|
databaseName: *database0Name
|
|
documents:
|
|
- _id: { $oid: "000000000000000000000005" }
|
|
files_id: { $oid: "000000000000000000000005" }
|
|
n: 0
|
|
data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
|
|
- _id: { $oid: "000000000000000000000006" }
|
|
files_id: { $oid: "000000000000000000000005" }
|
|
n: 1
|
|
data: { $binary: { base64: "VWZ3iA==", subType: "00" } } # hex: 55667788
|
|
- _id: { $oid: "000000000000000000000007" }
|
|
files_id: { $oid: "000000000000000000000005" }
|
|
n: 2
|
|
data: { $binary: { base64: "mao=", subType: "00" } } # hex: 99aa
|
|
|
|
tests:
|
|
# Changed from original test ("length is 8") to operate on same initialData
|
|
- description: "Delete when length is 10"
|
|
operations:
|
|
- name: delete
|
|
object: *bucket0
|
|
arguments:
|
|
id: { $oid: "000000000000000000000005" }
|
|
# Original test uses "assert.data" syntax to modify outcome collection for
|
|
# comparison. This can be accomplished using "outcome" directly.
|
|
outcome:
|
|
- collectionName: *bucket0_files_collectionName
|
|
databaseName: *database0Name
|
|
documents: []
|
|
- collectionName: *bucket0_chunks_collectionName
|
|
databaseName: *database0Name
|
|
documents: []
|
|
|
|
- description: "Download when there are three chunks"
|
|
operations:
|
|
# Original test uses "download" operation. We use an explicit operation
|
|
# that returns a stream and then assert the contents of that stream.
|
|
- name: download
|
|
object: *bucket0
|
|
arguments:
|
|
id: { $oid: "000000000000000000000005" }
|
|
expectResult: { $$matchesHexBytes: "112233445566778899aa" }
|
|
|
|
- description: "Download when files entry does not exist"
|
|
operations:
|
|
- name: download
|
|
object: *bucket0
|
|
arguments:
|
|
id: { $oid: "000000000000000000000000" }
|
|
# Original test expects "FileNotFound" error, which isn't specified
|
|
expectError: { isError: true }
|
|
|
|
- description: "Download when an intermediate chunk is missing"
|
|
operations:
|
|
# Original test uses "arrange" syntax to modify initialData. This can be
|
|
# accomplished as a delete operation on the chunks collection.
|
|
- name: deleteOne
|
|
object: *bucket0_chunks_collection
|
|
arguments:
|
|
filter:
|
|
files_id: { $oid: "000000000000000000000005" }
|
|
n: 1
|
|
expectResult:
|
|
deletedCount: 1
|
|
- name: download
|
|
object: *bucket0
|
|
arguments:
|
|
id: { $oid: "000000000000000000000005" }
|
|
# Original test expects "ChunkIsMissing" error, which isn't specified
|
|
expectError: { isError: true }
|
|
|
|
- description: "Upload when length is 5"
|
|
operations:
|
|
# Original test uses "upload" operation. We use an explicit operation
|
|
# that takes a stream, which has been created from the expected hex bytes.
|
|
- name: upload
|
|
object: *bucket0
|
|
arguments:
|
|
filename: filename
|
|
source: { $$hexBytes: "1122334455" }
|
|
chunkSizeBytes: 4
|
|
# Original test references the result directly in "assert.data". Here,
|
|
# we need to save the result as an entity, which we can later reference.
|
|
expectResult: { $$type: objectId }
|
|
saveResultAsEntity: &oid0 oid0
|
|
# "outcome" does not allow operators, but we can perform the assertions
|
|
# with separate find operations.
|
|
- name: find
|
|
object: *bucket0_files_collection
|
|
arguments:
|
|
filter: {}
|
|
sort: { uploadDate: -1 }
|
|
limit: 1
|
|
expectResult:
|
|
- _id: { $$matchesEntity: *oid0 }
|
|
length: 5
|
|
chunkSize: 4
|
|
uploadDate: { $$type: date }
|
|
# The md5 field is deprecated so some drivers do not calculate it when uploading files.
|
|
md5: { $$unsetOrMatches: "283d4fea5dded59cf837d3047328f5af" }
|
|
filename: filename
|
|
- name: find
|
|
object: *bucket0_chunks_collection
|
|
arguments:
|
|
# We cannot use the saved ObjectId when querying, but filtering by a
|
|
# non-zero timestamp will exclude initialData and sort can return the
|
|
# expected chunks in order.
|
|
filter: { _id: { $gt: { $oid: "000000000000000000000007" } } }
|
|
sort: { n: 1 }
|
|
expectResult:
|
|
- _id: { $$type: objectId }
|
|
files_id: { $$matchesEntity: *oid0 }
|
|
n: 0
|
|
data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex 11223344
|
|
- _id: { $$type: objectId }
|
|
files_id: { $$matchesEntity: *oid0 }
|
|
n: 1
|
|
data: { $binary: { base64: "VQ==", subType: "00" } } # hex 55
|