mongo 2.18.0 → 2.18.2

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 (118) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/mongo/bulk_write.rb +7 -5
  4. data/lib/mongo/client.rb +1 -1
  5. data/lib/mongo/collection/view/writable.rb +0 -2
  6. data/lib/mongo/collection.rb +150 -45
  7. data/lib/mongo/crypt/auto_encrypter.rb +30 -9
  8. data/lib/mongo/crypt/binding.rb +93 -1
  9. data/lib/mongo/crypt/explicit_encrypter.rb +5 -1
  10. data/lib/mongo/crypt/handle.rb +33 -0
  11. data/lib/mongo/crypt/kms.rb +0 -1
  12. data/lib/mongo/cursor.rb +6 -1
  13. data/lib/mongo/error/invalid_read_option.rb +1 -1
  14. data/lib/mongo/operation/aggregate.rb +1 -2
  15. data/lib/mongo/operation/collections_info.rb +3 -15
  16. data/lib/mongo/operation/command.rb +1 -2
  17. data/lib/mongo/operation/count.rb +1 -2
  18. data/lib/mongo/operation/create.rb +1 -2
  19. data/lib/mongo/operation/create_index.rb +1 -2
  20. data/lib/mongo/operation/create_user.rb +1 -2
  21. data/lib/mongo/operation/delete.rb +0 -1
  22. data/lib/mongo/operation/distinct.rb +1 -2
  23. data/lib/mongo/operation/drop.rb +1 -2
  24. data/lib/mongo/operation/drop_database.rb +1 -2
  25. data/lib/mongo/operation/drop_index.rb +1 -2
  26. data/lib/mongo/operation/explain.rb +1 -3
  27. data/lib/mongo/operation/find/builder.rb +0 -1
  28. data/lib/mongo/operation/find.rb +1 -3
  29. data/lib/mongo/operation/get_more.rb +1 -3
  30. data/lib/mongo/operation/indexes.rb +1 -17
  31. data/lib/mongo/operation/insert.rb +0 -1
  32. data/lib/mongo/operation/kill_cursors.rb +1 -2
  33. data/lib/mongo/operation/list_collections.rb +1 -2
  34. data/lib/mongo/operation/map_reduce.rb +1 -2
  35. data/lib/mongo/operation/parallel_scan.rb +1 -2
  36. data/lib/mongo/operation/remove_user.rb +1 -2
  37. data/lib/mongo/operation/shared/{polymorphic_operation.rb → op_msg_executable.rb} +11 -6
  38. data/lib/mongo/operation/shared/sessions_supported.rb +7 -3
  39. data/lib/mongo/operation/update.rb +0 -1
  40. data/lib/mongo/operation/update_user.rb +1 -2
  41. data/lib/mongo/operation/users_info.rb +1 -2
  42. data/lib/mongo/operation/write_command.rb +1 -2
  43. data/lib/mongo/operation.rb +1 -3
  44. data/lib/mongo/protocol.rb +0 -3
  45. data/lib/mongo/query_cache.rb +20 -20
  46. data/lib/mongo/session.rb +1 -1
  47. data/lib/mongo/version.rb +1 -1
  48. data/spec/README.md +5 -1
  49. data/spec/integration/bulk_write_spec.rb +16 -0
  50. data/spec/integration/command_spec.rb +1 -23
  51. data/spec/integration/ocsp_verifier_spec.rb +2 -0
  52. data/spec/mongo/client_construction_spec.rb +4 -4
  53. data/spec/mongo/collection_crud_spec.rb +56 -0
  54. data/spec/mongo/collection_spec.rb +11 -1
  55. data/spec/mongo/crypt/auto_encrypter_spec.rb +41 -6
  56. data/spec/mongo/crypt/binding/version_spec.rb +8 -0
  57. data/spec/mongo/crypt/handle_spec.rb +102 -0
  58. data/spec/mongo/crypt/kms_spec.rb +12 -9
  59. data/spec/mongo/cursor_spec.rb +50 -0
  60. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  61. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +3 -0
  62. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +3 -3
  63. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +6 -14
  64. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +4 -14
  65. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +8 -14
  66. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +64 -0
  67. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +118 -0
  68. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +118 -0
  69. data/spec/support/certificates/retrieve-atlas-cert +38 -0
  70. data/spec/support/spec_config.rb +4 -0
  71. data.tar.gz.sig +0 -0
  72. metadata +1133 -1178
  73. metadata.gz.sig +0 -0
  74. data/lib/mongo/operation/aggregate/command.rb +0 -55
  75. data/lib/mongo/operation/collections_info/command.rb +0 -48
  76. data/lib/mongo/operation/command/command.rb +0 -41
  77. data/lib/mongo/operation/count/command.rb +0 -47
  78. data/lib/mongo/operation/create/command.rb +0 -47
  79. data/lib/mongo/operation/create_index/command.rb +0 -61
  80. data/lib/mongo/operation/create_user/command.rb +0 -46
  81. data/lib/mongo/operation/delete/command.rb +0 -52
  82. data/lib/mongo/operation/distinct/command.rb +0 -47
  83. data/lib/mongo/operation/drop/command.rb +0 -41
  84. data/lib/mongo/operation/drop_database/command.rb +0 -41
  85. data/lib/mongo/operation/drop_index/command.rb +0 -45
  86. data/lib/mongo/operation/explain/command.rb +0 -58
  87. data/lib/mongo/operation/explain/legacy.rb +0 -52
  88. data/lib/mongo/operation/find/builder/legacy.rb +0 -123
  89. data/lib/mongo/operation/find/command.rb +0 -51
  90. data/lib/mongo/operation/find/legacy/result.rb +0 -46
  91. data/lib/mongo/operation/find/legacy.rb +0 -52
  92. data/lib/mongo/operation/get_more/command.rb +0 -43
  93. data/lib/mongo/operation/get_more/legacy.rb +0 -39
  94. data/lib/mongo/operation/indexes/command.rb +0 -42
  95. data/lib/mongo/operation/indexes/legacy.rb +0 -48
  96. data/lib/mongo/operation/insert/command.rb +0 -55
  97. data/lib/mongo/operation/kill_cursors/command.rb +0 -48
  98. data/lib/mongo/operation/list_collections/command.rb +0 -46
  99. data/lib/mongo/operation/map_reduce/command.rb +0 -51
  100. data/lib/mongo/operation/parallel_scan/command.rb +0 -57
  101. data/lib/mongo/operation/remove_user/command.rb +0 -46
  102. data/lib/mongo/operation/shared/op_msg_or_command.rb +0 -41
  103. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +0 -44
  104. data/lib/mongo/operation/update/command.rb +0 -53
  105. data/lib/mongo/operation/update_user/command.rb +0 -45
  106. data/lib/mongo/operation/users_info/command.rb +0 -46
  107. data/lib/mongo/operation/write_command/command.rb +0 -51
  108. data/lib/mongo/protocol/delete.rb +0 -172
  109. data/lib/mongo/protocol/insert.rb +0 -181
  110. data/lib/mongo/protocol/update.rb +0 -214
  111. data/spec/mongo/operation/delete/command_spec.rb +0 -115
  112. data/spec/mongo/operation/find/legacy_spec.rb +0 -131
  113. data/spec/mongo/operation/get_more_spec.rb +0 -63
  114. data/spec/mongo/operation/insert/command_spec.rb +0 -118
  115. data/spec/mongo/operation/update/command_spec.rb +0 -122
  116. data/spec/mongo/protocol/delete_spec.rb +0 -185
  117. data/spec/mongo/protocol/insert_spec.rb +0 -179
  118. data/spec/mongo/protocol/update_spec.rb +0 -204
@@ -1,204 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- require 'lite_spec_helper'
5
- require 'support/shared/protocol'
6
-
7
- describe Mongo::Protocol::Update do
8
-
9
- let(:opcode) { 2001 }
10
- let(:db) { SpecConfig.instance.test_db }
11
- let(:collection_name) { 'protocol-test' }
12
- let(:ns) { "#{db}.#{collection_name}" }
13
- let(:selector) { { :name => 'Tyler' } }
14
- let(:update_doc) { { :name => 'Bob' } }
15
- let(:options) { Hash.new }
16
-
17
- let(:message) do
18
- described_class.new(db, collection_name, selector, update_doc, options)
19
- end
20
-
21
- describe '#initialize' do
22
-
23
- it 'sets the namespace' do
24
- expect(message.namespace).to eq(ns)
25
- end
26
-
27
- it 'sets the selector' do
28
- expect(message.selector).to eq(selector)
29
- end
30
-
31
- it 'sets the update document' do
32
- expect(message.update).to eq(update_doc)
33
- end
34
- end
35
-
36
- describe '#==' do
37
-
38
- context 'when the other is an update' do
39
-
40
- context 'when the fields are equal' do
41
- let(:other) do
42
- described_class.new(db, collection_name, selector, update_doc, options)
43
- end
44
-
45
- it 'returns true' do
46
- expect(message).to eq(other)
47
- end
48
- end
49
-
50
- context 'when the database is not equal' do
51
- let(:other) do
52
- described_class.new('tyler', collection_name, selector, update_doc, options)
53
- end
54
-
55
- it 'returns false' do
56
- expect(message).not_to eq(other)
57
- end
58
- end
59
-
60
- context 'when the collection is not equal' do
61
- let(:other) do
62
- described_class.new(db, 'tyler', selector, update_doc, options)
63
- end
64
-
65
- it 'returns false' do
66
- expect(message).not_to eq(other)
67
- end
68
- end
69
-
70
- context 'when the selector is not equal' do
71
- let(:other) do
72
- described_class.new(db, collection_name, { :a => 1 }, update_doc, options)
73
- end
74
-
75
- it 'returns false' do
76
- expect(message).not_to eq(other)
77
- end
78
- end
79
-
80
- context 'when the update document is not equal' do
81
- let(:other) do
82
- described_class.new(db, collection_name, selector, { :a => 1 }, options)
83
- end
84
-
85
- it 'returns false' do
86
- expect(message).not_to eq(other)
87
- end
88
- end
89
-
90
- context 'when the options are not equal' do
91
- let(:other) do
92
- described_class.new(db, collection_name, selector, update_doc,
93
- :flags => :upsert)
94
- end
95
-
96
- it 'returns false' do
97
- expect(message).not_to eq(other)
98
- end
99
- end
100
- end
101
-
102
- context 'when the other is not a query' do
103
- let(:other) do
104
- expect(message).not_to eq('test')
105
- end
106
- end
107
- end
108
-
109
- describe '#hash' do
110
- let(:values) do
111
- message.send(:fields).map do |field|
112
- message.instance_variable_get(field[:name])
113
- end
114
- end
115
-
116
- it 'returns a hash of the field values' do
117
- expect(message.hash).to eq(values.hash)
118
- end
119
- end
120
-
121
- describe '#replyable?' do
122
-
123
- it 'returns false' do
124
- expect(message).to_not be_replyable
125
- end
126
- end
127
-
128
- describe '#serialize' do
129
- let(:bytes) { message.serialize }
130
-
131
- include_examples 'message with a header'
132
-
133
- describe 'zero' do
134
- let(:field) { bytes.to_s[16..19] }
135
-
136
- it 'serializes a zero' do
137
- expect(field).to be_int32(0)
138
- end
139
- end
140
-
141
- describe 'namespace' do
142
- let(:field) { bytes.to_s[20..36] }
143
- it 'serializes the namespace' do
144
- expect(field).to be_cstring(ns)
145
- end
146
- end
147
-
148
- describe 'flags' do
149
- let(:field) { bytes.to_s[37..40] }
150
-
151
- context 'when no flags are provided' do
152
- it 'does not set any bits' do
153
- expect(field).to be_int32(0)
154
- end
155
- end
156
-
157
- context 'when flags are provided' do
158
- let(:options) { { :flags => flags } }
159
-
160
- context 'upsert flag' do
161
- let(:flags) { [:upsert] }
162
- it 'sets the first bit' do
163
- expect(field).to be_int32(1)
164
- end
165
- end
166
-
167
- context 'multi update' do
168
- let(:flags) { [:multi_update] }
169
- it 'sets the second bit' do
170
- expect(field).to be_int32(2)
171
- end
172
- end
173
- end
174
- end
175
-
176
- describe 'selector' do
177
- let(:field) { bytes.to_s[41..61] }
178
- it 'serializes the selector' do
179
- expect(field).to be_bson(selector)
180
- end
181
- end
182
-
183
- describe 'update' do
184
- let(:field) { bytes.to_s[62..80] }
185
- it 'serializes the update' do
186
- expect(field).to be_bson(update_doc)
187
- end
188
- end
189
- end
190
-
191
- describe '#registry' do
192
-
193
- context 'when the class is loaded' do
194
-
195
- it 'registers the op code in the Protocol Registry' do
196
- expect(Mongo::Protocol::Registry.get(described_class::OP_CODE)).to be(described_class)
197
- end
198
-
199
- it 'creates an #op_code instance method' do
200
- expect(message.op_code).to eq(described_class::OP_CODE)
201
- end
202
- end
203
- end
204
- end