mongo 2.14.1 → 2.15.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +4 -1
- data/Rakefile +8 -15
- data/lib/mongo/auth/aws/conversation.rb +1 -4
- data/lib/mongo/auth/base.rb +13 -7
- data/lib/mongo/auth/conversation_base.rb +32 -0
- data/lib/mongo/auth/cr/conversation.rb +6 -29
- data/lib/mongo/auth/gssapi/conversation.rb +4 -15
- data/lib/mongo/auth/ldap/conversation.rb +3 -14
- data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
- data/lib/mongo/auth/scram_conversation_base.rb +7 -34
- data/lib/mongo/auth/user/view.rb +16 -9
- data/lib/mongo/auth/x509/conversation.rb +4 -25
- data/lib/mongo/bulk_write.rb +21 -18
- data/lib/mongo/client.rb +82 -6
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
- data/lib/mongo/cluster.rb +19 -2
- data/lib/mongo/collection/view/aggregation.rb +1 -1
- data/lib/mongo/collection/view/change_stream.rb +1 -1
- data/lib/mongo/collection/view/iterable.rb +7 -17
- data/lib/mongo/collection/view/map_reduce.rb +2 -2
- data/lib/mongo/collection/view/readable.rb +42 -20
- data/lib/mongo/collection/view/writable.rb +14 -14
- data/lib/mongo/collection.rb +6 -6
- data/lib/mongo/cursor.rb +2 -12
- data/lib/mongo/database/view.rb +1 -1
- data/lib/mongo/database.rb +8 -3
- data/lib/mongo/error/bulk_write_error.rb +17 -3
- data/lib/mongo/error/internal_driver_error.rb +22 -0
- data/lib/mongo/error/operation_failure.rb +21 -2
- data/lib/mongo/error/parser.rb +65 -12
- data/lib/mongo/error/server_api_conflict.rb +23 -0
- data/lib/mongo/error/server_api_not_supported.rb +24 -0
- data/lib/mongo/error/unmet_dependency.rb +21 -0
- data/lib/mongo/error.rb +9 -1
- data/lib/mongo/index/view.rb +21 -11
- data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
- data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
- data/lib/mongo/monitoring.rb +13 -4
- data/lib/mongo/operation/collections_info/command.rb +2 -2
- data/lib/mongo/operation/collections_info.rb +18 -1
- data/lib/mongo/operation/context.rb +99 -0
- data/lib/mongo/operation/indexes.rb +15 -1
- data/lib/mongo/operation/insert/command.rb +2 -2
- data/lib/mongo/operation/insert/legacy.rb +2 -2
- data/lib/mongo/operation/insert/op_msg.rb +2 -2
- data/lib/mongo/operation/list_collections/result.rb +4 -1
- data/lib/mongo/operation/parallel_scan/command.rb +2 -1
- data/lib/mongo/operation/result.rb +2 -0
- data/lib/mongo/operation/shared/executable.rb +24 -14
- data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
- data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
- data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
- data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
- data/lib/mongo/operation/shared/read_preference_supported.rb +36 -38
- data/lib/mongo/operation/shared/response_handling.rb +23 -23
- data/lib/mongo/operation/shared/sessions_supported.rb +15 -5
- data/lib/mongo/operation/shared/write.rb +8 -18
- data/lib/mongo/operation.rb +2 -2
- data/lib/mongo/protocol/compressed.rb +51 -5
- data/lib/mongo/protocol/message.rb +20 -2
- data/lib/mongo/protocol/msg.rb +38 -13
- data/lib/mongo/protocol/query.rb +11 -11
- data/lib/mongo/query_cache.rb +30 -0
- data/lib/mongo/retryable.rb +1 -1
- data/lib/mongo/server/app_metadata.rb +52 -18
- data/lib/mongo/server/connection.rb +5 -0
- data/lib/mongo/server/connection_base.rb +13 -10
- data/lib/mongo/server/connection_pool.rb +6 -2
- data/lib/mongo/server/description/features.rb +9 -8
- data/lib/mongo/server/description.rb +4 -0
- data/lib/mongo/server/monitor/app_metadata.rb +1 -1
- data/lib/mongo/server/monitor/connection.rb +9 -10
- data/lib/mongo/server/monitor.rb +20 -1
- data/lib/mongo/server/pending_connection.rb +24 -6
- data/lib/mongo/server/push_monitor.rb +11 -1
- data/lib/mongo/server.rb +7 -1
- data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
- data/lib/mongo/session/session_pool.rb +4 -2
- data/lib/mongo/session.rb +2 -2
- data/lib/mongo/socket/ssl.rb +8 -0
- data/lib/mongo/socket.rb +29 -4
- data/lib/mongo/uri/options_mapper.rb +38 -0
- data/lib/mongo/utils.rb +15 -0
- data/lib/mongo/version.rb +1 -1
- data/lib/mongo.rb +23 -0
- data/spec/README.md +24 -1
- data/spec/integration/auth_spec.rb +25 -15
- data/spec/integration/bulk_write_error_message_spec.rb +41 -0
- data/spec/integration/change_stream_spec.rb +4 -4
- data/spec/integration/command_monitoring_spec.rb +2 -2
- data/spec/integration/connection_spec.rb +2 -0
- data/spec/integration/docs_examples_spec.rb +8 -1
- data/spec/integration/fork_reconnect_spec.rb +4 -1
- data/spec/integration/ocsp_verifier_spec.rb +13 -7
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +90 -0
- data/spec/integration/query_cache_spec.rb +0 -45
- data/spec/integration/reconnect_spec.rb +1 -1
- data/spec/integration/snappy_compression_spec.rb +25 -0
- data/spec/integration/srv_monitoring_spec.rb +1 -1
- data/spec/integration/transactions_examples_spec.rb +6 -0
- data/spec/integration/zlib_compression_spec.rb +1 -1
- data/spec/integration/zstd_compression_spec.rb +26 -0
- data/spec/lite_spec_helper.rb +7 -1
- data/spec/mongo/address_spec.rb +15 -11
- data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
- data/spec/mongo/auth/ldap_spec.rb +5 -1
- data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
- data/spec/mongo/auth/scram_spec.rb +1 -1
- data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
- data/spec/mongo/client_construction_spec.rb +207 -33
- data/spec/mongo/client_spec.rb +17 -0
- data/spec/mongo/cluster_spec.rb +1 -0
- data/spec/mongo/collection/view/explainable_spec.rb +1 -1
- data/spec/mongo/collection/view/readable_spec.rb +33 -19
- data/spec/mongo/collection_crud_spec.rb +4357 -0
- data/spec/mongo/collection_ddl_spec.rb +534 -0
- data/spec/mongo/collection_spec.rb +5 -4859
- data/spec/mongo/database_spec.rb +66 -4
- data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
- data/spec/mongo/error/parser_spec.rb +37 -6
- data/spec/mongo/index/view_spec.rb +4 -0
- data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
- data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
- data/spec/mongo/operation/aggregate_spec.rb +2 -1
- data/spec/mongo/operation/collections_info_spec.rb +4 -1
- data/spec/mongo/operation/command_spec.rb +6 -3
- data/spec/mongo/operation/create_index_spec.rb +6 -3
- data/spec/mongo/operation/create_user_spec.rb +6 -3
- data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
- data/spec/mongo/operation/delete_spec.rb +11 -7
- data/spec/mongo/operation/drop_index_spec.rb +6 -2
- data/spec/mongo/operation/find/legacy_spec.rb +3 -1
- data/spec/mongo/operation/get_more_spec.rb +3 -1
- data/spec/mongo/operation/indexes_spec.rb +5 -1
- data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
- data/spec/mongo/operation/insert_spec.rb +15 -12
- data/spec/mongo/operation/map_reduce_spec.rb +5 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +19 -9
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
- data/spec/mongo/operation/remove_user_spec.rb +6 -3
- data/spec/mongo/operation/result_spec.rb +1 -1
- data/spec/mongo/operation/update/bulk_spec.rb +9 -6
- data/spec/mongo/operation/update_spec.rb +10 -7
- data/spec/mongo/operation/update_user_spec.rb +4 -1
- data/spec/mongo/protocol/compressed_spec.rb +26 -12
- data/spec/mongo/query_cache_middleware_spec.rb +55 -0
- data/spec/mongo/retryable_spec.rb +3 -2
- data/spec/mongo/server/app_metadata_shared.rb +7 -33
- data/spec/mongo/server/app_metadata_spec.rb +2 -0
- data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
- data/spec/mongo/server/connection_pool_spec.rb +1 -1
- data/spec/mongo/server/connection_spec.rb +24 -17
- data/spec/mongo/server/monitor/connection_spec.rb +17 -7
- data/spec/mongo/server/monitor_spec.rb +9 -1
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
- data/spec/mongo/server_spec.rb +15 -2
- data/spec/mongo/socket/ssl_spec.rb +40 -0
- data/spec/mongo/socket_spec.rb +2 -2
- data/spec/mongo/tls_context_hooks_spec.rb +37 -0
- data/spec/runners/connection_string.rb +0 -4
- data/spec/runners/crud/requirement.rb +40 -3
- data/spec/runners/crud/verifier.rb +8 -0
- data/spec/runners/transactions/operation.rb +1 -1
- data/spec/runners/transactions/test.rb +1 -0
- data/spec/runners/unified/assertions.rb +249 -0
- data/spec/runners/unified/change_stream_operations.rb +26 -0
- data/spec/runners/unified/crud_operations.rb +199 -0
- data/spec/runners/unified/ddl_operations.rb +96 -0
- data/spec/runners/unified/entity_map.rb +39 -0
- data/spec/runners/unified/error.rb +25 -0
- data/spec/runners/unified/event_subscriber.rb +91 -0
- data/spec/runners/unified/exceptions.rb +21 -0
- data/spec/runners/unified/grid_fs_operations.rb +55 -0
- data/spec/runners/unified/support_operations.rb +250 -0
- data/spec/runners/unified/test.rb +393 -0
- data/spec/runners/unified/test_group.rb +28 -0
- data/spec/runners/unified/using_hash.rb +31 -0
- data/spec/runners/unified.rb +96 -0
- data/spec/shared/lib/mrss/cluster_config.rb +0 -3
- data/spec/shared/lib/mrss/docker_runner.rb +0 -3
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -3
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -3
- data/spec/shared/shlib/server.sh +1 -1
- data/spec/spec_helper.rb +4 -1
- data/spec/spec_tests/crud_unified_spec.rb +10 -0
- data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
- data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
- data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
- data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
- data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
- data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
- data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
- data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
- data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
- data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
- data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
- data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
- data/spec/spec_tests/unified_spec.rb +15 -0
- data/spec/spec_tests/uri_options_spec.rb +16 -0
- data/spec/spec_tests/versioned_api_spec.rb +10 -0
- data/spec/support/client_registry.rb +4 -8
- data/spec/support/client_registry_macros.rb +4 -4
- data/spec/support/common_shortcuts.rb +15 -1
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +42 -11
- data/spec/support/utils.rb +64 -3
- data.tar.gz.sig +0 -0
- metadata +1005 -915
- metadata.gz.sig +0 -0
- data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
- data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
- data/spec/integration/secondary_reads_spec.rb +0 -102
- data/spec/support/cluster_config.rb +0 -207
@@ -0,0 +1,220 @@
|
|
1
|
+
description: "poc-change-streams"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
createEntities:
|
6
|
+
# Entities for creating changeStreams
|
7
|
+
- client:
|
8
|
+
id: &client0 client0
|
9
|
+
useMultipleMongoses: false
|
10
|
+
observeEvents: [ commandStartedEvent ]
|
11
|
+
# Original tests do not observe getMore commands but only because event
|
12
|
+
# assertions ignore extra events. killCursors is explicitly ignored.
|
13
|
+
ignoreCommandMonitoringEvents: [ getMore, killCursors ]
|
14
|
+
- database:
|
15
|
+
id: &database0 database0
|
16
|
+
client: *client0
|
17
|
+
databaseName: &database0Name change-stream-tests
|
18
|
+
- collection:
|
19
|
+
id: &collection0 collection0
|
20
|
+
database: *database0
|
21
|
+
collectionName: &collection0Name test
|
22
|
+
# Entities for executing insert operations
|
23
|
+
- client:
|
24
|
+
id: &client1 client1
|
25
|
+
useMultipleMongoses: false
|
26
|
+
- database:
|
27
|
+
id: &database1 database1
|
28
|
+
client: *client1
|
29
|
+
databaseName: &database1Name change-stream-tests
|
30
|
+
- database:
|
31
|
+
id: &database2 database2
|
32
|
+
client: *client1
|
33
|
+
databaseName: &database2Name change-stream-tests-2
|
34
|
+
- collection:
|
35
|
+
id: &collection1 collection1
|
36
|
+
database: *database1
|
37
|
+
collectionName: &collection1Name test
|
38
|
+
- collection:
|
39
|
+
id: &collection2 collection2
|
40
|
+
database: *database1
|
41
|
+
collectionName: &collection2Name test2
|
42
|
+
- collection:
|
43
|
+
id: &collection3 collection3
|
44
|
+
database: *database2
|
45
|
+
collectionName: &collection3Name test
|
46
|
+
|
47
|
+
initialData:
|
48
|
+
- collectionName: *collection1Name
|
49
|
+
databaseName: *database1Name
|
50
|
+
documents: []
|
51
|
+
- collectionName: *collection2Name
|
52
|
+
databaseName: *database1Name
|
53
|
+
documents: []
|
54
|
+
- collectionName: *collection3Name
|
55
|
+
databaseName: *database2Name
|
56
|
+
documents: []
|
57
|
+
|
58
|
+
tests:
|
59
|
+
- description: "Executing a watch helper on a MongoClient results in notifications for changes to all collections in all databases in the cluster."
|
60
|
+
runOnRequirements:
|
61
|
+
- minServerVersion: "3.8.0"
|
62
|
+
topologies: [ replicaset ]
|
63
|
+
operations:
|
64
|
+
- name: createChangeStream
|
65
|
+
object: *client0
|
66
|
+
arguments:
|
67
|
+
pipeline: []
|
68
|
+
saveResultAsEntity: &changeStream0 changeStream0
|
69
|
+
- name: insertOne
|
70
|
+
object: *collection2
|
71
|
+
arguments:
|
72
|
+
document: { x: 1 }
|
73
|
+
- name: insertOne
|
74
|
+
object: *collection3
|
75
|
+
arguments:
|
76
|
+
document: { y: 1 }
|
77
|
+
- name: insertOne
|
78
|
+
object: *collection1
|
79
|
+
arguments:
|
80
|
+
document: { z: 1 }
|
81
|
+
- name: iterateUntilDocumentOrError
|
82
|
+
object: *changeStream0
|
83
|
+
expectResult:
|
84
|
+
operationType: insert
|
85
|
+
ns:
|
86
|
+
db: *database1Name
|
87
|
+
coll: *collection2Name
|
88
|
+
fullDocument:
|
89
|
+
_id: { $$type: objectId }
|
90
|
+
x: 1
|
91
|
+
- name: iterateUntilDocumentOrError
|
92
|
+
object: *changeStream0
|
93
|
+
expectResult:
|
94
|
+
operationType: insert
|
95
|
+
ns:
|
96
|
+
db: *database2Name
|
97
|
+
coll: *collection3Name
|
98
|
+
fullDocument:
|
99
|
+
# Original tests did not include _id, but matching now only permits
|
100
|
+
# extra keys for root-level documents.
|
101
|
+
_id: { $$type: objectId }
|
102
|
+
y: 1
|
103
|
+
- name: iterateUntilDocumentOrError
|
104
|
+
object: *changeStream0
|
105
|
+
expectResult:
|
106
|
+
operationType: insert
|
107
|
+
ns:
|
108
|
+
db: *database1Name
|
109
|
+
coll: *collection1Name
|
110
|
+
fullDocument:
|
111
|
+
_id: { $$type: objectId }
|
112
|
+
z: 1
|
113
|
+
expectEvents:
|
114
|
+
- client: *client0
|
115
|
+
events:
|
116
|
+
- commandStartedEvent:
|
117
|
+
command:
|
118
|
+
aggregate: 1
|
119
|
+
cursor: {}
|
120
|
+
pipeline:
|
121
|
+
- $changeStream:
|
122
|
+
allChangesForCluster: true
|
123
|
+
# Some drivers may send a default value for fullDocument
|
124
|
+
# or omit it entirely (see: SPEC-1350).
|
125
|
+
fullDocument: { $$unsetOrMatches: default }
|
126
|
+
commandName: aggregate
|
127
|
+
databaseName: admin
|
128
|
+
|
129
|
+
- description: "Test consecutive resume"
|
130
|
+
runOnRequirements:
|
131
|
+
- minServerVersion: "4.1.7"
|
132
|
+
topologies: [ replicaset ]
|
133
|
+
operations:
|
134
|
+
- name: failPoint
|
135
|
+
object: testRunner
|
136
|
+
arguments:
|
137
|
+
client: *client0
|
138
|
+
failPoint:
|
139
|
+
configureFailPoint: failCommand
|
140
|
+
mode: { times: 2 }
|
141
|
+
data:
|
142
|
+
failCommands: [ getMore ]
|
143
|
+
closeConnection: true
|
144
|
+
- name: createChangeStream
|
145
|
+
object: *collection0
|
146
|
+
arguments:
|
147
|
+
batchSize: 1
|
148
|
+
pipeline: []
|
149
|
+
saveResultAsEntity: *changeStream0
|
150
|
+
- name: insertOne
|
151
|
+
object: *collection1
|
152
|
+
arguments:
|
153
|
+
document: { x: 1 }
|
154
|
+
- name: insertOne
|
155
|
+
object: *collection1
|
156
|
+
arguments:
|
157
|
+
document: { x: 2 }
|
158
|
+
- name: insertOne
|
159
|
+
object: *collection1
|
160
|
+
arguments:
|
161
|
+
document: { x: 3 }
|
162
|
+
- name: iterateUntilDocumentOrError
|
163
|
+
object: *changeStream0
|
164
|
+
expectResult:
|
165
|
+
operationType: insert
|
166
|
+
ns:
|
167
|
+
db: *database1Name
|
168
|
+
coll: *collection1Name
|
169
|
+
fullDocument:
|
170
|
+
_id: { $$type: objectId }
|
171
|
+
x: 1
|
172
|
+
- name: iterateUntilDocumentOrError
|
173
|
+
object: *changeStream0
|
174
|
+
expectResult:
|
175
|
+
operationType: insert
|
176
|
+
ns:
|
177
|
+
db: *database1Name
|
178
|
+
coll: *collection1Name
|
179
|
+
fullDocument:
|
180
|
+
_id: { $$type: objectId }
|
181
|
+
x: 2
|
182
|
+
- name: iterateUntilDocumentOrError
|
183
|
+
object: *changeStream0
|
184
|
+
expectResult:
|
185
|
+
operationType: insert
|
186
|
+
ns:
|
187
|
+
db: *database1Name
|
188
|
+
coll: *collection1Name
|
189
|
+
fullDocument:
|
190
|
+
_id: { $$type: objectId }
|
191
|
+
x: 3
|
192
|
+
expectEvents:
|
193
|
+
- client: *client0
|
194
|
+
events:
|
195
|
+
- commandStartedEvent:
|
196
|
+
command:
|
197
|
+
aggregate: *collection1Name
|
198
|
+
cursor: { batchSize: 1 }
|
199
|
+
pipeline:
|
200
|
+
- $changeStream:
|
201
|
+
fullDocument: { $$unsetOrMatches: default }
|
202
|
+
commandName: aggregate
|
203
|
+
databaseName: *database1Name
|
204
|
+
# The original test only asserted the first command, since expected
|
205
|
+
# events were only an ordered subset. This file does ignore getMore
|
206
|
+
# commands but we must expect the subsequent aggregate commands, since
|
207
|
+
# each failed getMore will resume. While doing so we can also assert
|
208
|
+
# that those commands include a resume token.
|
209
|
+
- &resumingAggregate
|
210
|
+
commandStartedEvent:
|
211
|
+
command:
|
212
|
+
aggregate: *collection1Name
|
213
|
+
cursor: { batchSize: 1 }
|
214
|
+
pipeline:
|
215
|
+
- $changeStream:
|
216
|
+
fullDocument: { $$unsetOrMatches: default }
|
217
|
+
resumeAfter: { $$exists: true }
|
218
|
+
commandName: aggregate
|
219
|
+
databaseName: *database0Name
|
220
|
+
- *resumingAggregate
|
@@ -0,0 +1,102 @@
|
|
1
|
+
description: "poc-command-monitoring"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
createEntities:
|
6
|
+
- client:
|
7
|
+
id: &client0 client0
|
8
|
+
observeEvents:
|
9
|
+
- commandStartedEvent
|
10
|
+
- commandSucceededEvent
|
11
|
+
- commandFailedEvent
|
12
|
+
- database:
|
13
|
+
id: &database0 database0
|
14
|
+
client: *client0
|
15
|
+
databaseName: &database0Name command-monitoring-tests
|
16
|
+
- collection:
|
17
|
+
id: &collection0 collection0
|
18
|
+
database: *database0
|
19
|
+
collectionName: &collection0Name test
|
20
|
+
|
21
|
+
initialData:
|
22
|
+
- collectionName: *collection0Name
|
23
|
+
databaseName: *database0Name
|
24
|
+
documents:
|
25
|
+
- { _id: 1, x: 11 }
|
26
|
+
- { _id: 2, x: 22 }
|
27
|
+
- { _id: 3, x: 33 }
|
28
|
+
- { _id: 4, x: 44 }
|
29
|
+
- { _id: 5, x: 55 }
|
30
|
+
|
31
|
+
tests:
|
32
|
+
- description: "A successful find event with a getmore and the server kills the cursor"
|
33
|
+
runOnRequirements:
|
34
|
+
- minServerVersion: "3.1"
|
35
|
+
topologies: [ single, replicaset ]
|
36
|
+
operations:
|
37
|
+
- name: find
|
38
|
+
object: *collection0
|
39
|
+
arguments:
|
40
|
+
filter: { _id: { $gte: 1 }}
|
41
|
+
sort: { _id: 1 }
|
42
|
+
batchSize: 3
|
43
|
+
limit: 4
|
44
|
+
expectEvents:
|
45
|
+
- client: *client0
|
46
|
+
events:
|
47
|
+
- commandStartedEvent:
|
48
|
+
command:
|
49
|
+
find: *collection0Name
|
50
|
+
filter: { _id: { $gte : 1 } }
|
51
|
+
sort: { _id: 1 }
|
52
|
+
batchSize: 3
|
53
|
+
limit: 4
|
54
|
+
commandName: find
|
55
|
+
databaseName: *database0Name
|
56
|
+
- commandSucceededEvent:
|
57
|
+
reply:
|
58
|
+
ok: 1
|
59
|
+
cursor:
|
60
|
+
id: { $$type: [ int, long ] }
|
61
|
+
ns: &namespace command-monitoring-tests.test
|
62
|
+
firstBatch:
|
63
|
+
- { _id: 1, x: 11 }
|
64
|
+
- { _id: 2, x: 22 }
|
65
|
+
- { _id: 3, x: 33 }
|
66
|
+
commandName: find
|
67
|
+
- commandStartedEvent:
|
68
|
+
command:
|
69
|
+
getMore: { $$type: [ int, long ] }
|
70
|
+
collection: *collection0Name
|
71
|
+
# https://jira.mongodb.org/browse/RUBY-2443
|
72
|
+
batchSize: 3
|
73
|
+
commandName: getMore
|
74
|
+
databaseName: *database0Name
|
75
|
+
- commandSucceededEvent:
|
76
|
+
reply:
|
77
|
+
ok: 1
|
78
|
+
cursor:
|
79
|
+
id: 0
|
80
|
+
ns: *namespace
|
81
|
+
nextBatch:
|
82
|
+
- { _id: 4, x: 44 }
|
83
|
+
commandName: getMore
|
84
|
+
|
85
|
+
- description: "A failed find event"
|
86
|
+
operations:
|
87
|
+
- name: find
|
88
|
+
object: *collection0
|
89
|
+
arguments:
|
90
|
+
filter: { $or: true }
|
91
|
+
expectError: { isError: true }
|
92
|
+
expectEvents:
|
93
|
+
- client: *client0
|
94
|
+
events:
|
95
|
+
- commandStartedEvent:
|
96
|
+
command:
|
97
|
+
find: *collection0Name
|
98
|
+
filter: { $or: true }
|
99
|
+
commandName: find
|
100
|
+
databaseName: *database0Name
|
101
|
+
- commandFailedEvent:
|
102
|
+
commandName: find
|
@@ -0,0 +1,184 @@
|
|
1
|
+
description: "poc-crud"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
createEntities:
|
6
|
+
- client:
|
7
|
+
id: &client0 client0
|
8
|
+
observeEvents: [ commandStartedEvent ]
|
9
|
+
- database:
|
10
|
+
id: &database0 database0
|
11
|
+
client: *client0
|
12
|
+
databaseName: &database0Name crud-tests
|
13
|
+
- database:
|
14
|
+
id: &database1 database1
|
15
|
+
client: *client0
|
16
|
+
databaseName: &database1Name admin
|
17
|
+
- collection:
|
18
|
+
id: &collection0 collection0
|
19
|
+
database: *database0
|
20
|
+
collectionName: &collection0Name coll0
|
21
|
+
- collection:
|
22
|
+
id: &collection1 collection1
|
23
|
+
database: *database0
|
24
|
+
collectionName: &collection1Name coll1
|
25
|
+
- collection:
|
26
|
+
id: &collection2 collection2
|
27
|
+
database: *database0
|
28
|
+
collectionName: &collection2Name coll2
|
29
|
+
collectionOptions:
|
30
|
+
readConcern: { level: majority }
|
31
|
+
|
32
|
+
initialData:
|
33
|
+
- collectionName: *collection0Name
|
34
|
+
databaseName: *database0Name
|
35
|
+
documents:
|
36
|
+
- { _id: 1, x: 11 }
|
37
|
+
- { _id: 2, x: 22 }
|
38
|
+
- collectionName: *collection1Name
|
39
|
+
databaseName: *database0Name
|
40
|
+
documents:
|
41
|
+
- { _id: 1, x: 11 }
|
42
|
+
- collectionName: *collection2Name
|
43
|
+
databaseName: *database0Name
|
44
|
+
documents:
|
45
|
+
- { _id: 1, x: 11 }
|
46
|
+
- { _id: 2, x: 22 }
|
47
|
+
- { _id: 3, x: 33 }
|
48
|
+
- collectionName: &out aggregate_out
|
49
|
+
databaseName: *database0Name
|
50
|
+
documents: []
|
51
|
+
|
52
|
+
tests:
|
53
|
+
- description: "BulkWrite with mixed ordered operations"
|
54
|
+
operations:
|
55
|
+
- name: bulkWrite
|
56
|
+
object: *collection0
|
57
|
+
arguments:
|
58
|
+
requests:
|
59
|
+
- insertOne:
|
60
|
+
document: { _id: 3, x: 33 }
|
61
|
+
- updateOne:
|
62
|
+
filter: { _id: 2 }
|
63
|
+
update: { $inc: { x: 1 } }
|
64
|
+
- updateMany:
|
65
|
+
filter: { _id: { $gt: 1 } }
|
66
|
+
update: { $inc: { x: 1 } }
|
67
|
+
- insertOne:
|
68
|
+
document: { _id: 4, x: 44 }
|
69
|
+
- deleteMany:
|
70
|
+
filter: { x: { $nin: [ 24, 34 ] } }
|
71
|
+
- replaceOne:
|
72
|
+
filter: { _id: 4 }
|
73
|
+
replacement: { _id: 4, x: 44 }
|
74
|
+
upsert: true
|
75
|
+
ordered: true
|
76
|
+
expectResult:
|
77
|
+
deletedCount: 2
|
78
|
+
insertedCount: 2
|
79
|
+
insertedIds: { $$unsetOrMatches: { 0: 3, 3: 4 } }
|
80
|
+
matchedCount: 3
|
81
|
+
modifiedCount: 3
|
82
|
+
upsertedCount: 1
|
83
|
+
upsertedIds: { 5: 4 }
|
84
|
+
outcome:
|
85
|
+
- collectionName: *collection0Name
|
86
|
+
databaseName: *database0Name
|
87
|
+
documents:
|
88
|
+
- {_id: 2, x: 24 }
|
89
|
+
- {_id: 3, x: 34 }
|
90
|
+
- {_id: 4, x: 44 }
|
91
|
+
|
92
|
+
- description: "InsertMany continue-on-error behavior with unordered (duplicate key in requests)"
|
93
|
+
operations:
|
94
|
+
- name: insertMany
|
95
|
+
object: *collection1
|
96
|
+
arguments:
|
97
|
+
documents:
|
98
|
+
- { _id: 2, x: 22 }
|
99
|
+
- { _id: 2, x: 22 }
|
100
|
+
- { _id: 3, x: 33 }
|
101
|
+
ordered: false
|
102
|
+
expectError:
|
103
|
+
expectResult:
|
104
|
+
deletedCount: 0
|
105
|
+
insertedCount: 2
|
106
|
+
# Since the map of insertedIds is generated before execution it
|
107
|
+
# could indicate inserts that did not actually succeed. We omit
|
108
|
+
# this field rather than expect drivers to provide an accurate
|
109
|
+
# map filtered by write errors.
|
110
|
+
matchedCount: 0
|
111
|
+
modifiedCount: 0
|
112
|
+
upsertedCount: 0
|
113
|
+
upsertedIds: { }
|
114
|
+
outcome:
|
115
|
+
- collectionName: *collection1Name
|
116
|
+
databaseName: *database0Name
|
117
|
+
documents:
|
118
|
+
- { _id: 1, x: 11 }
|
119
|
+
- { _id: 2, x: 22 }
|
120
|
+
- { _id: 3, x: 33 }
|
121
|
+
|
122
|
+
- description: "ReplaceOne prohibits atomic modifiers"
|
123
|
+
skipReason: RUBY-2437
|
124
|
+
operations:
|
125
|
+
- name: replaceOne
|
126
|
+
object: *collection1
|
127
|
+
arguments:
|
128
|
+
filter: { _id: 1 }
|
129
|
+
replacement: { $set: { x: 22 }}
|
130
|
+
expectError:
|
131
|
+
isClientError: true
|
132
|
+
expectEvents:
|
133
|
+
- client: *client0
|
134
|
+
events: []
|
135
|
+
outcome:
|
136
|
+
- collectionName: *collection1Name
|
137
|
+
databaseName: *database0Name
|
138
|
+
documents:
|
139
|
+
- { _id: 1, x: 11 }
|
140
|
+
|
141
|
+
- description: "readConcern majority with out stage"
|
142
|
+
runOnRequirements:
|
143
|
+
- minServerVersion: "4.1.0"
|
144
|
+
topologies: [ replicaset, sharded-replicaset ]
|
145
|
+
operations:
|
146
|
+
- name: aggregate
|
147
|
+
object: *collection2
|
148
|
+
arguments:
|
149
|
+
pipeline: &pipeline
|
150
|
+
- $sort: { x : 1 }
|
151
|
+
- $match: { _id: { $gt: 1 } }
|
152
|
+
- $out: *out
|
153
|
+
expectEvents:
|
154
|
+
- client: *client0
|
155
|
+
events:
|
156
|
+
- commandStartedEvent:
|
157
|
+
command:
|
158
|
+
aggregate: *collection2Name
|
159
|
+
pipeline: *pipeline
|
160
|
+
readConcern: { level: majority }
|
161
|
+
# The following two assertions were not in the original test
|
162
|
+
commandName: aggregate
|
163
|
+
databaseName: *database0Name
|
164
|
+
outcome:
|
165
|
+
- collectionName: *out
|
166
|
+
databaseName: *database0Name
|
167
|
+
documents:
|
168
|
+
- { _id: 2, x: 22 }
|
169
|
+
- { _id: 3, x: 33 }
|
170
|
+
|
171
|
+
- description: "Aggregate with $listLocalSessions"
|
172
|
+
runOnRequirements:
|
173
|
+
- minServerVersion: "3.6.0"
|
174
|
+
operations:
|
175
|
+
- name: aggregate
|
176
|
+
object: *database1
|
177
|
+
arguments:
|
178
|
+
pipeline:
|
179
|
+
- $listLocalSessions: { }
|
180
|
+
- $limit: 1
|
181
|
+
- $addFields: { dummy: "dummy field"}
|
182
|
+
- $project: { _id: 0, dummy: 1}
|
183
|
+
expectResult:
|
184
|
+
- { dummy: "dummy field" }
|
@@ -0,0 +1,155 @@
|
|
1
|
+
description: "poc-gridfs"
|
2
|
+
|
3
|
+
schemaVersion: "1.0"
|
4
|
+
|
5
|
+
createEntities:
|
6
|
+
- client:
|
7
|
+
id: &client0 client0
|
8
|
+
- database:
|
9
|
+
id: &database0 database0
|
10
|
+
client: *client0
|
11
|
+
databaseName: &database0Name gridfs-tests
|
12
|
+
- bucket:
|
13
|
+
id: &bucket0 bucket0
|
14
|
+
database: *database0
|
15
|
+
- collection:
|
16
|
+
id: &bucket0_files_collection bucket0_files_collection
|
17
|
+
database: *database0
|
18
|
+
collectionName: &bucket0_files_collectionName fs.files
|
19
|
+
- collection:
|
20
|
+
id: &bucket0_chunks_collection bucket0_chunks_collection
|
21
|
+
database: *database0
|
22
|
+
collectionName: &bucket0_chunks_collectionName fs.chunks
|
23
|
+
|
24
|
+
initialData:
|
25
|
+
- collectionName: *bucket0_files_collectionName
|
26
|
+
databaseName: *database0Name
|
27
|
+
documents:
|
28
|
+
- _id: { $oid: "000000000000000000000005" }
|
29
|
+
length: 10
|
30
|
+
chunkSize: 4
|
31
|
+
uploadDate: { $date: "1970-01-01T00:00:00.000Z" }
|
32
|
+
md5: "57d83cd477bfb1ccd975ab33d827a92b"
|
33
|
+
filename: "length-10"
|
34
|
+
contentType: "application/octet-stream"
|
35
|
+
aliases: []
|
36
|
+
metadata: {}
|
37
|
+
- collectionName: *bucket0_chunks_collectionName
|
38
|
+
databaseName: *database0Name
|
39
|
+
documents:
|
40
|
+
- _id: { $oid: "000000000000000000000005" }
|
41
|
+
files_id: { $oid: "000000000000000000000005" }
|
42
|
+
n: 0
|
43
|
+
data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex: 11223344
|
44
|
+
- _id: { $oid: "000000000000000000000006" }
|
45
|
+
files_id: { $oid: "000000000000000000000005" }
|
46
|
+
n: 1
|
47
|
+
data: { $binary: { base64: "VWZ3iA==", subType: "00" } } # hex: 55667788
|
48
|
+
- _id: { $oid: "000000000000000000000007" }
|
49
|
+
files_id: { $oid: "000000000000000000000005" }
|
50
|
+
n: 2
|
51
|
+
data: { $binary: { base64: "mao=", subType: "00" } } # hex: 99aa
|
52
|
+
|
53
|
+
tests:
|
54
|
+
# Changed from original test ("length is 8") to operate on same initialData
|
55
|
+
- description: "Delete when length is 10"
|
56
|
+
operations:
|
57
|
+
- name: delete
|
58
|
+
object: *bucket0
|
59
|
+
arguments:
|
60
|
+
id: { $oid: "000000000000000000000005" }
|
61
|
+
# Original test uses "assert.data" syntax to modify outcome collection for
|
62
|
+
# comparison. This can be accomplished using "outcome" directly.
|
63
|
+
outcome:
|
64
|
+
- collectionName: *bucket0_files_collectionName
|
65
|
+
databaseName: *database0Name
|
66
|
+
documents: []
|
67
|
+
- collectionName: *bucket0_chunks_collectionName
|
68
|
+
databaseName: *database0Name
|
69
|
+
documents: []
|
70
|
+
|
71
|
+
- description: "Download when there are three chunks"
|
72
|
+
operations:
|
73
|
+
# Original test uses "download" operation. We use an explicit operation
|
74
|
+
# that returns a stream and then assert the contents of that stream.
|
75
|
+
- name: download
|
76
|
+
object: *bucket0
|
77
|
+
arguments:
|
78
|
+
id: { $oid: "000000000000000000000005" }
|
79
|
+
expectResult: { $$matchesHexBytes: "112233445566778899aa" }
|
80
|
+
|
81
|
+
- description: "Download when files entry does not exist"
|
82
|
+
operations:
|
83
|
+
- name: download
|
84
|
+
object: *bucket0
|
85
|
+
arguments:
|
86
|
+
id: { $oid: "000000000000000000000000" }
|
87
|
+
# Original test expects "FileNotFound" error, which isn't specified
|
88
|
+
expectError: { isError: true }
|
89
|
+
|
90
|
+
- description: "Download when an intermediate chunk is missing"
|
91
|
+
operations:
|
92
|
+
# Original test uses "arrange" syntax to modify initialData. This can be
|
93
|
+
# accomplished as a delete operation on the chunks collection.
|
94
|
+
- name: deleteOne
|
95
|
+
object: *bucket0_chunks_collection
|
96
|
+
arguments:
|
97
|
+
filter:
|
98
|
+
files_id: { $oid: "000000000000000000000005" }
|
99
|
+
n: 1
|
100
|
+
expectResult:
|
101
|
+
deletedCount: 1
|
102
|
+
- name: download
|
103
|
+
object: *bucket0
|
104
|
+
arguments:
|
105
|
+
id: { $oid: "000000000000000000000005" }
|
106
|
+
# Original test expects "ChunkIsMissing" error, which isn't specified
|
107
|
+
expectError: { isError: true }
|
108
|
+
|
109
|
+
- description: "Upload when length is 5"
|
110
|
+
operations:
|
111
|
+
# Original test uses "upload" operation. We use an explicit operation
|
112
|
+
# that takes a stream, which has been created from the expected hex bytes.
|
113
|
+
- name: upload
|
114
|
+
object: *bucket0
|
115
|
+
arguments:
|
116
|
+
filename: filename
|
117
|
+
source: { $$hexBytes: "1122334455" }
|
118
|
+
chunkSizeBytes: 4
|
119
|
+
# Original test references the result directly in "assert.data". Here,
|
120
|
+
# we need to save the result as an entity, which we can later reference.
|
121
|
+
expectResult: { $$type: objectId }
|
122
|
+
saveResultAsEntity: &oid0 oid0
|
123
|
+
# "outcome" does not allow operators, but we can perform the assertions
|
124
|
+
# with separate find operations.
|
125
|
+
- name: find
|
126
|
+
object: *bucket0_files_collection
|
127
|
+
arguments:
|
128
|
+
filter: {}
|
129
|
+
sort: { uploadDate: -1 }
|
130
|
+
limit: 1
|
131
|
+
expectResult:
|
132
|
+
- _id: { $$matchesEntity: *oid0 }
|
133
|
+
length: 5
|
134
|
+
chunkSize: 4
|
135
|
+
uploadDate: { $$type: date }
|
136
|
+
# The md5 field is deprecated so some drivers do not calculate it when uploading files.
|
137
|
+
md5: { $$unsetOrMatches: "283d4fea5dded59cf837d3047328f5af" }
|
138
|
+
filename: filename
|
139
|
+
- name: find
|
140
|
+
object: *bucket0_chunks_collection
|
141
|
+
arguments:
|
142
|
+
# We cannot use the saved ObjectId when querying, but filtering by a
|
143
|
+
# non-zero timestamp will exclude initialData and sort can return the
|
144
|
+
# expected chunks in order.
|
145
|
+
filter: { _id: { $gt: { $oid: "000000000000000000000007" } } }
|
146
|
+
sort: { n: 1 }
|
147
|
+
expectResult:
|
148
|
+
- _id: { $$type: objectId }
|
149
|
+
files_id: { $$matchesEntity: *oid0 }
|
150
|
+
n: 0
|
151
|
+
data: { $binary: { base64: "ESIzRA==", subType: "00" } } # hex 11223344
|
152
|
+
- _id: { $$type: objectId }
|
153
|
+
files_id: { $$matchesEntity: *oid0 }
|
154
|
+
n: 1
|
155
|
+
data: { $binary: { base64: "VQ==", subType: "00" } } # hex 55
|