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,128 @@
1
+ TOOLCHAIN_VERSION=289d4bec7c61e88000cea582c05fd8073b932122
2
+
3
+ set_env_java() {
4
+ ls -l /opt || true
5
+ ls -l /usr/lib/jvm || true
6
+
7
+ # Use toolchain java if it exists
8
+ if [ -f /opt/java/jdk8/bin/java ]; then
9
+ export JAVACMD=/opt/java/jdk8/bin/java
10
+ #export PATH=$PATH:/opt/java/jdk8/bin
11
+ fi
12
+
13
+ # ppc64le has it in a different place
14
+ if test -z "$JAVACMD" && [ -f /usr/lib/jvm/java-1.8.0/bin/java ]; then
15
+ export JAVACMD=/usr/lib/jvm/java-1.8.0/bin/java
16
+ #export PATH=$PATH:/usr/lib/jvm/java-1.8.0/bin
17
+ fi
18
+
19
+ if true; then
20
+ # newer
21
+ # rhel71-ppc, https://jira.mongodb.org/browse/BUILD-9231
22
+ if test -z "$JAVACMD" &&
23
+ (ls /opt/java || true) |grep -q java-1.8.0-openjdk-1.8.0 &&
24
+ test -f /opt/java/java-1.8.0-openjdk-1.8.0*/bin/java;
25
+ then
26
+ path=$(cd /opt/java && ls -d java-1.8.0-openjdk-1.8.0* |head -n 1)
27
+ export JAVACMD=/opt/java/"$path"/bin/java
28
+ fi
29
+ else
30
+ # older
31
+ # rhel71-ppc seems to have an /opt/java/jdk8/bin/java but it doesn't work
32
+ if test -n "$JAVACMD" && ! exec $JAVACMD -version; then
33
+ JAVACMD=
34
+ # we will try the /usr/lib/jvm then
35
+ fi
36
+ fi
37
+
38
+ if test -n "$JAVACMD"; then
39
+ eval $JAVACMD -version
40
+ elif which java 2>/dev/null; then
41
+ java -version
42
+ else
43
+ echo No java runtime found
44
+ fi
45
+ }
46
+
47
+ set_env_ruby() {
48
+ if test -z "$RVM_RUBY"; then
49
+ echo "Empty RVM_RUBY, aborting"
50
+ exit 2
51
+ fi
52
+
53
+ #ls -l /opt
54
+
55
+ # Necessary for jruby
56
+ set_env_java
57
+
58
+ if [ "$RVM_RUBY" == "ruby-head" ]; then
59
+ # When we use ruby-head, we do not install the Ruby toolchain.
60
+ # But we still need Python 3.6+ to run mlaunch.
61
+ # Since the ruby-head tests are run on ubuntu1604, we can use the
62
+ # globally installed Python toolchain.
63
+ #export PATH=/opt/python/3.7/bin:$PATH
64
+
65
+ # 12.04, 14.04 and 16.04 are good
66
+ curl --retry 3 -fL http://rubies.travis-ci.org/ubuntu/`lsb_release -rs`/x86_64/ruby-head.tar.bz2 |tar xfj -
67
+ # TODO adjust gem path?
68
+ export PATH=`pwd`/ruby-head/bin:`pwd`/ruby-head/lib/ruby/gems/2.6.0/bin:$PATH
69
+ ruby --version
70
+ ruby --version |grep dev
71
+ else
72
+ if test "$USE_OPT_TOOLCHAIN" = 1; then
73
+ # nothing, also PATH is already set
74
+ :
75
+ elif true; then
76
+
77
+ # For testing toolchains:
78
+ #toolchain_url=https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/`host_distro`/f11598d091441ffc8d746aacfdc6c26741a3e629/mongo_ruby_driver_toolchain_`host_distro |tr - _`_patch_f11598d091441ffc8d746aacfdc6c26741a3e629_5e46f2793e8e866f36eda2c5_20_02_14_19_18_18.tar.gz
79
+ toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-`host_distro`-$TOOLCHAIN_VERSION.tar.xz
80
+ curl --retry 3 -fL $toolchain_url |tar Jxf -
81
+ export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
82
+ #export PATH=`pwd`/rubies/python/3/bin:$PATH
83
+
84
+ # Attempt to get bundler to report all errors - so far unsuccessful
85
+ #curl --retry 3 -o bundler-openssl.diff https://github.com/bundler/bundler/compare/v2.0.1...p-mongo:report-errors.diff
86
+ #find . -path \*/lib/bundler/fetcher.rb -exec patch {} bundler-openssl.diff \;
87
+
88
+ else
89
+
90
+ # Normal operation
91
+ if ! test -d $HOME/.rubies/$RVM_RUBY/bin; then
92
+ echo "Ruby directory does not exist: $HOME/.rubies/$RVM_RUBY/bin" 1>&2
93
+ echo "Contents of /opt:" 1>&2
94
+ ls -l /opt 1>&2 || true
95
+ echo ".rubies symlink:" 1>&2
96
+ ls -ld $HOME/.rubies 1>&2 || true
97
+ echo "Our rubies:" 1>&2
98
+ ls -l $HOME/.rubies 1>&2 || true
99
+ exit 2
100
+ fi
101
+ export PATH=$HOME/.rubies/$RVM_RUBY/bin:$PATH
102
+
103
+ fi
104
+
105
+ ruby --version
106
+
107
+ # Ensure we're using the right ruby
108
+ ruby_name=`echo $RVM_RUBY |awk -F- '{print $1}'`
109
+ ruby_version=`echo $RVM_RUBY |awk -F- '{print $2}' |cut -c 1-3`
110
+
111
+ ruby -v |fgrep $ruby_name
112
+ ruby -v |fgrep $ruby_version
113
+
114
+ # We shouldn't need to update rubygems, and there is value in
115
+ # testing on whatever rubygems came with each supported ruby version
116
+ #echo 'updating rubygems'
117
+ #gem update --system
118
+
119
+ # Only install bundler when not using ruby-head.
120
+ # ruby-head comes with bundler and gem complains
121
+ # because installing bundler would overwrite the bundler binary.
122
+ # We now install bundler in the toolchain, hence nothing needs to be done
123
+ # in the tests.
124
+ if false && echo "$RVM_RUBY" |grep -q jruby; then
125
+ gem install bundler -v '<2'
126
+ fi
127
+ fi
128
+ }
@@ -0,0 +1,21 @@
1
+ require 'mongo'
2
+
3
+ describe 'Clean exit' do
4
+
5
+ before(:all) do
6
+ unless %w(1 true yes).include?(ENV['SOLO'])
7
+ skip 'Set SOLO=1 in environment to run solo tests'
8
+ end
9
+ end
10
+
11
+ context 'with SRV URI' do
12
+ let(:uri) do
13
+ 'mongodb+srv://test1.test.build.10gen.cc/?tls=false'
14
+ end
15
+
16
+ it 'exits cleanly' do
17
+ client = Mongo::Client.new(uri)
18
+ client.database.collection_names.to_a
19
+ end
20
+ end
21
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  require 'lite_spec_helper'
2
2
 
3
3
  require 'mrss/constraints'
4
+ require 'mrss/cluster_config'
5
+
6
+ ClusterConfig = Mrss::ClusterConfig
7
+
4
8
  require 'support/constraints'
5
9
  require 'support/authorization'
6
10
  require 'support/primary_socket'
7
- require 'support/cluster_config'
8
11
  require 'support/cluster_tools'
9
12
  require 'rspec/retry'
10
13
  require 'support/monitoring_ext'
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ require 'runners/unified'
4
+
5
+ base = "#{CURRENT_PATH}/spec_tests/data/crud_unified"
6
+ CRUD_UNIFIED_TESTS = Dir.glob("#{base}/**/*.yml").sort
7
+
8
+ describe 'CRUD unified spec tests' do
9
+ define_unified_spec_tests(base, CRUD_UNIFIED_TESTS)
10
+ end
@@ -371,7 +371,6 @@ tests:
371
371
  db: *database_name
372
372
  coll: *collection_name
373
373
  updateDescription:
374
- removedFields: []
375
374
  updatedFields:
376
375
  x:
377
376
  $numberInt: "2"
@@ -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