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
@@ -95,6 +95,26 @@ describe Mongo::Database do
95
95
  expect(collection.server_selector).to eq(Mongo::ServerSelector.get(mode: :secondary))
96
96
  expect(collection.read_preference).to eq(BSON::Document.new(mode: :secondary))
97
97
  end
98
+
99
+ context ':server_api option' do
100
+
101
+ let(:client) do
102
+ new_local_client_nmio(['localhost'], server_api: {version: '1'})
103
+ end
104
+
105
+ it 'is not transfered to the collection' do
106
+ client.options[:server_api].should == {'version' => '1'}
107
+ collection.options[:server_api].should be nil
108
+ end
109
+ end
110
+ end
111
+
112
+ context 'when providing :server_api option' do
113
+ it 'is rejected' do
114
+ lambda do
115
+ database['foo', server_api: {version: '1'}]
116
+ end.should raise_error(ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level')
117
+ end
98
118
  end
99
119
  end
100
120
 
@@ -319,21 +339,40 @@ describe Mongo::Database do
319
339
  described_class.new(root_authorized_client, 'admin')
320
340
  end
321
341
 
322
- it 'does not include system collections' do
323
- expect(result.none? { |name| name =~ /(^|\.)system\./ }).to be true
342
+ shared_examples 'does not include system collections' do
343
+ it 'does not include system collections' do
344
+ expect(result.none? { |name| name =~ /(^|\.)system\./ }).to be true
345
+ end
324
346
  end
325
347
 
326
- context 'server 3.0+' do
348
+ context 'server 4.7+' do
349
+ min_server_fcv '4.7'
350
+ # https://jira.mongodb.org/browse/SERVER-35804
351
+ require_topology :single, :replica_set
352
+
353
+ include_examples 'does not include system collections'
354
+
355
+ it 'returns results' do
356
+ expect(result).to include('acol')
357
+ end
358
+ end
359
+
360
+ context 'server 3.0-4.5' do
327
361
  min_server_fcv '3.0'
362
+ max_server_version '4.5'
363
+
364
+ include_examples 'does not include system collections'
328
365
 
329
366
  it 'returns results' do
330
367
  expect(result).to include('acol')
331
368
  end
332
369
  end
333
370
 
334
- context 'server 2.6-' do
371
+ context 'server 2.6' do
335
372
  max_server_version '2.6'
336
373
 
374
+ include_examples 'does not include system collections'
375
+
337
376
  it 'returns results' do
338
377
  expect(result).to include('admin.acol')
339
378
  end
@@ -836,6 +875,29 @@ describe Mongo::Database do
836
875
  end
837
876
  end
838
877
  end
878
+
879
+ context 'when client server api is not set' do
880
+ require_no_required_api_version
881
+ min_server_fcv '4.7'
882
+
883
+ it 'passes server api parameters' do
884
+ lambda do
885
+ database.command(ping: 1, apiVersion: 'does-not-exist')
886
+ end.should raise_error(
887
+ an_instance_of(Mongo::Error::OperationFailure).and having_attributes(code: 322))
888
+ end
889
+ end
890
+
891
+ context 'when client server api is set' do
892
+ require_required_api_version
893
+ min_server_fcv '4.7'
894
+
895
+ it 'reports server api conflict' do
896
+ lambda do
897
+ database.command(ping: 1, apiVersion: 'does-not-exist')
898
+ end.should raise_error(Mongo::Error::ServerApiConflict)
899
+ end
900
+ end
839
901
  end
840
902
 
841
903
  describe '#drop' do
@@ -31,19 +31,19 @@ describe Mongo::Error::BulkWriteError do
31
31
 
32
32
  describe '#message' do
33
33
  it 'is correct' do
34
- expect(error.message).to eq("message1 (1), message2 (2) (note1, note2)")
34
+ expect(error.message).to eq("Multiple errors: [1]: message1; [2]: message2 (note1, note2)")
35
35
  end
36
36
  end
37
37
 
38
38
  describe '#to_s' do
39
39
  it 'is correct' do
40
- expect(error.to_s).to eq("message1 (1), message2 (2) (note1, note2)")
40
+ expect(error.to_s).to eq("Multiple errors: [1]: message1; [2]: message2 (note1, note2)")
41
41
  end
42
42
  end
43
43
 
44
44
  describe '#inspect' do
45
45
  it 'is correct' do
46
- expect(error.inspect).to eq("#<Mongo::Error::BulkWriteError: message1 (1), message2 (2) (note1, note2)>")
46
+ expect(error.inspect).to eq("#<Mongo::Error::BulkWriteError: Multiple errors: [1]: message1; [2]: message2 (note1, note2)>")
47
47
  end
48
48
  end
49
49
  end
@@ -25,10 +25,22 @@ describe Mongo::Error::Parser do
25
25
  end
26
26
 
27
27
  it 'returns the message' do
28
- expect(parser.message).to eq('no such command: notacommand (59)')
28
+ expect(parser.message).to eq('[59]: no such command: notacommand')
29
29
  end
30
30
  end
31
31
 
32
+ context 'when the document contains an errmsg and code name' do
33
+
34
+ let(:document) do
35
+ { 'errmsg' => 'no such command: notacommand', 'code' => 59, 'codeName' => 'foo' }
36
+ end
37
+
38
+ it 'returns the message' do
39
+ expect(parser.message).to eq('[59:foo]: no such command: notacommand')
40
+ end
41
+ end
42
+
43
+ =begin
32
44
  context 'when the document contains writeErrors' do
33
45
 
34
46
  context 'when only a single error exists' do
@@ -38,7 +50,7 @@ describe Mongo::Error::Parser do
38
50
  end
39
51
 
40
52
  it 'returns the message' do
41
- expect(parser.message).to eq('Unknown modifier: $st (9)')
53
+ expect(parser.message).to eq('[9]: Unknown modifier: $st')
42
54
  end
43
55
  end
44
56
 
@@ -55,11 +67,30 @@ describe Mongo::Error::Parser do
55
67
 
56
68
  it 'returns the messages concatenated' do
57
69
  expect(parser.message).to eq(
58
- 'Unknown modifier: $st (9), Unknown modifier: $bl (9)'
70
+ 'Multiple errors: 9: Unknown modifier: $st; 9: Unknown modifier: $bl'
71
+ )
72
+ end
73
+ end
74
+
75
+ context 'when multiple errors with code names exist' do
76
+
77
+ let(:document) do
78
+ {
79
+ 'writeErrors' => [
80
+ { 'code' => 9, 'codeName' => 'foo', 'errmsg' => 'Unknown modifier: $st' },
81
+ { 'code' => 9, 'codeName' => 'foo', 'errmsg' => 'Unknown modifier: $bl' },
82
+ ]
83
+ }
84
+ end
85
+
86
+ it 'returns the messages concatenated' do
87
+ expect(parser.message).to eq(
88
+ 'Multiple errors: [9:foo]: Unknown modifier: $st; [9:foo]: Unknown modifier: $bl'
59
89
  )
60
90
  end
61
91
  end
62
92
  end
93
+ =end
63
94
 
64
95
  context 'when the document contains $err' do
65
96
 
@@ -68,7 +99,7 @@ describe Mongo::Error::Parser do
68
99
  end
69
100
 
70
101
  it 'returns the message' do
71
- expect(parser.message).to eq('not authorized for query (13)')
102
+ expect(parser.message).to eq('[13]: not authorized for query')
72
103
  end
73
104
  end
74
105
 
@@ -79,7 +110,7 @@ describe Mongo::Error::Parser do
79
110
  end
80
111
 
81
112
  it 'returns the message' do
82
- expect(parser.message).to eq('not authorized for query (13)')
113
+ expect(parser.message).to eq('[13]: not authorized for query')
83
114
  end
84
115
  end
85
116
 
@@ -90,7 +121,7 @@ describe Mongo::Error::Parser do
90
121
  end
91
122
 
92
123
  it 'returns the message' do
93
- expect(parser.message).to eq('Not enough data-bearing nodes (100)')
124
+ expect(parser.message).to eq('[100]: Not enough data-bearing nodes')
94
125
  end
95
126
  end
96
127
  end
@@ -305,7 +305,8 @@ describe Mongo::Index::View do
305
305
  { key: { testing: -1 }, unique: true },
306
306
  { commit_quorum: 'unsupported-value' }
307
307
  )
308
- end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration/)
308
+ # 4.4.4 changed the text of the error message
309
+ end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration|No write concern mode named 'unsupported-value' found in replica set configuration/)
309
310
  end
310
311
  end
311
312
  end
@@ -649,6 +650,8 @@ describe Mongo::Index::View do
649
650
  end
650
651
 
651
652
  context 'when using bucket option' do
653
+ # Option is removed in 4.9
654
+ max_server_version '4.7'
652
655
 
653
656
  let(:spec) do
654
657
  { 'any' => 1 }
@@ -755,6 +758,8 @@ describe Mongo::Index::View do
755
758
  end
756
759
 
757
760
  context 'when using bucket option' do
761
+ # Option is removed in 4.9
762
+ max_server_version '4.7'
758
763
 
759
764
  let(:spec) do
760
765
  { 'any' => 1 }
@@ -964,7 +969,8 @@ describe Mongo::Index::View do
964
969
  it 'raises an exception' do
965
970
  expect do
966
971
  view.create_one({ 'x' => 1 }, commit_quorum: 'unsupported-value')
967
- end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration/)
972
+ # 4.4.4 changed the text of the error message
973
+ end.to raise_error(Mongo::Error::OperationFailure, /Commit quorum cannot be satisfied with the current replica set configuration|No write concern mode named 'unsupported-value' found in replica set configuration/)
968
974
  end
969
975
  end
970
976
  end
@@ -20,7 +20,7 @@ describe Mongo::Monitoring::Event::ServerHeartbeatFailed do
20
20
  end
21
21
 
22
22
  let(:event) do
23
- described_class.new(address, 1, Mongo::Error::SocketError.new('foo'))
23
+ described_class.new(address, 1, Mongo::Error::SocketError.new('foo'), started_event: nil)
24
24
  end
25
25
 
26
26
  describe '#summary' do
@@ -20,7 +20,7 @@ describe Mongo::Monitoring::Event::ServerHeartbeatSucceeded do
20
20
  end
21
21
 
22
22
  let(:event) do
23
- described_class.new(address, 1)
23
+ described_class.new(address, 1, started_event: nil)
24
24
  end
25
25
 
26
26
  describe '#summary' do
@@ -19,6 +19,7 @@ describe Mongo::Operation::Aggregate do
19
19
  end
20
20
  let(:op) { described_class.new(spec) }
21
21
 
22
+ let(:context) { Mongo::Operation::Context.new }
22
23
 
23
24
  describe '#initialize' do
24
25
 
@@ -64,7 +65,7 @@ describe Mongo::Operation::Aggregate do
64
65
 
65
66
  it 'raises an exception' do
66
67
  expect {
67
- op.execute(authorized_primary, client: nil)
68
+ op.execute(authorized_primary, context: context)
68
69
  }.to raise_error(Mongo::Error::OperationFailure)
69
70
  end
70
71
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CollectionsInfo do
4
+ require_no_required_api_version
4
5
 
5
6
  let(:spec) do
6
7
  { selector: { listCollections: 1 },
@@ -16,6 +17,8 @@ describe Mongo::Operation::CollectionsInfo do
16
17
  described_class.new(spec)
17
18
  end
18
19
 
20
+ let(:context) { Mongo::Operation::Context.new }
21
+
19
22
  describe '#execute' do
20
23
 
21
24
  before do
@@ -31,7 +34,7 @@ describe Mongo::Operation::CollectionsInfo do
31
34
  end
32
35
 
33
36
  let(:info) do
34
- docs = op.execute(authorized_primary, client: nil).documents
37
+ docs = op.execute(authorized_primary, context: context).documents
35
38
  docs.collect { |info| info['name'].sub("#{SpecConfig.instance.test_db}.", '') }
36
39
  end
37
40
 
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Command do
4
+ require_no_required_api_version
4
5
 
5
6
  let(:selector) { { :ismaster => 1 } }
6
7
  let(:options) { { :limit => -1 } }
@@ -12,6 +13,8 @@ describe Mongo::Operation::Command do
12
13
  end
13
14
  let(:op) { described_class.new(spec) }
14
15
 
16
+ let(:context) { Mongo::Operation::Context.new }
17
+
15
18
  describe '#initialize' do
16
19
 
17
20
  it 'sets the spec' do
@@ -43,7 +46,7 @@ describe Mongo::Operation::Command do
43
46
  context 'when the command succeeds' do
44
47
 
45
48
  let(:response) do
46
- op.execute(authorized_primary, client: nil)
49
+ op.execute(authorized_primary, context: context)
47
50
  end
48
51
 
49
52
  it 'returns the reponse' do
@@ -59,7 +62,7 @@ describe Mongo::Operation::Command do
59
62
 
60
63
  it 'raises an exception' do
61
64
  expect {
62
- op.execute(authorized_primary, client: nil)
65
+ op.execute(authorized_primary, context: context)
63
66
  }.to raise_error(Mongo::Error::OperationFailure)
64
67
  end
65
68
  end
@@ -72,7 +75,7 @@ describe Mongo::Operation::Command do
72
75
 
73
76
  it 'raises an error' do
74
77
  expect {
75
- op.execute(authorized_primary, client: nil)
78
+ op.execute(authorized_primary, context: context)
76
79
  }.to raise_error(Mongo::Error::MaxBSONSize)
77
80
  end
78
81
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CreateIndex do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  before do
6
9
  authorized_collection.drop
@@ -20,7 +23,7 @@ describe Mongo::Operation::CreateIndex do
20
23
  end
21
24
 
22
25
  let(:response) do
23
- operation.execute(authorized_primary, client: nil)
26
+ operation.execute(authorized_primary, context: context)
24
27
  end
25
28
 
26
29
  it 'returns ok' do
@@ -43,12 +46,12 @@ describe Mongo::Operation::CreateIndex do
43
46
  end
44
47
 
45
48
  before do
46
- operation.execute(authorized_primary, client: nil)
49
+ operation.execute(authorized_primary, context: context)
47
50
  end
48
51
 
49
52
  it 'raises an exception' do
50
53
  expect {
51
- second_operation.execute(authorized_primary, client: nil)
54
+ second_operation.execute(authorized_primary, context: context)
52
55
  }.to raise_error(Mongo::Error::OperationFailure)
53
56
  end
54
57
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::CreateUser do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  describe '#execute' do
6
9
 
@@ -26,7 +29,7 @@ describe Mongo::Operation::CreateUser do
26
29
  context 'when user creation was successful' do
27
30
 
28
31
  let!(:response) do
29
- operation.execute(root_authorized_primary, client: nil)
32
+ operation.execute(root_authorized_primary, context: context)
30
33
  end
31
34
 
32
35
  it 'saves the user in the database' do
@@ -38,8 +41,8 @@ describe Mongo::Operation::CreateUser do
38
41
 
39
42
  it 'raises an exception' do
40
43
  expect {
41
- operation.execute(root_authorized_primary, client: nil)
42
- operation.execute(root_authorized_primary, client: nil)
44
+ operation.execute(root_authorized_primary, context: context)
45
+ operation.execute(root_authorized_primary, context: context)
43
46
  }.to raise_error(Mongo::Error::OperationFailure)
44
47
  end
45
48
  end
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Delete do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
4
7
 
5
8
  let(:documents) do
6
9
  [ { 'q' => { foo: 1 }, 'limit' => 1 } ]
@@ -100,7 +103,7 @@ describe Mongo::Operation::Delete do
100
103
 
101
104
  it 'deletes the document from the database' do
102
105
  authorized_primary.with_connection do |connection|
103
- op.bulk_execute(connection, client: nil)
106
+ op.bulk_execute(connection, context: context)
104
107
  end
105
108
  expect(authorized_collection.find.count).to eq(1)
106
109
  end
@@ -125,7 +128,7 @@ describe Mongo::Operation::Delete do
125
128
 
126
129
  it 'deletes the documents from the database' do
127
130
  authorized_primary.with_connection do |connection|
128
- op.bulk_execute(connection, client: nil)
131
+ op.bulk_execute(connection, context: context)
129
132
  end
130
133
  expect(authorized_collection.find.count).to eq(0)
131
134
  end
@@ -162,7 +165,7 @@ describe Mongo::Operation::Delete do
162
165
 
163
166
  it 'aborts after first error' do
164
167
  authorized_primary.with_connection do |connection|
165
- failing_delete.bulk_execute(connection, client: nil)
168
+ failing_delete.bulk_execute(connection, context: context)
166
169
  end
167
170
  expect(authorized_collection.find.count).to eq(2)
168
171
  end
@@ -176,7 +179,7 @@ describe Mongo::Operation::Delete do
176
179
 
177
180
  it 'aborts after first error' do
178
181
  authorized_primary.with_connection do |connection|
179
- failing_delete.bulk_execute(connection, client: nil)
182
+ failing_delete.bulk_execute(connection, context: context)
180
183
  end
181
184
  expect(authorized_collection.find.count).to eq(2)
182
185
  end
@@ -214,7 +217,7 @@ describe Mongo::Operation::Delete do
214
217
 
215
218
  it 'does not abort after first error' do
216
219
  authorized_primary.with_connection do |connection|
217
- failing_delete.bulk_execute(connection, client: nil)
220
+ failing_delete.bulk_execute(connection, context: context)
218
221
  end
219
222
  expect(authorized_collection.find.count).to eq(1)
220
223
  end
@@ -228,7 +231,7 @@ describe Mongo::Operation::Delete do
228
231
 
229
232
  it 'does not abort after first error' do
230
233
  authorized_primary.with_connection do |connection|
231
- failing_delete.bulk_execute(connection, client: nil)
234
+ failing_delete.bulk_execute(connection, context: context)
232
235
  end
233
236
  expect(authorized_collection.find.count).to eq(1)
234
237
  end