mongo 2.14.0 → 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.tar.gz.sig +0 -0
  4. data/README.md +4 -1
  5. data/Rakefile +8 -15
  6. data/lib/mongo.rb +23 -0
  7. data/lib/mongo/auth/aws/conversation.rb +1 -4
  8. data/lib/mongo/auth/base.rb +13 -7
  9. data/lib/mongo/auth/conversation_base.rb +32 -0
  10. data/lib/mongo/auth/cr/conversation.rb +6 -29
  11. data/lib/mongo/auth/gssapi/conversation.rb +4 -15
  12. data/lib/mongo/auth/ldap/conversation.rb +3 -14
  13. data/lib/mongo/auth/sasl_conversation_base.rb +1 -13
  14. data/lib/mongo/auth/scram_conversation_base.rb +7 -34
  15. data/lib/mongo/auth/user/view.rb +16 -9
  16. data/lib/mongo/auth/x509/conversation.rb +4 -25
  17. data/lib/mongo/background_thread.rb +11 -0
  18. data/lib/mongo/bulk_write.rb +21 -18
  19. data/lib/mongo/client.rb +82 -6
  20. data/lib/mongo/cluster.rb +19 -28
  21. data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -2
  22. data/lib/mongo/cluster/sdam_flow.rb +14 -0
  23. data/lib/mongo/collection.rb +8 -6
  24. data/lib/mongo/collection/view/aggregation.rb +1 -1
  25. data/lib/mongo/collection/view/change_stream.rb +1 -1
  26. data/lib/mongo/collection/view/iterable.rb +1 -1
  27. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  28. data/lib/mongo/collection/view/readable.rb +42 -20
  29. data/lib/mongo/collection/view/writable.rb +14 -14
  30. data/lib/mongo/cursor.rb +2 -2
  31. data/lib/mongo/database.rb +22 -5
  32. data/lib/mongo/database/view.rb +1 -1
  33. data/lib/mongo/error.rb +9 -1
  34. data/lib/mongo/error/bulk_write_error.rb +17 -3
  35. data/lib/mongo/error/internal_driver_error.rb +22 -0
  36. data/lib/mongo/error/operation_failure.rb +21 -2
  37. data/lib/mongo/error/parser.rb +65 -12
  38. data/lib/mongo/error/server_api_conflict.rb +23 -0
  39. data/lib/mongo/error/server_api_not_supported.rb +24 -0
  40. data/lib/mongo/error/unmet_dependency.rb +21 -0
  41. data/lib/mongo/grid/fs_bucket.rb +37 -37
  42. data/lib/mongo/index/view.rb +21 -11
  43. data/lib/mongo/monitoring.rb +13 -4
  44. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +27 -16
  45. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +26 -15
  46. data/lib/mongo/operation.rb +2 -2
  47. data/lib/mongo/operation/collections_info.rb +18 -1
  48. data/lib/mongo/operation/collections_info/command.rb +2 -2
  49. data/lib/mongo/operation/context.rb +99 -0
  50. data/lib/mongo/operation/indexes.rb +15 -1
  51. data/lib/mongo/operation/insert/command.rb +2 -2
  52. data/lib/mongo/operation/insert/legacy.rb +2 -2
  53. data/lib/mongo/operation/insert/op_msg.rb +2 -2
  54. data/lib/mongo/operation/list_collections/result.rb +4 -1
  55. data/lib/mongo/operation/result.rb +2 -0
  56. data/lib/mongo/operation/shared/executable.rb +24 -14
  57. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  58. data/lib/mongo/operation/shared/op_msg_or_command.rb +1 -7
  59. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +1 -7
  60. data/lib/mongo/operation/shared/polymorphic_operation.rb +39 -0
  61. data/lib/mongo/operation/shared/response_handling.rb +23 -23
  62. data/lib/mongo/operation/shared/sessions_supported.rb +13 -2
  63. data/lib/mongo/operation/shared/write.rb +8 -18
  64. data/lib/mongo/protocol/compressed.rb +51 -5
  65. data/lib/mongo/protocol/message.rb +20 -2
  66. data/lib/mongo/protocol/msg.rb +36 -11
  67. data/lib/mongo/query_cache.rb +30 -0
  68. data/lib/mongo/retryable.rb +1 -1
  69. data/lib/mongo/server.rb +7 -15
  70. data/lib/mongo/server/app_metadata.rb +52 -18
  71. data/lib/mongo/server/connection.rb +5 -0
  72. data/lib/mongo/server/connection_base.rb +13 -10
  73. data/lib/mongo/server/connection_pool.rb +6 -4
  74. data/lib/mongo/server/description.rb +4 -0
  75. data/lib/mongo/server/description/features.rb +9 -8
  76. data/lib/mongo/server/monitor.rb +20 -1
  77. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  78. data/lib/mongo/server/monitor/connection.rb +9 -10
  79. data/lib/mongo/server/pending_connection.rb +24 -6
  80. data/lib/mongo/server/push_monitor.rb +11 -1
  81. data/lib/mongo/session.rb +2 -2
  82. data/lib/mongo/session/session_pool.rb +4 -2
  83. data/lib/mongo/socket.rb +29 -4
  84. data/lib/mongo/socket/ssl.rb +8 -0
  85. data/lib/mongo/srv/monitor.rb +0 -11
  86. data/lib/mongo/uri/options_mapper.rb +38 -0
  87. data/lib/mongo/utils.rb +15 -0
  88. data/lib/mongo/version.rb +1 -1
  89. data/spec/README.md +24 -1
  90. data/spec/integration/auth_spec.rb +25 -15
  91. data/spec/integration/bulk_write_error_message_spec.rb +41 -0
  92. data/spec/integration/change_stream_spec.rb +4 -4
  93. data/spec/integration/command_monitoring_spec.rb +2 -2
  94. data/spec/integration/connection_spec.rb +2 -0
  95. data/spec/integration/docs_examples_spec.rb +8 -1
  96. data/spec/integration/fork_reconnect_spec.rb +4 -1
  97. data/spec/integration/ocsp_verifier_spec.rb +13 -7
  98. data/spec/integration/operation_failure_code_spec.rb +1 -1
  99. data/spec/integration/operation_failure_message_spec.rb +90 -0
  100. data/spec/integration/reconnect_spec.rb +1 -1
  101. data/spec/integration/sdam_error_handling_spec.rb +1 -1
  102. data/spec/integration/sdam_events_spec.rb +3 -5
  103. data/spec/integration/snappy_compression_spec.rb +25 -0
  104. data/spec/integration/srv_monitoring_spec.rb +1 -1
  105. data/spec/integration/transactions_examples_spec.rb +6 -0
  106. data/spec/integration/zlib_compression_spec.rb +1 -1
  107. data/spec/integration/zstd_compression_spec.rb +26 -0
  108. data/spec/lite_spec_helper.rb +7 -1
  109. data/spec/mongo/address_spec.rb +15 -11
  110. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  111. data/spec/mongo/auth/ldap_spec.rb +5 -1
  112. data/spec/mongo/auth/scram_negotiation_spec.rb +1 -1
  113. data/spec/mongo/auth/scram_spec.rb +1 -1
  114. data/spec/mongo/auth/x509/conversation_spec.rb +3 -3
  115. data/spec/mongo/client_construction_spec.rb +207 -33
  116. data/spec/mongo/client_spec.rb +17 -0
  117. data/spec/mongo/cluster_spec.rb +3 -18
  118. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  119. data/spec/mongo/collection/view/readable_spec.rb +33 -19
  120. data/spec/mongo/collection_crud_spec.rb +4357 -0
  121. data/spec/mongo/collection_ddl_spec.rb +534 -0
  122. data/spec/mongo/collection_spec.rb +5 -4859
  123. data/spec/mongo/database_spec.rb +66 -4
  124. data/spec/mongo/error/bulk_write_error_spec.rb +3 -3
  125. data/spec/mongo/error/parser_spec.rb +37 -6
  126. data/spec/mongo/index/view_spec.rb +8 -2
  127. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +1 -1
  128. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +1 -1
  129. data/spec/mongo/operation/aggregate_spec.rb +2 -1
  130. data/spec/mongo/operation/collections_info_spec.rb +4 -1
  131. data/spec/mongo/operation/command_spec.rb +6 -3
  132. data/spec/mongo/operation/create_index_spec.rb +6 -3
  133. data/spec/mongo/operation/create_user_spec.rb +6 -3
  134. data/spec/mongo/operation/delete/bulk_spec.rb +9 -6
  135. data/spec/mongo/operation/delete_spec.rb +11 -7
  136. data/spec/mongo/operation/drop_index_spec.rb +6 -2
  137. data/spec/mongo/operation/find/legacy_spec.rb +3 -1
  138. data/spec/mongo/operation/get_more_spec.rb +3 -1
  139. data/spec/mongo/operation/indexes_spec.rb +5 -1
  140. data/spec/mongo/operation/insert/bulk_spec.rb +10 -7
  141. data/spec/mongo/operation/insert_spec.rb +15 -12
  142. data/spec/mongo/operation/map_reduce_spec.rb +5 -2
  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_spec.rb +2 -0
  152. data/spec/mongo/server/connection_pool/populator_spec.rb +3 -1
  153. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  154. data/spec/mongo/server/connection_spec.rb +24 -17
  155. data/spec/mongo/server/monitor/connection_spec.rb +17 -7
  156. data/spec/mongo/server/monitor_spec.rb +9 -1
  157. data/spec/mongo/server_spec.rb +15 -2
  158. data/spec/mongo/socket/ssl_spec.rb +40 -0
  159. data/spec/mongo/socket_spec.rb +2 -2
  160. data/spec/mongo/tls_context_hooks_spec.rb +37 -0
  161. data/spec/runners/connection_string.rb +0 -4
  162. data/spec/runners/crud/requirement.rb +40 -3
  163. data/spec/runners/crud/verifier.rb +8 -0
  164. data/spec/runners/transactions/operation.rb +13 -2
  165. data/spec/runners/transactions/test.rb +1 -0
  166. data/spec/runners/unified.rb +96 -0
  167. data/spec/runners/unified/assertions.rb +249 -0
  168. data/spec/runners/unified/change_stream_operations.rb +26 -0
  169. data/spec/runners/unified/crud_operations.rb +199 -0
  170. data/spec/runners/unified/ddl_operations.rb +96 -0
  171. data/spec/runners/unified/entity_map.rb +39 -0
  172. data/spec/runners/unified/error.rb +25 -0
  173. data/spec/runners/unified/event_subscriber.rb +91 -0
  174. data/spec/runners/unified/exceptions.rb +21 -0
  175. data/spec/runners/unified/grid_fs_operations.rb +55 -0
  176. data/spec/runners/unified/support_operations.rb +250 -0
  177. data/spec/runners/unified/test.rb +393 -0
  178. data/spec/runners/unified/test_group.rb +28 -0
  179. data/spec/runners/unified/using_hash.rb +31 -0
  180. data/spec/shared/bin/get-mongodb-download-url +17 -0
  181. data/spec/shared/lib/mrss/cluster_config.rb +218 -0
  182. data/spec/shared/lib/mrss/constraints.rb +43 -0
  183. data/spec/shared/lib/mrss/docker_runner.rb +262 -0
  184. data/spec/shared/lib/mrss/server_version_registry.rb +112 -0
  185. data/spec/shared/lib/mrss/utils.rb +15 -0
  186. data/spec/shared/share/Dockerfile.erb +231 -0
  187. data/spec/shared/shlib/distro.sh +73 -0
  188. data/spec/shared/shlib/server.sh +290 -0
  189. data/spec/shared/shlib/set_env.sh +128 -0
  190. data/spec/solo/clean_exit_spec.rb +21 -0
  191. data/spec/spec_helper.rb +4 -1
  192. data/spec/spec_tests/crud_unified_spec.rb +10 -0
  193. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  194. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +267 -0
  195. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-4.9.yml +60 -0
  196. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount.yml → estimatedDocumentCount-pre4.9.yml} +2 -0
  197. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors-4.9.yml +146 -0
  198. data/spec/spec_tests/data/retryable_reads/{estimatedDocumentCount-serverErrors.yml → estimatedDocumentCount-serverErrors-pre4.9.yml} +2 -0
  199. data/spec/spec_tests/data/retryable_reads/listIndexNames.yml +1 -1
  200. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +31 -0
  201. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +220 -0
  202. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +102 -0
  203. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +184 -0
  204. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +155 -0
  205. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +193 -0
  206. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +210 -0
  207. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +215 -0
  208. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +235 -0
  209. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +169 -0
  210. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +170 -0
  211. data/spec/spec_tests/data/uri_options/compression-options.yml +1 -1
  212. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +416 -0
  213. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +409 -0
  214. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +67 -0
  215. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +47 -0
  216. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +44 -0
  217. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +180 -0
  218. data/spec/spec_tests/unified_spec.rb +15 -0
  219. data/spec/spec_tests/uri_options_spec.rb +16 -0
  220. data/spec/spec_tests/versioned_api_spec.rb +10 -0
  221. data/spec/support/common_shortcuts.rb +15 -1
  222. data/spec/support/shared/session.rb +2 -2
  223. data/spec/support/spec_config.rb +46 -3
  224. data/spec/support/spec_setup.rb +48 -38
  225. data/spec/support/utils.rb +64 -3
  226. metadata +1104 -992
  227. metadata.gz.sig +0 -0
  228. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +0 -58
  229. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +0 -47
  230. data/spec/support/cluster_config.rb +0 -207
@@ -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 }
@@ -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