mongo 1.10.0.rc1 → 1.10.0

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.
@@ -60,7 +60,7 @@ module Mongo
60
60
  # @option opts [String] :content_type ('binary/octet-stream') If no content type is specified,
61
61
  # the content type will may be inferred from the filename extension if the mime-types gem can be
62
62
  # loaded. Otherwise, the content type 'binary/octet-stream' will be used.
63
- # @option opts [Integer] (262144) :chunk_size size of file chunks in bytes.
63
+ # @option opts [Integer] (261120) :chunk_size size of file chunks in bytes.
64
64
  # @option opts [Boolean] :delete_old (false) ensure that old versions of the file are deleted. This option
65
65
  # only work in 'w' mode. Certain precautions must be taken when deleting GridFS files. See the notes under
66
66
  # GridFileSystem#delete.
@@ -21,7 +21,7 @@ module Mongo
21
21
  class GridIO
22
22
  include Mongo::WriteConcern
23
23
 
24
- DEFAULT_CHUNK_SIZE = 256 * 1024
24
+ DEFAULT_CHUNK_SIZE = 255 * 1024
25
25
  DEFAULT_CONTENT_TYPE = 'binary/octet-stream'
26
26
  PROTECTED_ATTRS = [:files_id, :file_length, :client_md5, :server_md5]
27
27
 
@@ -39,7 +39,7 @@ module Mongo
39
39
  # @option opts [Hash] :query a query selector used when opening the file in 'r' mode.
40
40
  # @option opts [Hash] :query_opts any query options to be used when opening the file in 'r' mode.
41
41
  # @option opts [String] :fs_name the file system prefix.
42
- # @option opts [Integer] (262144) :chunk_size size of file chunks in bytes.
42
+ # @option opts [Integer] (261120) :chunk_size size of file chunks in bytes.
43
43
  # @option opts [Hash] :metadata ({}) any additional data to store with the file.
44
44
  # @option opts [ObjectId] :_id (ObjectId) a unique id for
45
45
  # the file to be use in lieu of an automatically generated one.
@@ -106,11 +106,9 @@ module Mongo
106
106
 
107
107
  # Write the given string (binary) data to the file.
108
108
  #
109
- # @param [String] string
110
- # the data to write
109
+ # @param [String] io the data to write.
111
110
  #
112
- # @return [Integer]
113
- # the number of bytes written.
111
+ # @return [Integer] the number of bytes written.
114
112
  def write(io)
115
113
  raise GridError, "file not opened for write" unless @mode[0] == ?w
116
114
  if io.is_a? String
@@ -43,7 +43,7 @@ module Mongo
43
43
  DEFAULT_DB_NAME = 'test'
44
44
  GENERIC_OPTS = [:auths, :logger, :connect, :db_name]
45
45
  TIMEOUT_OPTS = [:timeout, :op_timeout, :connect_timeout]
46
- SSL_OPTS = [:ssl, :ssl_key, :ssl_cert, :ssl_verify, :ssl_ca_cert]
46
+ SSL_OPTS = [:ssl, :ssl_key, :ssl_cert, :ssl_verify, :ssl_ca_cert, :ssl_key_pass_phrase]
47
47
  POOL_OPTS = [:pool_size, :pool_timeout]
48
48
  READ_PREFERENCE_OPTS = [:read, :tag_sets, :secondary_acceptable_latency_ms]
49
49
  WRITE_CONCERN_OPTS = [:w, :j, :fsync, :wtimeout]
@@ -90,14 +90,14 @@ module Mongo
90
90
  # @param [Integer] port specify a port number here if only one host is being specified.
91
91
  # @param [Hash] opts hash of optional settings and configuration values.
92
92
  #
93
- # @option opts [String, Integer, Symbol] :w (1) Set default number of nodes to which a write
93
+ # @option opts [String, Integer, Symbol] :w (1) Set default number of nodes to which a write
94
94
  # should be acknowledged.
95
- # @option opts [Integer] :wtimeout (nil) Set replica set acknowledgement timeout.
96
- # @option opts [Boolean] :j (false) If true, block until write operations have been committed
95
+ # @option opts [Integer] :wtimeout (nil) Set replica set acknowledgement timeout.
96
+ # @option opts [Boolean] :j (false) If true, block until write operations have been committed
97
97
  # to the journal. Cannot be used in combination with 'fsync'. Prior to MongoDB 2.6 this option was
98
98
  # ignored if the server was running without journaling. Starting with MongoDB 2.6, write operations will
99
99
  # fail with an exception if this option is used when the server is running without journaling.
100
- # @option opts [Boolean] :fsync (false) If true, and the server is running without journaling, blocks until
100
+ # @option opts [Boolean] :fsync (false) If true, and the server is running without journaling, blocks until
101
101
  # the server has synced all data files to disk. If the server is running with journaling, this acts the same as
102
102
  # the 'j' option, blocking until write operations have been committed to the journal.
103
103
  # Cannot be used in combination with 'j'.
@@ -111,7 +111,7 @@ module Mongo
111
111
  # @option opts [String] :ssl_cert (nil) The certificate file used to identify the local connection against MongoDB.
112
112
  # @option opts [String] :ssl_key (nil) The private keyfile used to identify the local connection against MongoDB.
113
113
  # Note that even if the key is stored in the same file as the certificate, both need to be explicitly specified.
114
- # Additionally, note that the driver does not currently support providing a passphrase for the private key.
114
+ # @option opts [String] :ssl_key_pass_phrase (nil) A passphrase for the private key.
115
115
  # @option opts [Boolean] :ssl_verify (nil) Specifies whether or not peer certification validation should occur.
116
116
  # @option opts [String] :ssl_ca_cert (nil) The ca_certs file contains a set of concatenated "certification authority"
117
117
  # certificates, which are used to validate certificates passed from the other end of the connection.
@@ -216,7 +216,7 @@ module Mongo
216
216
  # @param uri [String]
217
217
  # A string of the format mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/database]
218
218
  #
219
- # @param opts Any of the options available for MongoClient.new
219
+ # @param [Hash] extra_opts Any of the options available for MongoClient.new
220
220
  #
221
221
  # @return [Mongo::MongoClient, Mongo::MongoReplicaSetClient]
222
222
  def self.from_uri(uri = ENV['MONGODB_URI'], extra_opts={})
@@ -594,10 +594,11 @@ module Mongo
594
594
  @socket_opts = {}
595
595
  if @ssl
596
596
  # construct ssl socket opts
597
- @socket_opts[:key] = opts.delete(:ssl_key)
598
- @socket_opts[:cert] = opts.delete(:ssl_cert)
599
- @socket_opts[:verify] = opts.delete(:ssl_verify)
600
- @socket_opts[:ca_cert] = opts.delete(:ssl_ca_cert)
597
+ @socket_opts[:key] = opts.delete(:ssl_key)
598
+ @socket_opts[:cert] = opts.delete(:ssl_cert)
599
+ @socket_opts[:verify] = opts.delete(:ssl_verify)
600
+ @socket_opts[:ca_cert] = opts.delete(:ssl_ca_cert)
601
+ @socket_opts[:key_pass_phrase] = opts.delete(:ssl_key_pass_phrase)
601
602
 
602
603
  # verify peer requires ca_cert, raise if only one is present
603
604
  if @socket_opts[:verify] && !@socket_opts[:ca_cert]
@@ -606,6 +607,13 @@ module Mongo
606
607
  ':ssl_ca_cert in order to perform server validation.'
607
608
  end
608
609
 
610
+ # if we have a keyfile passphrase but no key file, raise
611
+ if @socket_opts[:key_pass_phrase] && !@socket_opts[:key]
612
+ raise MongoArgumentError,
613
+ 'If :ssl_key_pass_phrase has been specified, then you must include ' +
614
+ ':ssl_key, the passphrase-protected keyfile.'
615
+ end
616
+
609
617
  @socket_class = Mongo::SSLSocket
610
618
  elsif @unix
611
619
  @socket_class = Mongo::UNIXSocket
@@ -92,7 +92,7 @@ module Mongo
92
92
  # @option opts [String] :ssl_cert (nil) The certificate file used to identify the local connection against MongoDB.
93
93
  # @option opts [String] :ssl_key (nil) The private keyfile used to identify the local connection against MongoDB.
94
94
  # Note that even if the key is stored in the same file as the certificate, both need to be explicitly specified.
95
- # Additionally, note that the driver does not currently support providing a passphrase for the private key.
95
+ # @option opts [String] :ssl_key_pass_phrase (nil) A passphrase for the private key.
96
96
  # @option opts [Boolean] :ssl_verify (nil) Specifies whether or not peer certification validation should occur.
97
97
  # @option opts [String] :ssl_ca_cert (nil) The ca_certs file contains a set of concatenated "certification authority"
98
98
  # certificates, which are used to validate certificates passed from the other end of the connection.
@@ -148,10 +148,10 @@ module Mongo
148
148
  # @param uri [ String ] string of the format:
149
149
  # mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/database]
150
150
  #
151
- # @param opts [ Hash ] Any of the options available for MongoShardedClient.new
151
+ # @param options [ Hash ] Any of the options available for MongoShardedClient.new
152
152
  #
153
153
  # @return [ Mongo::MongoShardedClient ] The sharded client.
154
- def self.from_uri(uri, options = {})
154
+ def self.from_uri(uri, options={})
155
155
  uri ||= ENV['MONGODB_URI']
156
156
  URIParser.new(uri).connection(options, false, true)
157
157
  end
@@ -67,8 +67,8 @@ module Mongo
67
67
  # @param [Integer] operation a MongoDB opcode.
68
68
  # @param [BSON::ByteBuffer] message a message to send to the database.
69
69
  # @param [String] db_name the name of the database. used on call to get_last_error.
70
- # @param [Hash] last_error_params parameters to be sent to getLastError. See DB#error for
71
- # available options.
70
+ # @param [String] log_message this is currently a no-op and will be removed.
71
+ # @param [Hash] write_concern write concern.
72
72
  #
73
73
  # @see DB#get_last_error for valid last error params.
74
74
  #
@@ -95,18 +95,20 @@ module Mongo
95
95
  raise ex
96
96
  end
97
97
 
98
- if num_received == 1 && (error = docs[0]['err'] || docs[0]['errmsg'])
99
- if error.include?("not master")
98
+ if num_received == 1
99
+ error = docs[0]['err'] || docs[0]['errmsg']
100
+ if error && error.include?("not master")
100
101
  close
101
102
  raise ConnectionFailure.new(docs[0]['code'].to_s + ': ' + error, docs[0]['code'], docs[0])
102
- else
103
+ elsif (note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
104
+ code = docs[0]['code'] || Mongo::ErrorCode::BAD_VALUE # as of server version 2.5.5
105
+ raise WriteConcernError.new(code.to_s + ': ' + note, code, docs[0])
106
+ elsif error
103
107
  code = docs[0]['code'] || Mongo::ErrorCode::UNKNOWN_ERROR
104
108
  error = "wtimeout" if error == "timeout"
109
+ raise WriteConcernError.new(code.to_s + ': ' + error, code, docs[0]) if error == "wtimeout"
105
110
  raise OperationFailure.new(code.to_s + ': ' + error, code, docs[0])
106
111
  end
107
- elsif num_received == 1 && (note = docs[0]['jnote'] || docs[0]['wnote']) # assignment
108
- code = docs[0]['code'] || Mongo::ErrorCode::BAD_VALUE # as of server version 2.5.5
109
- raise OperationFailure.new(code.to_s + ': ' + note, code, docs[0])
110
112
  end
111
113
 
112
114
  docs[0]
@@ -120,8 +122,10 @@ module Mongo
120
122
  # @param [Socket] socket a socket to use in lieu of checking out a new one.
121
123
  # @param [Boolean] command (false) indicate whether this is a command. If this is a command,
122
124
  # the message will be sent to the primary node.
123
- # @param [Boolean] command (false) indicate whether the cursor should be exhausted. Set
125
+ # @param [Symbol] read the read preference.
126
+ # @param [Boolean] exhaust (false) indicate whether the cursor should be exhausted. Set
124
127
  # this to true only when the OP_QUERY_EXHAUST flag is set.
128
+ # @param [Boolean] compile_regex whether BSON regex objects should be compiled into Ruby regexes.
125
129
  #
126
130
  # @return [Array]
127
131
  # An array whose indexes include [0] documents returned, [1] number of document received,
@@ -144,6 +144,20 @@ class ClientTest < Test::Unit::TestCase
144
144
  assert_equal db.name, MongoClient::DEFAULT_DB_NAME
145
145
  end
146
146
 
147
+ def test_from_uri_write_concern
148
+ con = MongoClient.from_uri("mongodb://#{host_port}")
149
+ db = con.db
150
+ coll = db.collection('from-uri-test')
151
+ assert_equal BSON::ObjectId, coll.insert({'a' => 1}).class
152
+ [con, db, coll].each do |component|
153
+ component.write_concern.each do |key,value|
154
+ assert_not_nil(value, "component #{component.class.inspect} should not have write concern #{key.inspect} field with nil value")
155
+ end
156
+ end
157
+ assert_equal({:w => 1}, con.write_concern, "write concern should not have extra pairs that were not specified by the user")
158
+ assert_equal({:w => 1}, db.write_concern, "write concern should not have extra pairs that were not specified by the user")
159
+ assert_equal({:w => 1}, coll.write_concern, "write concern should not have extra pairs that were not specified by the user")
160
+ end
147
161
 
148
162
  def test_server_version
149
163
  assert_match(/\d\.\d+(\.\d+)?/, @client.server_version.to_s)
@@ -102,12 +102,10 @@ class CollectionTest < Test::Unit::TestCase
102
102
  @@test.drop
103
103
  @@test.insert([{ :a => 1 }, { :a => 1 }])
104
104
 
105
- command = {
106
- 'delete' => @@test.name,
107
- :deletes => [{ :q => { :a => 1 }, :limit => 1 }],
108
- :writeConcern => { :w => 1 },
109
- :ordered => false
110
- }
105
+ command = BSON::OrderedHash['delete', @@test.name,
106
+ :deletes, [{ :q => { :a => 1 }, :limit => 1 }],
107
+ :writeConcern, { :w => 1 },
108
+ :ordered, false]
111
109
 
112
110
  result = @@db.command(command)
113
111
  assert_equal 1, result['n']
@@ -119,12 +117,10 @@ class CollectionTest < Test::Unit::TestCase
119
117
  @@test.drop
120
118
  @@test.insert([{ :a => 1 }, { :a => 1 }])
121
119
 
122
- command = {
123
- 'delete' => @@test.name,
124
- :deletes => [{ :q => { :a => 1 }, :limit => 0 }],
125
- :writeConcern => { :w => 1 },
126
- :ordered => true
127
- }
120
+ command = BSON::OrderedHash['delete', @@test.name,
121
+ :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
122
+ :writeConcern, { :w => 1 },
123
+ :ordered, true]
128
124
 
129
125
  result = @@db.command(command)
130
126
  assert_equal 2, result['n']
@@ -136,12 +132,10 @@ class CollectionTest < Test::Unit::TestCase
136
132
  @@test.drop
137
133
  @@test.insert([{ :a => 1 }, { :a => 1 }])
138
134
 
139
- command = {
140
- 'delete' => @@test.name,
141
- :deletes => [{ :q => { :a => 1 }, :limit => 0 }],
142
- :writeConcern => { :w => 1 },
143
- :ordered => false
144
- }
135
+ command = BSON::OrderedHash['delete', @@test.name,
136
+ :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
137
+ :writeConcern, { :w => 1 },
138
+ :ordered, false]
145
139
 
146
140
  result = @@db.command(command)
147
141
  assert_equal 2, result['n']
@@ -153,11 +147,9 @@ class CollectionTest < Test::Unit::TestCase
153
147
  @@test.drop
154
148
  @@test.insert([{ :a => 1 }, { :a => 1 }])
155
149
 
156
- command = {
157
- 'delete' => @@test.name,
158
- :deletes => [{ :q => { :a => 1 }, :limit => 0 }],
159
- :ordered => false
160
- }
150
+ command = BSON::OrderedHash['delete', @@test.name,
151
+ :deletes, [{ :q => { :a => 1 }, :limit => 0 }],
152
+ :ordered, false]
161
153
 
162
154
  result = @@db.command(command)
163
155
  assert_equal 2, result['n']
@@ -169,12 +161,10 @@ class CollectionTest < Test::Unit::TestCase
169
161
  @@test.drop
170
162
  @@test.insert([{ :a => 1 }, { :a => 1 }])
171
163
 
172
- command = {
173
- 'delete' => @@test.name,
174
- :deletes => [{ :q => { '$set' => { :a => 1 }}, :limit => 0 }],
175
- :writeConcern => { :w => 1 },
176
- :ordered => false
177
- }
164
+ command = BSON::OrderedHash['delete', @@test.name,
165
+ :deletes, [{ :q => { '$set' => { :a => 1 }}, :limit => 0 }],
166
+ :writeConcern, { :w => 1 },
167
+ :ordered, false]
178
168
 
179
169
  assert_raise Mongo::OperationFailure do
180
170
  @@db.command(command)
@@ -184,12 +174,10 @@ class CollectionTest < Test::Unit::TestCase
184
174
  def test_single_insert_write_command
185
175
  @@test.drop
186
176
 
187
- command = {
188
- 'insert' => @@test.name,
189
- :documents => [{ :a => 1 }],
190
- :writeConcern => { :w => 1 },
191
- :ordered => false
192
- }
177
+ command = BSON::OrderedHash['insert', @@test.name,
178
+ :documents, [{ :a => 1 }],
179
+ :writeConcern, { :w => 1 },
180
+ :ordered, false]
193
181
 
194
182
  result = @@db.command(command)
195
183
  assert_equal 1, result['ok']
@@ -199,12 +187,10 @@ class CollectionTest < Test::Unit::TestCase
199
187
  def test_multi_ordered_insert_write_command
200
188
  @@test.drop
201
189
 
202
- command = {
203
- 'insert' => @@test.name,
204
- :documents => [{ :a => 1 }, { :a => 2 }],
205
- :writeConcern => { :w => 1 },
206
- :ordered => true
207
- }
190
+ command = BSON::OrderedHash['insert', @@test.name,
191
+ :documents, [{ :a => 1 }, { :a => 2 }],
192
+ :writeConcern, { :w => 1 },
193
+ :ordered, true]
208
194
 
209
195
  result = @@db.command(command)
210
196
  assert_equal 1, result['ok']
@@ -214,12 +200,10 @@ class CollectionTest < Test::Unit::TestCase
214
200
  def test_multi_unordered_insert_write_command
215
201
  @@test.drop
216
202
 
217
- command = {
218
- 'insert' => @@test.name,
219
- :documents => [{ :a => 1 }, { :a => 2 }],
220
- :writeConcern => { :w => 1 },
221
- :ordered => false
222
- }
203
+ command = BSON::OrderedHash['insert', @@test.name,
204
+ :documents, [{ :a => 1 }, { :a => 2 }],
205
+ :writeConcern, { :w => 1 },
206
+ :ordered, false]
223
207
 
224
208
  result = @@db.command(command)
225
209
  assert_equal 1, result['ok']
@@ -229,11 +213,9 @@ class CollectionTest < Test::Unit::TestCase
229
213
  def test_insert_write_command_with_no_concern
230
214
  @@test.drop
231
215
 
232
- command = {
233
- 'insert' => @@test.name,
234
- :documents => [{ :a => 1 }, { :a => 2 }],
235
- :ordered => false
236
- }
216
+ command = BSON::OrderedHash['insert', @@test.name,
217
+ :documents, [{ :a => 1 }, { :a => 2 }],
218
+ :ordered, false]
237
219
 
238
220
  result = @@db.command(command)
239
221
  assert_equal 1, result['ok']
@@ -242,14 +224,12 @@ class CollectionTest < Test::Unit::TestCase
242
224
 
243
225
  def test_insert_write_command_with_error
244
226
  @@test.drop
245
- @@test.ensure_index({ :a => 1 }, { :unique => true })
227
+ @@test.ensure_index([[:a, 1]], { :unique => true })
246
228
 
247
- command = {
248
- 'insert' => @@test.name,
249
- :documents => [{ :a => 1 }, { :a => 1 }],
250
- :writeConcern => { :w => 1 },
251
- :ordered => false
252
- }
229
+ command = BSON::OrderedHash['insert', @@test.name,
230
+ :documents, [{ :a => 1 }, { :a => 1 }],
231
+ :writeConcern, { :w => 1 },
232
+ :ordered, false]
253
233
 
254
234
  assert_raise Mongo::OperationFailure do
255
235
  @@db.command(command)
@@ -260,11 +240,9 @@ class CollectionTest < Test::Unit::TestCase
260
240
  @@test.drop
261
241
  @@test.insert([{ :a => 1 }, { :a => 2 }])
262
242
 
263
- command = {
264
- 'update' => @@test.name,
265
- :updates => [{ :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}}],
266
- :writeConcern => { :w => 1 }
267
- }
243
+ command = BSON::OrderedHash['update', @@test.name,
244
+ :updates, [{ :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}}],
245
+ :writeConcern, { :w => 1 }]
268
246
 
269
247
  result = @@db.command(command)
270
248
  assert_equal 1, result['ok']
@@ -276,15 +254,13 @@ class CollectionTest < Test::Unit::TestCase
276
254
  @@test.drop
277
255
  @@test.insert([{ :a => 1 }, { :a => 3 }])
278
256
 
279
- command = {
280
- 'update' => @@test.name,
281
- :updates => [
282
- { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
283
- { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
284
- ],
285
- :writeConcern => { :w => 1 },
286
- :ordered => true
287
- }
257
+ command = BSON::OrderedHash['update', @@test.name,
258
+ :updates, [
259
+ { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
260
+ { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
261
+ ],
262
+ :writeConcern, { :w => 1 },
263
+ :ordered, true]
288
264
 
289
265
  result = @@db.command(command)
290
266
  assert_equal 1, result['ok']
@@ -297,15 +273,13 @@ class CollectionTest < Test::Unit::TestCase
297
273
  @@test.drop
298
274
  @@test.insert([{ :a => 1 }, { :a => 3 }])
299
275
 
300
- command = {
301
- 'update' => @@test.name,
302
- :updates => [
303
- { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
304
- { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
305
- ],
306
- :writeConcern => { :w => 1 },
307
- :ordered => false
308
- }
276
+ command = BSON::OrderedHash['update', @@test.name,
277
+ :updates, [
278
+ { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
279
+ { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
280
+ ],
281
+ :writeConcern, { :w => 1 },
282
+ :ordered, false]
309
283
 
310
284
  result = @@db.command(command)
311
285
  assert_equal 1, result['ok']
@@ -318,14 +292,12 @@ class CollectionTest < Test::Unit::TestCase
318
292
  @@test.drop
319
293
  @@test.insert([{ :a => 1 }, { :a => 3 }])
320
294
 
321
- command = {
322
- 'update' => @@test.name,
323
- :updates => [
324
- { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
325
- { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
326
- ],
327
- :ordered => false
328
- }
295
+ command = BSON::OrderedHash['update', @@test.name,
296
+ :updates, [
297
+ { :q => { :a => 1 }, :u => { '$set' => { :a => 2 }}},
298
+ { :q => { :a => 3 }, :u => { '$set' => { :a => 4 }}}
299
+ ],
300
+ :ordered, false]
329
301
 
330
302
  result = @@db.command(command)
331
303
  assert_equal 1, result['ok']
@@ -336,16 +308,14 @@ class CollectionTest < Test::Unit::TestCase
336
308
 
337
309
  def test_update_write_command_with_error
338
310
  @@test.drop
339
- @@test.ensure_index({ :a => 1 }, { :unique => true })
311
+ @@test.ensure_index([[:a, 1]], { :unique => true })
340
312
  @@test.insert([{ :a => 1 }, { :a => 2 }])
341
313
 
342
- command = {
343
- 'update' => @@test.name,
344
- :updates => [
345
- { :q => { :a => 2 }, :u => { '$set' => { :a => 1 }}}
346
- ],
347
- :ordered => false
348
- }
314
+ command = BSON::OrderedHash['update', @@test.name,
315
+ :updates, [
316
+ { :q => { :a => 2 }, :u => { '$set' => { :a => 1 }}}
317
+ ],
318
+ :ordered, false]
349
319
 
350
320
  assert_raise Mongo::OperationFailure do
351
321
  @@db.command(command)
@@ -877,7 +847,7 @@ class CollectionTest < Test::Unit::TestCase
877
847
  if @@version < "2.5.3"
878
848
  def test_jnote_raises_exception
879
849
  with_no_journaling(@@client) do
880
- ex = assert_raise Mongo::OperationFailure do
850
+ ex = assert_raise Mongo::WriteConcernError do
881
851
  @@test.insert({:foo => 1}, :j => true)
882
852
  end
883
853
  result = ex.result
@@ -886,7 +856,7 @@ class CollectionTest < Test::Unit::TestCase
886
856
  end
887
857
 
888
858
  def test_wnote_raises_exception
889
- ex = assert_raise Mongo::OperationFailure do
859
+ ex = assert_raise Mongo::WriteConcernError do
890
860
  @@test.insert({:foo => 1}, :w => 2)
891
861
  end
892
862
  result = ex.result