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
@@ -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
@@ -650,6 +650,8 @@ describe Mongo::Index::View do
650
650
  end
651
651
 
652
652
  context 'when using bucket option' do
653
+ # Option is removed in 4.9
654
+ max_server_version '4.7'
653
655
 
654
656
  let(:spec) do
655
657
  { 'any' => 1 }
@@ -756,6 +758,8 @@ describe Mongo::Index::View do
756
758
  end
757
759
 
758
760
  context 'when using bucket option' do
761
+ # Option is removed in 4.9
762
+ max_server_version '4.7'
759
763
 
760
764
  let(:spec) do
761
765
  { 'any' => 1 }
@@ -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
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Delete do
4
+ require_no_required_api_version
5
+
4
6
  before do
5
7
  begin
6
8
  authorized_collection.delete_many
@@ -30,6 +32,8 @@ describe Mongo::Operation::Delete do
30
32
 
31
33
  let(:op) { described_class.new(spec) }
32
34
 
35
+ let(:context) { Mongo::Operation::Context.new }
36
+
33
37
  describe '#initialize' do
34
38
 
35
39
  context 'spec' do
@@ -103,7 +107,7 @@ describe Mongo::Operation::Delete do
103
107
  end
104
108
 
105
109
  let(:result) do
106
- delete.execute(authorized_primary, client: nil)
110
+ delete.execute(authorized_primary, context: context)
107
111
  end
108
112
 
109
113
  it 'deletes the documents from the database' do
@@ -123,7 +127,7 @@ describe Mongo::Operation::Delete do
123
127
 
124
128
  it 'raises an exception' do
125
129
  expect {
126
- delete.execute(authorized_primary, client: nil)
130
+ delete.execute(authorized_primary, context: context)
127
131
  }.to raise_error(Mongo::Error::OperationFailure)
128
132
  end
129
133
  end
@@ -147,7 +151,7 @@ describe Mongo::Operation::Delete do
147
151
  end
148
152
 
149
153
  let(:result) do
150
- delete.execute(authorized_primary, client: nil)
154
+ delete.execute(authorized_primary, context: context)
151
155
  end
152
156
 
153
157
  it 'deletes the documents from the database' do
@@ -166,13 +170,13 @@ describe Mongo::Operation::Delete do
166
170
  end
167
171
 
168
172
  let(:result) do
169
- delete.execute(authorized_primary, client: nil)
173
+ delete.execute(authorized_primary, context: context)
170
174
  end
171
175
 
172
176
  it 'does not delete any documents' do
173
177
 
174
178
  expect {
175
- op.execute(authorized_primary, client: nil)
179
+ op.execute(authorized_primary, context: context)
176
180
  }.to raise_error(Mongo::Error::OperationFailure)
177
181
 
178
182
  expect(authorized_collection.find.count).to eq(2)
@@ -187,7 +191,7 @@ describe Mongo::Operation::Delete do
187
191
 
188
192
  it 'raises an error' do
189
193
  expect {
190
- op.execute(authorized_primary, client: nil)
194
+ op.execute(authorized_primary, context: context)
191
195
  }.to raise_error(Mongo::Error::MaxBSONSize)
192
196
  end
193
197
  end
@@ -211,7 +215,7 @@ describe Mongo::Operation::Delete do
211
215
  end
212
216
 
213
217
  let(:result) do
214
- delete.execute(authorized_primary, client: nil)
218
+ delete.execute(authorized_primary, context: context)
215
219
  end
216
220
 
217
221
  before do
@@ -1,10 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::DropIndex do
4
+ require_no_required_api_version
5
+
4
6
  before do
5
7
  authorized_collection.indexes.drop_all
6
8
  end
7
9
 
10
+ let(:context) { Mongo::Operation::Context.new }
11
+
8
12
  describe '#execute' do
9
13
 
10
14
  context 'when the index exists' do
@@ -26,7 +30,7 @@ describe Mongo::Operation::DropIndex do
26
30
  end
27
31
 
28
32
  let(:response) do
29
- operation.execute(authorized_primary, client: nil)
33
+ operation.execute(authorized_primary, context: context)
30
34
  end
31
35
 
32
36
  it 'removes the index' do
@@ -46,7 +50,7 @@ describe Mongo::Operation::DropIndex do
46
50
 
47
51
  it 'raises an exception' do
48
52
  expect {
49
- operation.execute(authorized_primary, client: nil)
53
+ operation.execute(authorized_primary, context: context)
50
54
  }.to raise_error(Mongo::Error::OperationFailure)
51
55
  end
52
56
  end
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  describe Mongo::Operation::Find::Legacy do
4
4
  max_server_version '3.4'
5
5
 
6
+ let(:context) { Mongo::Operation::Context.new }
7
+
6
8
  let(:selector) { { foo: 1 } }
7
9
  let(:query_options) { {} }
8
10
  let(:spec) do
@@ -116,7 +118,7 @@ describe Mongo::Operation::Find::Legacy do
116
118
 
117
119
  it 'does not raise an exception' do
118
120
  authorized_primary.with_connection do |connection|
119
- expect(op.execute(connection, client: nil)).to be_a(Mongo::Operation::Find::Legacy::Result)
121
+ expect(op.execute(connection, context: context)).to be_a(Mongo::Operation::Find::Legacy::Result)
120
122
  end
121
123
  end
122
124
  end
@@ -19,6 +19,8 @@ describe Mongo::Operation::GetMore::Legacy do
19
19
 
20
20
  let(:op) { described_class.new(spec) }
21
21
 
22
+ let(:context) { Mongo::Operation::Context.new }
23
+
22
24
  describe '#initialize' do
23
25
 
24
26
  it 'sets the spec' do
@@ -49,7 +51,7 @@ describe Mongo::Operation::GetMore::Legacy do
49
51
  expect(Mongo::Protocol::GetMore).to receive(:new).with(SpecConfig.instance.test_db, TEST_COLL, to_return, cursor_id).and_call_original
50
52
  begin
51
53
  authorized_primary.with_connection do |connection|
52
- op.execute(connection, client: nil)
54
+ op.execute(connection, context: context)
53
55
  end
54
56
  rescue
55
57
  end
@@ -1,6 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mongo::Operation::Indexes do
4
+ require_no_required_api_version
5
+
6
+ let(:context) { Mongo::Operation::Context.new }
7
+
4
8
  describe '#execute' do
5
9
 
6
10
  let(:index_spec) do
@@ -24,7 +28,7 @@ describe Mongo::Operation::Indexes do
24
28
  end
25
29
 
26
30
  let(:indexes) do
27
- operation.execute(authorized_primary, client: nil)
31
+ operation.execute(authorized_primary, context: context)
28
32
  end
29
33
 
30
34
  it 'returns the indexes for the collection' do