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.
Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +4 -1
  4. data/Rakefile +8 -15
  5. data/lib/mongo/auth/aws/conversation.rb +1 -4
  6. data/lib/mongo/auth/base.rb +13 -7
  7. data/lib/mongo/auth/conversation_base.rb +32 -0
  8. data/lib/mongo/auth/cr/conversation.rb +6 -29
  9. data/lib/mongo/auth/gssapi/conversation.rb +4 -15
  10. data/lib/mongo/auth/ldap/conversation.rb +3 -14
  11. data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
  12. data/lib/mongo/auth/scram_conversation_base.rb +7 -34
  13. data/lib/mongo/auth/user/view.rb +16 -9
  14. data/lib/mongo/auth/x509/conversation.rb +4 -25
  15. data/lib/mongo/bulk_write.rb +21 -18
  16. data/lib/mongo/client.rb +82 -6
  17. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
  18. data/lib/mongo/cluster.rb +19 -2
  19. data/lib/mongo/collection/view/aggregation.rb +1 -1
  20. data/lib/mongo/collection/view/change_stream.rb +1 -1
  21. data/lib/mongo/collection/view/iterable.rb +7 -17
  22. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  23. data/lib/mongo/collection/view/readable.rb +42 -20
  24. data/lib/mongo/collection/view/writable.rb +14 -14
  25. data/lib/mongo/collection.rb +6 -6
  26. data/lib/mongo/cursor.rb +2 -12
  27. data/lib/mongo/database/view.rb +1 -1
  28. data/lib/mongo/database.rb +8 -3
  29. data/lib/mongo/error/bulk_write_error.rb +17 -3
  30. data/lib/mongo/error/internal_driver_error.rb +22 -0
  31. data/lib/mongo/error/operation_failure.rb +21 -2
  32. data/lib/mongo/error/parser.rb +65 -12
  33. data/lib/mongo/error/server_api_conflict.rb +23 -0
  34. data/lib/mongo/error/server_api_not_supported.rb +24 -0
  35. data/lib/mongo/error/unmet_dependency.rb +21 -0
  36. data/lib/mongo/error.rb +9 -1
  37. data/lib/mongo/index/view.rb +21 -11
  38. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
  39. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
  40. data/lib/mongo/monitoring.rb +13 -4
  41. data/lib/mongo/operation/collections_info/command.rb +2 -2
  42. data/lib/mongo/operation/collections_info.rb +18 -1
  43. data/lib/mongo/operation/context.rb +99 -0
  44. data/lib/mongo/operation/indexes.rb +15 -1
  45. data/lib/mongo/operation/insert/command.rb +2 -2
  46. data/lib/mongo/operation/insert/legacy.rb +2 -2
  47. data/lib/mongo/operation/insert/op_msg.rb +2 -2
  48. data/lib/mongo/operation/list_collections/result.rb +4 -1
  49. data/lib/mongo/operation/parallel_scan/command.rb +2 -1
  50. data/lib/mongo/operation/result.rb +2 -0
  51. data/lib/mongo/operation/shared/executable.rb +24 -14
  52. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  53. data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
  54. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
  55. data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
  56. data/lib/mongo/operation/shared/read_preference_supported.rb +36 -38
  57. data/lib/mongo/operation/shared/response_handling.rb +23 -23
  58. data/lib/mongo/operation/shared/sessions_supported.rb +15 -5
  59. data/lib/mongo/operation/shared/write.rb +8 -18
  60. data/lib/mongo/operation.rb +2 -2
  61. data/lib/mongo/protocol/compressed.rb +51 -5
  62. data/lib/mongo/protocol/message.rb +20 -2
  63. data/lib/mongo/protocol/msg.rb +38 -13
  64. data/lib/mongo/protocol/query.rb +11 -11
  65. data/lib/mongo/query_cache.rb +30 -0
  66. data/lib/mongo/retryable.rb +1 -1
  67. data/lib/mongo/server/app_metadata.rb +52 -18
  68. data/lib/mongo/server/connection.rb +5 -0
  69. data/lib/mongo/server/connection_base.rb +13 -10
  70. data/lib/mongo/server/connection_pool.rb +6 -2
  71. data/lib/mongo/server/description/features.rb +9 -8
  72. data/lib/mongo/server/description.rb +4 -0
  73. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  74. data/lib/mongo/server/monitor/connection.rb +9 -10
  75. data/lib/mongo/server/monitor.rb +20 -1
  76. data/lib/mongo/server/pending_connection.rb +24 -6
  77. data/lib/mongo/server/push_monitor.rb +11 -1
  78. data/lib/mongo/server.rb +7 -1
  79. data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
  80. data/lib/mongo/session/session_pool.rb +4 -2
  81. data/lib/mongo/session.rb +2 -2
  82. data/lib/mongo/socket/ssl.rb +8 -0
  83. data/lib/mongo/socket.rb +29 -4
  84. data/lib/mongo/uri/options_mapper.rb +38 -0
  85. data/lib/mongo/utils.rb +15 -0
  86. data/lib/mongo/version.rb +1 -1
  87. data/lib/mongo.rb +23 -0
  88. data/spec/README.md +24 -1
  89. data/spec/integration/auth_spec.rb +25 -15
  90. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  91. data/spec/integration/change_stream_spec.rb +4 -4
  92. data/spec/integration/command_monitoring_spec.rb +2 -2
  93. data/spec/integration/connection_spec.rb +2 -0
  94. data/spec/integration/docs_examples_spec.rb +8 -1
  95. data/spec/integration/fork_reconnect_spec.rb +4 -1
  96. data/spec/integration/ocsp_verifier_spec.rb +13 -7
  97. data/spec/integration/operation_failure_code_spec.rb +1 -1
  98. data/spec/integration/operation_failure_message_spec.rb +90 -0
  99. data/spec/integration/query_cache_spec.rb +0 -45
  100. data/spec/integration/reconnect_spec.rb +1 -1
  101. data/spec/integration/snappy_compression_spec.rb +25 -0
  102. data/spec/integration/srv_monitoring_spec.rb +1 -1
  103. data/spec/integration/transactions_examples_spec.rb +6 -0
  104. data/spec/integration/zlib_compression_spec.rb +1 -1
  105. data/spec/integration/zstd_compression_spec.rb +26 -0
  106. data/spec/lite_spec_helper.rb +7 -1
  107. data/spec/mongo/address_spec.rb +15 -11
  108. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  109. data/spec/mongo/auth/ldap_spec.rb +5 -1
  110. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  111. data/spec/mongo/auth/scram_spec.rb +1 -1
  112. data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
  113. data/spec/mongo/client_construction_spec.rb +207 -33
  114. data/spec/mongo/client_spec.rb +17 -0
  115. data/spec/mongo/cluster_spec.rb +1 -0
  116. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  117. data/spec/mongo/collection/view/readable_spec.rb +33 -19
  118. data/spec/mongo/collection_crud_spec.rb +4357 -0
  119. data/spec/mongo/collection_ddl_spec.rb +534 -0
  120. data/spec/mongo/collection_spec.rb +5 -4859
  121. data/spec/mongo/database_spec.rb +66 -4
  122. data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
  123. data/spec/mongo/error/parser_spec.rb +37 -6
  124. data/spec/mongo/index/view_spec.rb +4 -0
  125. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  126. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  127. data/spec/mongo/operation/aggregate_spec.rb +2 -1
  128. data/spec/mongo/operation/collections_info_spec.rb +4 -1
  129. data/spec/mongo/operation/command_spec.rb +6 -3
  130. data/spec/mongo/operation/create_index_spec.rb +6 -3
  131. data/spec/mongo/operation/create_user_spec.rb +6 -3
  132. data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
  133. data/spec/mongo/operation/delete_spec.rb +11 -7
  134. data/spec/mongo/operation/drop_index_spec.rb +6 -2
  135. data/spec/mongo/operation/find/legacy_spec.rb +3 -1
  136. data/spec/mongo/operation/get_more_spec.rb +3 -1
  137. data/spec/mongo/operation/indexes_spec.rb +5 -1
  138. data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
  139. data/spec/mongo/operation/insert_spec.rb +15 -12
  140. data/spec/mongo/operation/map_reduce_spec.rb +5 -2
  141. data/spec/mongo/operation/read_preference_legacy_spec.rb +19 -9
  142. data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
  143. data/spec/mongo/operation/remove_user_spec.rb +6 -3
  144. data/spec/mongo/operation/result_spec.rb +1 -1
  145. data/spec/mongo/operation/update/bulk_spec.rb +9 -6
  146. data/spec/mongo/operation/update_spec.rb +10 -7
  147. data/spec/mongo/operation/update_user_spec.rb +4 -1
  148. data/spec/mongo/protocol/compressed_spec.rb +26 -12
  149. data/spec/mongo/query_cache_middleware_spec.rb +55 -0
  150. data/spec/mongo/retryable_spec.rb +3 -2
  151. data/spec/mongo/server/app_metadata_shared.rb +7 -33
  152. data/spec/mongo/server/app_metadata_spec.rb +2 -0
  153. data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
  154. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  155. data/spec/mongo/server/connection_spec.rb +24 -17
  156. data/spec/mongo/server/monitor/connection_spec.rb +17 -7
  157. data/spec/mongo/server/monitor_spec.rb +9 -1
  158. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  159. data/spec/mongo/server_spec.rb +15 -2
  160. data/spec/mongo/socket/ssl_spec.rb +40 -0
  161. data/spec/mongo/socket_spec.rb +2 -2
  162. data/spec/mongo/tls_context_hooks_spec.rb +37 -0
  163. data/spec/runners/connection_string.rb +0 -4
  164. data/spec/runners/crud/requirement.rb +40 -3
  165. data/spec/runners/crud/verifier.rb +8 -0
  166. data/spec/runners/transactions/operation.rb +1 -1
  167. data/spec/runners/transactions/test.rb +1 -0
  168. data/spec/runners/unified/assertions.rb +249 -0
  169. data/spec/runners/unified/change_stream_operations.rb +26 -0
  170. data/spec/runners/unified/crud_operations.rb +199 -0
  171. data/spec/runners/unified/ddl_operations.rb +96 -0
  172. data/spec/runners/unified/entity_map.rb +39 -0
  173. data/spec/runners/unified/error.rb +25 -0
  174. data/spec/runners/unified/event_subscriber.rb +91 -0
  175. data/spec/runners/unified/exceptions.rb +21 -0
  176. data/spec/runners/unified/grid_fs_operations.rb +55 -0
  177. data/spec/runners/unified/support_operations.rb +250 -0
  178. data/spec/runners/unified/test.rb +393 -0
  179. data/spec/runners/unified/test_group.rb +28 -0
  180. data/spec/runners/unified/using_hash.rb +31 -0
  181. data/spec/runners/unified.rb +96 -0
  182. data/spec/shared/lib/mrss/cluster_config.rb +0 -3
  183. data/spec/shared/lib/mrss/docker_runner.rb +0 -3
  184. data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
  185. data/spec/shared/lib/mrss/server_version_registry.rb +0 -3
  186. data/spec/shared/lib/mrss/spec_organizer.rb +0 -3
  187. data/spec/shared/shlib/server.sh +1 -1
  188. data/spec/spec_helper.rb +4 -1
  189. data/spec/spec_tests/crud_unified_spec.rb +10 -0
  190. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  191. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  192. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  193. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
  194. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  195. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
  196. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
  197. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  198. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  199. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  200. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  201. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  202. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  203. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  204. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  205. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  206. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  207. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  208. data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
  209. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
  210. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
  211. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
  212. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  213. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
  214. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
  215. data/spec/spec_tests/unified_spec.rb +15 -0
  216. data/spec/spec_tests/uri_options_spec.rb +16 -0
  217. data/spec/spec_tests/versioned_api_spec.rb +10 -0
  218. data/spec/support/client_registry.rb +4 -8
  219. data/spec/support/client_registry_macros.rb +4 -4
  220. data/spec/support/common_shortcuts.rb +15 -1
  221. data/spec/support/shared/session.rb +2 -2
  222. data/spec/support/spec_config.rb +42 -11
  223. data/spec/support/utils.rb +64 -3
  224. data.tar.gz.sig +0 -0
  225. metadata +1005 -915
  226. metadata.gz.sig +0 -0
  227. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
  228. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  229. data/spec/integration/secondary_reads_spec.rb +0 -102
  230. data/spec/support/cluster_config.rb +0 -207
@@ -0,0 +1,267 @@
1
+ description: "estimatedDocumentCount"
2
+
3
+ schemaVersion: "1.0"
4
+
5
+ createEntities:
6
+ - client:
7
+ id: &client0 client0
8
+ useMultipleMongoses: false # Avoid setting fail points with multiple mongoses
9
+ uriOptions: { retryReads: false } # Avoid retrying fail points with closeConnection
10
+ observeEvents: [ commandStartedEvent ]
11
+ - database:
12
+ id: &database0 database0
13
+ client: *client0
14
+ databaseName: &database0Name edc-tests
15
+ - collection:
16
+ id: &collection0 collection0
17
+ database: *database0
18
+ collectionName: &collection0Name coll0
19
+ - collection:
20
+ # Nonexistent collection intentionally omitted from initialData
21
+ id: &collection1 collection1
22
+ database: *database0
23
+ collectionName: &collection1Name coll1
24
+
25
+ initialData:
26
+ - collectionName: *collection0Name
27
+ databaseName: *database0Name
28
+ documents:
29
+ - { _id: 1, x: 11 }
30
+ - { _id: 2, x: 22 }
31
+ - { _id: 3, x: 33 }
32
+
33
+ tests:
34
+ - description: "estimatedDocumentCount uses $collStats on 4.9.0 or greater"
35
+ runOnRequirements:
36
+ - minServerVersion: "4.9.0"
37
+ operations:
38
+ - name: estimatedDocumentCount
39
+ object: *collection0
40
+ expectResult: 3
41
+ expectEvents:
42
+ - client: *client0
43
+ events:
44
+ - commandStartedEvent:
45
+ command:
46
+ aggregate: *collection0Name
47
+ pipeline: &pipeline
48
+ - $collStats: { count: {} }
49
+ - $group: { _id: 1, n: { $sum: $count }}
50
+ commandName: aggregate
51
+ databaseName: *database0Name
52
+
53
+ - description: "estimatedDocumentCount with maxTimeMS on 4.9.0 or greater"
54
+ runOnRequirements:
55
+ - minServerVersion: "4.9.0"
56
+ operations:
57
+ - name: estimatedDocumentCount
58
+ object: *collection0
59
+ arguments:
60
+ maxTimeMS: 6000
61
+ expectResult: 3
62
+ expectEvents:
63
+ - client: *client0
64
+ events:
65
+ - commandStartedEvent:
66
+ command:
67
+ aggregate: *collection0Name
68
+ pipeline: &pipeline
69
+ - $collStats: { count: {} }
70
+ - $group: { _id: 1, n: { $sum: $count }}
71
+ maxTimeMS: 6000
72
+ commandName: aggregate
73
+ databaseName: *database0Name
74
+
75
+ - description: "estimatedDocumentCount on non-existent collection on 4.9.0 or greater"
76
+ runOnRequirements:
77
+ - minServerVersion: "4.9.0"
78
+ operations:
79
+ - name: estimatedDocumentCount
80
+ object: *collection1
81
+ expectResult: 0
82
+ expectEvents:
83
+ - client: *client0
84
+ events:
85
+ - commandStartedEvent:
86
+ command:
87
+ aggregate: *collection1Name
88
+ pipeline: &pipeline
89
+ - $collStats: { count: {} }
90
+ - $group: { _id: 1, n: { $sum: $count }}
91
+ commandName: aggregate
92
+ databaseName: *database0Name
93
+
94
+ - description: "estimatedDocumentCount errors correctly on 4.9.0 or greater--command error"
95
+ runOnRequirements:
96
+ - minServerVersion: "4.9.0"
97
+ operations:
98
+ - name: failPoint
99
+ object: testRunner
100
+ arguments:
101
+ client: *client0
102
+ failPoint:
103
+ configureFailPoint: failCommand
104
+ mode: { times: 1 }
105
+ data:
106
+ failCommands: [ aggregate ]
107
+ errorCode: 8 # UnknownError
108
+ - name: estimatedDocumentCount
109
+ object: *collection0
110
+ expectError:
111
+ errorCode: 8 # UnknownError
112
+ expectEvents:
113
+ - client: *client0
114
+ events:
115
+ - commandStartedEvent:
116
+ command:
117
+ aggregate: *collection0Name
118
+ pipeline: &pipeline
119
+ - $collStats: { count: {} }
120
+ - $group: { _id: 1, n: { $sum: $count }}
121
+ commandName: aggregate
122
+ databaseName: *database0Name
123
+
124
+ - description: "estimatedDocumentCount errors correctly on 4.9.0 or greater--socket error"
125
+ runOnRequirements:
126
+ - minServerVersion: "4.9.0"
127
+ operations:
128
+ - name: failPoint
129
+ object: testRunner
130
+ arguments:
131
+ client: *client0
132
+ failPoint:
133
+ configureFailPoint: failCommand
134
+ mode: { times: 1 }
135
+ data:
136
+ failCommands: [ aggregate ]
137
+ closeConnection: true
138
+ - name: estimatedDocumentCount
139
+ object: *collection0
140
+ expectError:
141
+ isError: true
142
+ expectEvents:
143
+ - client: *client0
144
+ events:
145
+ - commandStartedEvent:
146
+ command:
147
+ aggregate: *collection0Name
148
+ pipeline: &pipeline
149
+ - $collStats: { count: {} }
150
+ - $group: { _id: 1, n: { $sum: $count }}
151
+ commandName: aggregate
152
+ databaseName: *database0Name
153
+
154
+ - description: "estimatedDocumentCount uses count on less than 4.9.0"
155
+ runOnRequirements:
156
+ - maxServerVersion: "4.8.99"
157
+ operations:
158
+ - name: estimatedDocumentCount
159
+ object: *collection0
160
+ expectResult: 3
161
+ expectEvents:
162
+ - client: *client0
163
+ events:
164
+ - commandStartedEvent:
165
+ command:
166
+ count: *collection0Name
167
+ commandName: count
168
+ databaseName: *database0Name
169
+
170
+ - description: "estimatedDocumentCount with maxTimeMS on less than 4.9.0"
171
+ runOnRequirements:
172
+ - maxServerVersion: "4.8.99"
173
+ operations:
174
+ - name: estimatedDocumentCount
175
+ object: *collection0
176
+ arguments:
177
+ maxTimeMS: 6000
178
+ expectResult: 3
179
+ expectEvents:
180
+ - client: *client0
181
+ events:
182
+ - commandStartedEvent:
183
+ command:
184
+ count: *collection0Name
185
+ maxTimeMS: 6000
186
+ commandName: count
187
+ databaseName: *database0Name
188
+
189
+ - description: "estimatedDocumentCount on non-existent collection on less than 4.9.0"
190
+ runOnRequirements:
191
+ - maxServerVersion: "4.8.99"
192
+ operations:
193
+ - name: estimatedDocumentCount
194
+ object: *collection1
195
+ expectResult: 0
196
+ expectEvents:
197
+ - client: *client0
198
+ events:
199
+ - commandStartedEvent:
200
+ command:
201
+ count: *collection1Name
202
+ commandName: count
203
+ databaseName: *database0Name
204
+
205
+ - description: "estimatedDocumentCount errors correctly on less than 4.9.0--command error"
206
+ runOnRequirements:
207
+ - minServerVersion: "4.0.0"
208
+ maxServerVersion: "4.8.99"
209
+ topologies: [ single, replicaset ]
210
+ - minServerVersion: "4.2.0"
211
+ maxServerVersion: "4.8.99"
212
+ topologies: [ sharded ]
213
+ operations:
214
+ - name: failPoint
215
+ object: testRunner
216
+ arguments:
217
+ client: *client0
218
+ failPoint:
219
+ configureFailPoint: failCommand
220
+ mode: { times: 1 }
221
+ data:
222
+ failCommands: [ count ]
223
+ errorCode: 8 # UnknownError
224
+ - name: estimatedDocumentCount
225
+ object: *collection0
226
+ expectError:
227
+ errorCode: 8 # UnknownError
228
+ expectEvents:
229
+ - client: *client0
230
+ events:
231
+ - commandStartedEvent:
232
+ command:
233
+ count: *collection0Name
234
+ commandName: count
235
+ databaseName: *database0Name
236
+
237
+ - description: "estimatedDocumentCount errors correctly on less than 4.9.0--socket error"
238
+ runOnRequirements:
239
+ - minServerVersion: "4.0.0"
240
+ maxServerVersion: "4.8.99"
241
+ topologies: [ single, replicaset ]
242
+ - minServerVersion: "4.2.0"
243
+ maxServerVersion: "4.8.99"
244
+ topologies: [ sharded ]
245
+ operations:
246
+ - name: failPoint
247
+ object: testRunner
248
+ arguments:
249
+ client: *client0
250
+ failPoint:
251
+ configureFailPoint: failCommand
252
+ mode: { times: 1 }
253
+ data:
254
+ failCommands: [ count ]
255
+ closeConnection: true
256
+ - name: estimatedDocumentCount
257
+ object: *collection0
258
+ expectError:
259
+ isError: true
260
+ expectEvents:
261
+ - client: *client0
262
+ events:
263
+ - commandStartedEvent:
264
+ command:
265
+ count: *collection0Name
266
+ commandName: count
267
+ databaseName: *database0Name
@@ -0,0 +1,60 @@
1
+ runOn:
2
+ - minServerVersion: "4.9.0"
3
+
4
+ database_name: &database_name "retryable-reads-tests"
5
+ collection_name: &collection_name "coll"
6
+
7
+ data:
8
+ - { _id: 1, x: 11 }
9
+ - { _id: 2, x: 22 }
10
+
11
+ tests:
12
+ -
13
+ description: "EstimatedDocumentCount succeeds on first attempt"
14
+ operations:
15
+ - &retryable_operation_succeeds
16
+ <<: &retryable_operation
17
+ name: estimatedDocumentCount
18
+ object: collection
19
+ result: 2
20
+ expectations:
21
+ - &retryable_command_started_event
22
+ command_started_event:
23
+ command:
24
+ aggregate: *collection_name
25
+ pipeline: &pipeline
26
+ - $collStats: { count: {} }
27
+ - $group: { _id: 1, n: { $sum: $count }}
28
+ database_name: *database_name
29
+ -
30
+ description: "EstimatedDocumentCount succeeds on second attempt"
31
+ failPoint: &failCommand_failPoint
32
+ configureFailPoint: failCommand
33
+ mode: { times: 1 }
34
+ data:
35
+ failCommands: [aggregate]
36
+ closeConnection: true
37
+ operations: [*retryable_operation_succeeds]
38
+ expectations:
39
+ - *retryable_command_started_event
40
+ - *retryable_command_started_event
41
+ -
42
+ description: "EstimatedDocumentCount fails on first attempt"
43
+ clientOptions:
44
+ retryReads: false
45
+ failPoint: *failCommand_failPoint
46
+ operations:
47
+ - &retryable_operation_fails
48
+ <<: *retryable_operation
49
+ error: true
50
+ expectations:
51
+ - *retryable_command_started_event
52
+ -
53
+ description: "EstimatedDocumentCount fails on second attempt"
54
+ failPoint:
55
+ <<: *failCommand_failPoint
56
+ mode: { times: 2 }
57
+ operations: [*retryable_operation_fails]
58
+ expectations:
59
+ - *retryable_command_started_event
60
+ - *retryable_command_started_event
@@ -1,9 +1,11 @@
1
1
  runOn:
2
2
  -
3
3
  minServerVersion: "4.0"
4
+ maxServerVersion: "4.8.99"
4
5
  topology: ["single", "replicaset"]
5
6
  -
6
7
  minServerVersion: "4.1.7"
8
+ maxServerVersion: "4.8.99"
7
9
  topology: ["sharded"]
8
10
 
9
11
  database_name: &database_name "retryable-reads-tests"
@@ -0,0 +1,146 @@
1
+ runOn:
2
+ - minServerVersion: "4.9.0"
3
+
4
+ database_name: &database_name "retryable-reads-tests"
5
+ collection_name: &collection_name "coll"
6
+
7
+ data:
8
+ - { _id: 1, x: 11 }
9
+ - { _id: 2, x: 22 }
10
+
11
+ tests:
12
+ -
13
+ description: "EstimatedDocumentCount succeeds after InterruptedAtShutdown"
14
+ failPoint: &failCommand_failPoint
15
+ configureFailPoint: failCommand
16
+ mode: { times: 1 }
17
+ data: { failCommands: [aggregate], errorCode: 11600 }
18
+ operations:
19
+ - &retryable_operation_succeeds
20
+ <<: &retryable_operation
21
+ name: estimatedDocumentCount
22
+ object: collection
23
+ result: 2
24
+ expectations:
25
+ - &retryable_command_started_event
26
+ command_started_event:
27
+ command:
28
+ aggregate: *collection_name
29
+ pipeline: &pipeline
30
+ - $collStats: { count: {} }
31
+ - $group: { _id: 1, n: { $sum: $count }}
32
+ database_name: *database_name
33
+ - *retryable_command_started_event
34
+ -
35
+ description: "EstimatedDocumentCount succeeds after InterruptedDueToReplStateChange"
36
+ failPoint:
37
+ <<: *failCommand_failPoint
38
+ data: { failCommands: [aggregate], errorCode: 11602 }
39
+ operations: [*retryable_operation_succeeds]
40
+ expectations:
41
+ - *retryable_command_started_event
42
+ - *retryable_command_started_event
43
+ -
44
+ description: "EstimatedDocumentCount succeeds after NotMaster"
45
+ failPoint:
46
+ <<: *failCommand_failPoint
47
+ data: { failCommands: [aggregate], errorCode: 10107 }
48
+ operations: [*retryable_operation_succeeds]
49
+ expectations:
50
+ - *retryable_command_started_event
51
+ - *retryable_command_started_event
52
+ -
53
+ description: "EstimatedDocumentCount succeeds after NotMasterNoSlaveOk"
54
+ failPoint:
55
+ <<: *failCommand_failPoint
56
+ data: { failCommands: [aggregate], errorCode: 13435 }
57
+ operations: [*retryable_operation_succeeds]
58
+ expectations:
59
+ - *retryable_command_started_event
60
+ - *retryable_command_started_event
61
+ -
62
+ description: "EstimatedDocumentCount succeeds after NotMasterOrSecondary"
63
+ failPoint:
64
+ <<: *failCommand_failPoint
65
+ data: { failCommands: [aggregate], errorCode: 13436 }
66
+ operations: [*retryable_operation_succeeds]
67
+ expectations:
68
+ - *retryable_command_started_event
69
+ - *retryable_command_started_event
70
+ -
71
+ description: "EstimatedDocumentCount succeeds after PrimarySteppedDown"
72
+ failPoint:
73
+ <<: *failCommand_failPoint
74
+ data: { failCommands: [aggregate], errorCode: 189 }
75
+ operations: [*retryable_operation_succeeds]
76
+ expectations:
77
+ - *retryable_command_started_event
78
+ - *retryable_command_started_event
79
+ -
80
+ description: "EstimatedDocumentCount succeeds after ShutdownInProgress"
81
+ failPoint:
82
+ <<: *failCommand_failPoint
83
+ data: { failCommands: [aggregate], errorCode: 91 }
84
+ operations: [*retryable_operation_succeeds]
85
+ expectations:
86
+ - *retryable_command_started_event
87
+ - *retryable_command_started_event
88
+ -
89
+ description: "EstimatedDocumentCount succeeds after HostNotFound"
90
+ failPoint:
91
+ <<: *failCommand_failPoint
92
+ data: { failCommands: [aggregate], errorCode: 7 }
93
+ operations: [*retryable_operation_succeeds]
94
+ expectations:
95
+ - *retryable_command_started_event
96
+ - *retryable_command_started_event
97
+ -
98
+ description: "EstimatedDocumentCount succeeds after HostUnreachable"
99
+ failPoint:
100
+ <<: *failCommand_failPoint
101
+ data: { failCommands: [aggregate], errorCode: 6 }
102
+ operations: [*retryable_operation_succeeds]
103
+ expectations:
104
+ - *retryable_command_started_event
105
+ - *retryable_command_started_event
106
+ -
107
+ description: "EstimatedDocumentCount succeeds after NetworkTimeout"
108
+ failPoint:
109
+ <<: *failCommand_failPoint
110
+ data: { failCommands: [aggregate], errorCode: 89 }
111
+ operations: [*retryable_operation_succeeds]
112
+ expectations:
113
+ - *retryable_command_started_event
114
+ - *retryable_command_started_event
115
+ -
116
+ description: "EstimatedDocumentCount succeeds after SocketException"
117
+ failPoint:
118
+ <<: *failCommand_failPoint
119
+ data: { failCommands: [aggregate], errorCode: 9001 }
120
+ operations: [*retryable_operation_succeeds]
121
+ expectations:
122
+ - *retryable_command_started_event
123
+ - *retryable_command_started_event
124
+ -
125
+ description: "EstimatedDocumentCount fails after two NotMaster errors"
126
+ failPoint:
127
+ <<: *failCommand_failPoint
128
+ mode: { times: 2 }
129
+ data: { failCommands: [aggregate], errorCode: 10107 }
130
+ operations:
131
+ - &retryable_operation_fails
132
+ <<: *retryable_operation
133
+ error: true
134
+ expectations:
135
+ - *retryable_command_started_event
136
+ - *retryable_command_started_event
137
+ -
138
+ description: "EstimatedDocumentCount fails after NotMaster when retryReads is false"
139
+ clientOptions:
140
+ retryReads: false
141
+ failPoint:
142
+ <<: *failCommand_failPoint
143
+ data: { failCommands: [aggregate], errorCode: 10107 }
144
+ operations: [*retryable_operation_fails]
145
+ expectations:
146
+ - *retryable_command_started_event
@@ -1,9 +1,11 @@
1
1
  runOn:
2
2
  -
3
3
  minServerVersion: "4.0"
4
+ maxServerVersion: "4.8.99"
4
5
  topology: ["single", "replicaset"]
5
6
  -
6
7
  minServerVersion: "4.1.7"
8
+ maxServerVersion: "4.8.99"
7
9
  topology: ["sharded"]
8
10
 
9
11
  database_name: &database_name "retryable-reads-tests"
@@ -22,7 +22,7 @@ tests:
22
22
  - &retryable_command_started_event
23
23
  command_started_event:
24
24
  command:
25
- listIndexNames: *collection_name
25
+ listIndexes: *collection_name
26
26
  database_name: *database_name
27
27
  -
28
28
  description: "ListIndexNames succeeds on second attempt"
@@ -0,0 +1,31 @@
1
+ description: "operation-failure"
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: operation-failure
12
+ - collection:
13
+ id: &collection0 collection0
14
+ database: *database0
15
+ collectionName: coll0
16
+
17
+ tests:
18
+ - description: "Unsupported command"
19
+ operations:
20
+ - name: runCommand
21
+ object: *database0
22
+ arguments:
23
+ commandName: unsupportedCommand
24
+ command: { unsupportedCommand: 1 }
25
+
26
+ - description: "Unsupported query operator"
27
+ operations:
28
+ - name: find
29
+ object: *collection0
30
+ arguments:
31
+ filter: { $unsupportedQueryOperator: 1 }