mongo 1.10.2 → 1.11.1

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 (51) 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 +43 -9
  5. data/VERSION +1 -1
  6. data/lib/mongo.rb +1 -0
  7. data/lib/mongo/collection.rb +36 -21
  8. data/lib/mongo/connection/pool.rb +14 -22
  9. data/lib/mongo/cursor.rb +13 -0
  10. data/lib/mongo/db.rb +18 -13
  11. data/lib/mongo/functional.rb +0 -2
  12. data/lib/mongo/functional/authentication.rb +35 -25
  13. data/lib/mongo/legacy.rb +4 -4
  14. data/mongo.gemspec +0 -5
  15. data/test/functional/authentication_test.rb +3 -2
  16. data/test/functional/bulk_write_collection_view_test.rb +9 -14
  17. data/test/functional/client_test.rb +42 -43
  18. data/test/functional/collection_test.rb +1073 -995
  19. data/test/functional/collection_writer_test.rb +1 -1
  20. data/test/functional/cursor_fail_test.rb +3 -9
  21. data/test/functional/cursor_message_test.rb +14 -15
  22. data/test/functional/cursor_test.rb +224 -166
  23. data/test/functional/db_api_test.rb +262 -261
  24. data/test/functional/db_connection_test.rb +1 -3
  25. data/test/functional/db_test.rb +116 -115
  26. data/test/functional/grid_file_system_test.rb +108 -108
  27. data/test/functional/pool_test.rb +73 -0
  28. data/test/functional/timeout_test.rb +2 -0
  29. data/test/helpers/test_unit.rb +146 -11
  30. data/test/replica_set/authentication_test.rb +4 -2
  31. data/test/replica_set/basic_test.rb +5 -13
  32. data/test/replica_set/client_test.rb +8 -6
  33. data/test/replica_set/complex_connect_test.rb +3 -0
  34. data/test/replica_set/count_test.rb +2 -0
  35. data/test/replica_set/cursor_test.rb +5 -0
  36. data/test/replica_set/insert_test.rb +1 -1
  37. data/test/replica_set/max_values_test.rb +1 -1
  38. data/test/replica_set/pinning_test.rb +1 -1
  39. data/test/replica_set/query_test.rb +1 -1
  40. data/test/replica_set/read_preference_test.rb +7 -1
  41. data/test/replica_set/refresh_test.rb +11 -8
  42. data/test/replica_set/replication_ack_test.rb +2 -1
  43. data/test/sharded_cluster/basic_test.rb +17 -11
  44. data/test/shared/authentication/basic_auth_shared.rb +59 -98
  45. data/test/shared/authentication/bulk_api_auth_shared.rb +11 -21
  46. data/test/shared/authentication/gssapi_shared.rb +28 -21
  47. data/test/test_helper.rb +5 -0
  48. data/test/tools/mongo_config.rb +96 -11
  49. metadata +4 -5
  50. metadata.gz.sig +0 -0
  51. data/lib/mongo/functional/sasl_java.rb +0 -48
@@ -18,42 +18,41 @@ class DBAPITest < Test::Unit::TestCase
18
18
  include Mongo
19
19
  include BSON
20
20
 
21
- @@client = standard_connection
22
- @@db = @@client.db(TEST_DB)
23
- @@coll = @@db.collection('test')
24
- @@version = @@client.server_version
25
-
26
21
  def setup
27
- @@coll.remove
28
- @r1 = {'a' => 1}
29
- @@coll.insert(@r1) # collection not created until it's used
30
- @@coll_full_name = "#{TEST_DB}.test"
22
+ @client = standard_connection
23
+ @db = @client.db(TEST_DB)
24
+ @coll = @db.collection('test')
25
+ @version = @client.server_version
26
+ @coll.remove
27
+ @r1 = {'a' => 1}
28
+ @coll.insert(@r1) # collection not created until it's used
29
+ @coll_full_name = "#{TEST_DB}.test"
31
30
  end
32
31
 
33
32
  def teardown
34
- @@coll.remove
35
- @@db.get_last_error
33
+ @coll.remove
34
+ @db.get_last_error
36
35
  end
37
36
 
38
37
  def test_clear
39
- assert_equal 1, @@coll.count
40
- @@coll.remove
41
- assert_equal 0, @@coll.count
38
+ assert_equal 1, @coll.count
39
+ @coll.remove
40
+ assert_equal 0, @coll.count
42
41
  end
43
42
 
44
43
  def test_insert
45
- assert_kind_of BSON::ObjectId, @@coll.insert('a' => 2)
46
- assert_kind_of BSON::ObjectId, @@coll.insert('b' => 3)
44
+ assert_kind_of BSON::ObjectId, @coll.insert('a' => 2)
45
+ assert_kind_of BSON::ObjectId, @coll.insert('b' => 3)
47
46
 
48
- assert_equal 3, @@coll.count
49
- docs = @@coll.find().to_a
47
+ assert_equal 3, @coll.count
48
+ docs = @coll.find().to_a
50
49
  assert_equal 3, docs.length
51
50
  assert docs.detect { |row| row['a'] == 1 }
52
51
  assert docs.detect { |row| row['a'] == 2 }
53
52
  assert docs.detect { |row| row['b'] == 3 }
54
53
 
55
- @@coll << {'b' => 4}
56
- docs = @@coll.find().to_a
54
+ @coll << {'b' => 4}
55
+ docs = @coll.find().to_a
57
56
  assert_equal 4, docs.length
58
57
  assert docs.detect { |row| row['b'] == 4 }
59
58
  end
@@ -63,23 +62,23 @@ class DBAPITest < Test::Unit::TestCase
63
62
  oh['a'] = -1
64
63
  oh['b'] = 'foo'
65
64
 
66
- oid = @@coll.save(oh)
67
- assert_equal 'foo', @@coll.find_one(oid)['b']
65
+ oid = @coll.save(oh)
66
+ assert_equal 'foo', @coll.find_one(oid)['b']
68
67
 
69
68
  oh = BSON::OrderedHash['a' => 1, 'b' => 'foo']
70
- oid = @@coll.save(oh)
71
- assert_equal 'foo', @@coll.find_one(oid)['b']
69
+ oid = @coll.save(oh)
70
+ assert_equal 'foo', @coll.find_one(oid)['b']
72
71
  end
73
72
 
74
73
  def test_insert_multiple
75
- ids = @@coll.insert([{'a' => 2}, {'b' => 3}])
74
+ ids = @coll.insert([{'a' => 2}, {'b' => 3}])
76
75
 
77
76
  ids.each do |i|
78
77
  assert_kind_of BSON::ObjectId, i
79
78
  end
80
79
 
81
- assert_equal 3, @@coll.count
82
- docs = @@coll.find().to_a
80
+ assert_equal 3, @coll.count
81
+ docs = @coll.find().to_a
83
82
  assert_equal 3, docs.length
84
83
  assert docs.detect { |row| row['a'] == 1 }
85
84
  assert docs.detect { |row| row['a'] == 2 }
@@ -87,20 +86,20 @@ class DBAPITest < Test::Unit::TestCase
87
86
  end
88
87
 
89
88
  def test_count_on_nonexisting
90
- @@db.drop_collection('foo')
91
- assert_equal 0, @@db.collection('foo').count()
89
+ @db.drop_collection('foo')
90
+ assert_equal 0, @db.collection('foo').count()
92
91
  end
93
92
 
94
93
  def test_find_simple
95
- @r2 = @@coll.insert('a' => 2)
96
- @r3 = @@coll.insert('b' => 3)
94
+ @r2 = @coll.insert('a' => 2)
95
+ @r3 = @coll.insert('b' => 3)
97
96
  # Check sizes
98
- docs = @@coll.find().to_a
97
+ docs = @coll.find().to_a
99
98
  assert_equal 3, docs.size
100
- assert_equal 3, @@coll.count
99
+ assert_equal 3, @coll.count
101
100
 
102
101
  # Find by other value
103
- docs = @@coll.find('a' => @r1['a']).to_a
102
+ docs = @coll.find('a' => @r1['a']).to_a
104
103
  assert_equal 1, docs.size
105
104
  doc = docs.first
106
105
  # Can't compare _id values because at insert, an _id was added to @r1 by
@@ -111,52 +110,52 @@ class DBAPITest < Test::Unit::TestCase
111
110
  end
112
111
 
113
112
  def test_find_advanced
114
- @@coll.insert('a' => 2)
115
- @@coll.insert('b' => 3)
113
+ @coll.insert('a' => 2)
114
+ @coll.insert('b' => 3)
116
115
 
117
116
  # Find by advanced query (less than)
118
- docs = @@coll.find('a' => { '$lt' => 10 }).to_a
117
+ docs = @coll.find('a' => { '$lt' => 10 }).to_a
119
118
  assert_equal 2, docs.size
120
119
  assert docs.detect { |row| row['a'] == 1 }
121
120
  assert docs.detect { |row| row['a'] == 2 }
122
121
 
123
122
  # Find by advanced query (greater than)
124
- docs = @@coll.find('a' => { '$gt' => 1 }).to_a
123
+ docs = @coll.find('a' => { '$gt' => 1 }).to_a
125
124
  assert_equal 1, docs.size
126
125
  assert docs.detect { |row| row['a'] == 2 }
127
126
 
128
127
  # Find by advanced query (less than or equal to)
129
- docs = @@coll.find('a' => { '$lte' => 1 }).to_a
128
+ docs = @coll.find('a' => { '$lte' => 1 }).to_a
130
129
  assert_equal 1, docs.size
131
130
  assert docs.detect { |row| row['a'] == 1 }
132
131
 
133
132
  # Find by advanced query (greater than or equal to)
134
- docs = @@coll.find('a' => { '$gte' => 1 }).to_a
133
+ docs = @coll.find('a' => { '$gte' => 1 }).to_a
135
134
  assert_equal 2, docs.size
136
135
  assert docs.detect { |row| row['a'] == 1 }
137
136
  assert docs.detect { |row| row['a'] == 2 }
138
137
 
139
138
  # Find by advanced query (between)
140
- docs = @@coll.find('a' => { '$gt' => 1, '$lt' => 3 }).to_a
139
+ docs = @coll.find('a' => { '$gt' => 1, '$lt' => 3 }).to_a
141
140
  assert_equal 1, docs.size
142
141
  assert docs.detect { |row| row['a'] == 2 }
143
142
 
144
143
  # Find by advanced query (in clause)
145
- docs = @@coll.find('a' => {'$in' => [1,2]}).to_a
144
+ docs = @coll.find('a' => {'$in' => [1,2]}).to_a
146
145
  assert_equal 2, docs.size
147
146
  assert docs.detect { |row| row['a'] == 1 }
148
147
  assert docs.detect { |row| row['a'] == 2 }
149
148
  end
150
149
 
151
150
  def test_find_sorting
152
- @@coll.remove
153
- @@coll.insert('a' => 1, 'b' => 2)
154
- @@coll.insert('a' => 2, 'b' => 1)
155
- @@coll.insert('a' => 3, 'b' => 2)
156
- @@coll.insert('a' => 4, 'b' => 1)
151
+ @coll.remove
152
+ @coll.insert('a' => 1, 'b' => 2)
153
+ @coll.insert('a' => 2, 'b' => 1)
154
+ @coll.insert('a' => 3, 'b' => 2)
155
+ @coll.insert('a' => 4, 'b' => 1)
157
156
 
158
157
  # Sorting (ascending)
159
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', 1]]).to_a
158
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', 1]]).to_a
160
159
  assert_equal 4, docs.size
161
160
  assert_equal 1, docs[0]['a']
162
161
  assert_equal 2, docs[1]['a']
@@ -164,7 +163,7 @@ class DBAPITest < Test::Unit::TestCase
164
163
  assert_equal 4, docs[3]['a']
165
164
 
166
165
  # Sorting (descending)
167
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', -1]]).to_a
166
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', -1]]).to_a
168
167
  assert_equal 4, docs.size
169
168
  assert_equal 4, docs[0]['a']
170
169
  assert_equal 3, docs[1]['a']
@@ -172,7 +171,7 @@ class DBAPITest < Test::Unit::TestCase
172
171
  assert_equal 1, docs[3]['a']
173
172
 
174
173
  # Sorting using array of names; assumes ascending order.
175
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => 'a').to_a
174
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => 'a').to_a
176
175
  assert_equal 4, docs.size
177
176
  assert_equal 1, docs[0]['a']
178
177
  assert_equal 2, docs[1]['a']
@@ -180,14 +179,14 @@ class DBAPITest < Test::Unit::TestCase
180
179
  assert_equal 4, docs[3]['a']
181
180
 
182
181
  # Sorting using single name; assumes ascending order.
183
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => 'a').to_a
182
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => 'a').to_a
184
183
  assert_equal 4, docs.size
185
184
  assert_equal 1, docs[0]['a']
186
185
  assert_equal 2, docs[1]['a']
187
186
  assert_equal 3, docs[2]['a']
188
187
  assert_equal 4, docs[3]['a']
189
188
 
190
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [['b', 'asc'], ['a', 'asc']]).to_a
189
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => [['b', 'asc'], ['a', 'asc']]).to_a
191
190
  assert_equal 4, docs.size
192
191
  assert_equal 2, docs[0]['a']
193
192
  assert_equal 4, docs[1]['a']
@@ -195,7 +194,7 @@ class DBAPITest < Test::Unit::TestCase
195
194
  assert_equal 3, docs[3]['a']
196
195
 
197
196
  # Sorting using empty array; no order guarantee should not blow up.
198
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => []).to_a
197
+ docs = @coll.find({'a' => { '$lt' => 10 }}, :sort => []).to_a
199
198
  assert_equal 4, docs.size
200
199
  end
201
200
 
@@ -203,17 +202,17 @@ class DBAPITest < Test::Unit::TestCase
203
202
  # Sorting using ordered hash. You can use an unordered one, but then the
204
203
  # order of the keys won't be guaranteed thus your sort won't make sense.
205
204
 
206
- @@coll.remove
207
- @@coll.insert('a' => 1, 'b' => 2)
208
- @@coll.insert('a' => 2, 'b' => 1)
209
- @@coll.insert('a' => 3, 'b' => 2)
210
- @@coll.insert('a' => 4, 'b' => 1)
205
+ @coll.remove
206
+ @coll.insert('a' => 1, 'b' => 2)
207
+ @coll.insert('a' => 2, 'b' => 1)
208
+ @coll.insert('a' => 3, 'b' => 2)
209
+ @coll.insert('a' => 4, 'b' => 1)
211
210
 
212
211
  oh = BSON::OrderedHash.new
213
212
  oh['a'] = -1
214
213
 
215
214
  # Sort as a method
216
- docs = @@coll.find.sort(oh).to_a
215
+ docs = @coll.find.sort(oh).to_a
217
216
  assert_equal 4, docs.size
218
217
  assert_equal 4, docs[0]['a']
219
218
  assert_equal 3, docs[1]['a']
@@ -221,7 +220,7 @@ class DBAPITest < Test::Unit::TestCase
221
220
  assert_equal 1, docs[3]['a']
222
221
 
223
222
  # Sort as an option
224
- docs = @@coll.find({}, :sort => oh).to_a
223
+ docs = @coll.find({}, :sort => oh).to_a
225
224
  assert_equal 4, docs.size
226
225
  assert_equal 4, docs[0]['a']
227
226
  assert_equal 3, docs[1]['a']
@@ -229,21 +228,21 @@ class DBAPITest < Test::Unit::TestCase
229
228
  assert_equal 1, docs[3]['a']
230
229
 
231
230
  if RUBY_VERSION > '1.9'
232
- docs = @@coll.find({}, :sort => {:a => -1}).to_a
231
+ docs = @coll.find({}, :sort => {:a => -1}).to_a
233
232
  assert_equal 4, docs.size
234
233
  assert_equal 4, docs[0]['a']
235
234
  assert_equal 3, docs[1]['a']
236
235
  assert_equal 2, docs[2]['a']
237
236
  assert_equal 1, docs[3]['a']
238
237
 
239
- docs = @@coll.find.sort(:a => -1).to_a
238
+ docs = @coll.find.sort(:a => -1).to_a
240
239
  assert_equal 4, docs.size
241
240
  assert_equal 4, docs[0]['a']
242
241
  assert_equal 3, docs[1]['a']
243
242
  assert_equal 2, docs[2]['a']
244
243
  assert_equal 1, docs[3]['a']
245
244
 
246
- docs = @@coll.find.sort(:b => -1, :a => 1).to_a
245
+ docs = @coll.find.sort(:b => -1, :a => 1).to_a
247
246
  assert_equal 4, docs.size
248
247
  assert_equal 1, docs[0]['a']
249
248
  assert_equal 3, docs[1]['a']
@@ -252,168 +251,168 @@ class DBAPITest < Test::Unit::TestCase
252
251
  else
253
252
  # Sort as an option
254
253
  assert_raise InvalidSortValueError do
255
- @@coll.find({}, :sort => {:a => -1}).to_a
254
+ @coll.find({}, :sort => {:a => -1}).to_a
256
255
  end
257
256
  # Sort as a method
258
257
  assert_raise InvalidSortValueError do
259
- @@coll.find.sort(:a => -1).to_a
258
+ @coll.find.sort(:a => -1).to_a
260
259
  end
261
260
  end
262
261
  end
263
262
 
264
263
  def test_find_limits
265
- @@coll.insert('b' => 2)
266
- @@coll.insert('c' => 3)
267
- @@coll.insert('d' => 4)
264
+ @coll.insert('b' => 2)
265
+ @coll.insert('c' => 3)
266
+ @coll.insert('d' => 4)
268
267
 
269
- docs = @@coll.find({}, :limit => 1).to_a
268
+ docs = @coll.find({}, :limit => 1).to_a
270
269
  assert_equal 1, docs.size
271
- docs = @@coll.find({}, :limit => 2).to_a
270
+ docs = @coll.find({}, :limit => 2).to_a
272
271
  assert_equal 2, docs.size
273
- docs = @@coll.find({}, :limit => 3).to_a
272
+ docs = @coll.find({}, :limit => 3).to_a
274
273
  assert_equal 3, docs.size
275
- docs = @@coll.find({}, :limit => 4).to_a
274
+ docs = @coll.find({}, :limit => 4).to_a
276
275
  assert_equal 4, docs.size
277
- docs = @@coll.find({}).to_a
276
+ docs = @coll.find({}).to_a
278
277
  assert_equal 4, docs.size
279
- docs = @@coll.find({}, :limit => 99).to_a
278
+ docs = @coll.find({}, :limit => 99).to_a
280
279
  assert_equal 4, docs.size
281
280
  end
282
281
 
283
282
  def test_find_one_no_records
284
- @@coll.remove
285
- x = @@coll.find_one('a' => 1)
283
+ @coll.remove
284
+ x = @coll.find_one('a' => 1)
286
285
  assert_nil x
287
286
  end
288
287
 
289
288
  def test_drop_collection
290
- assert @@db.drop_collection(@@coll.name), "drop of collection #{@@coll.name} failed"
291
- assert !@@db.collection_names.include?(@@coll.name)
289
+ assert @db.drop_collection(@coll.name), "drop of collection #{@coll.name} failed"
290
+ assert !@db.collection_names.include?(@coll.name)
292
291
  end
293
292
 
294
293
  def test_other_drop
295
- assert @@db.collection_names.include?(@@coll.name)
296
- @@coll.drop
297
- assert !@@db.collection_names.include?(@@coll.name)
294
+ assert @db.collection_names.include?(@coll.name)
295
+ @coll.drop
296
+ assert !@db.collection_names.include?(@coll.name)
298
297
  end
299
298
 
300
299
  def test_collection_names
301
- names = @@db.collection_names
300
+ names = @db.collection_names
302
301
  assert names.length >= 1
303
- assert names.include?(@@coll.name)
302
+ assert names.include?(@coll.name)
304
303
 
305
- coll2 = @@db.collection('test2')
304
+ coll2 = @db.collection('test2')
306
305
  coll2.insert('a' => 1) # collection not created until it's used
307
- names = @@db.collection_names
306
+ names = @db.collection_names
308
307
  assert names.length >= 2
309
- assert names.include?(@@coll.name)
308
+ assert names.include?(@coll.name)
310
309
  assert names.include?('test2')
311
310
  ensure
312
- @@db.drop_collection('test2')
311
+ @db.drop_collection('test2')
313
312
  end
314
313
 
315
314
  def test_collections_info
316
- cursor = @@db.collections_info
315
+ cursor = @db.collections_info
317
316
  rows = cursor.to_a
318
317
  assert rows.length >= 1
319
- row = rows.detect { |r| r['name'] == @@coll_full_name }
318
+ row = rows.detect { |r| r['name'] == @coll_full_name }
320
319
  assert_not_nil row
321
320
  end
322
321
 
323
322
  def test_collection_options
324
- @@db.drop_collection('foobar')
325
- @@db.strict = true
323
+ @db.drop_collection('foobar')
324
+ @db.strict = true
326
325
 
327
326
  begin
328
- coll = @@db.create_collection('foobar', :capped => true, :size => 4096)
327
+ coll = @db.create_collection('foobar', :capped => true, :size => 4096)
329
328
  options = coll.options
330
- assert_equal 'foobar', options['create'] if @@client.server_version < '2.5.5'
329
+ assert_equal 'foobar', options['create'] if @client.server_version < '2.5.5'
331
330
  assert_equal true, options['capped']
332
331
  assert_equal 4096, options['size']
333
332
  rescue => ex
334
- @@db.drop_collection('foobar')
333
+ @db.drop_collection('foobar')
335
334
  fail "did not expect exception \"#{ex.inspect}\""
336
335
  ensure
337
- @@db.strict = false
336
+ @db.strict = false
338
337
  end
339
338
  end
340
339
 
341
340
  def test_collection_options_are_passed_to_the_existing_ones
342
- @@db.drop_collection('foobar')
341
+ @db.drop_collection('foobar')
343
342
 
344
- @@db.create_collection('foobar')
343
+ @db.create_collection('foobar')
345
344
 
346
- coll = @@db.create_collection('foobar')
345
+ coll = @db.create_collection('foobar')
347
346
  assert_equal true, Mongo::WriteConcern.gle?(coll.write_concern)
348
347
  end
349
348
 
350
349
 
351
350
  def test_index_information
352
- assert_equal @@coll.index_information.length, 1
351
+ assert_equal @coll.index_information.length, 1
353
352
 
354
- name = @@coll.create_index('a')
355
- info = @@db.index_information(@@coll.name)
353
+ name = @coll.create_index('a')
354
+ info = @db.index_information(@coll.name)
356
355
  assert_equal name, "a_1"
357
- assert_equal @@coll.index_information, info
356
+ assert_equal @coll.index_information, info
358
357
  assert_equal 2, info.length
359
358
 
360
359
  assert info.has_key?(name)
361
360
  assert_equal info[name]["key"], {"a" => 1}
362
361
  ensure
363
- @@db.drop_index(@@coll.name, name)
362
+ @db.drop_index(@coll.name, name)
364
363
  end
365
364
 
366
365
  def test_index_create_with_symbol
367
- assert_equal @@coll.index_information.length, 1
366
+ assert_equal @coll.index_information.length, 1
368
367
 
369
- name = @@coll.create_index([['a', 1]])
370
- info = @@db.index_information(@@coll.name)
368
+ name = @coll.create_index([['a', 1]])
369
+ info = @db.index_information(@coll.name)
371
370
  assert_equal name, "a_1"
372
- assert_equal @@coll.index_information, info
371
+ assert_equal @coll.index_information, info
373
372
  assert_equal 2, info.length
374
373
 
375
374
  assert info.has_key?(name)
376
375
  assert_equal info[name]['key'], {"a" => 1}
377
376
  ensure
378
- @@db.drop_index(@@coll.name, name)
377
+ @db.drop_index(@coll.name, name)
379
378
  end
380
379
 
381
380
  def test_multiple_index_cols
382
- name = @@coll.create_index([['a', DESCENDING], ['b', ASCENDING], ['c', DESCENDING]])
383
- info = @@db.index_information(@@coll.name)
381
+ name = @coll.create_index([['a', DESCENDING], ['b', ASCENDING], ['c', DESCENDING]])
382
+ info = @db.index_information(@coll.name)
384
383
  assert_equal 2, info.length
385
384
 
386
385
  assert_equal name, 'a_-1_b_1_c_-1'
387
386
  assert info.has_key?(name)
388
387
  assert_equal info[name]['key'], {"a" => -1, "b" => 1, "c" => -1}
389
388
  ensure
390
- @@db.drop_index(@@coll.name, name)
389
+ @db.drop_index(@coll.name, name)
391
390
  end
392
391
 
393
392
  def test_multiple_index_cols_with_symbols
394
- name = @@coll.create_index([[:a, DESCENDING], [:b, ASCENDING], [:c, DESCENDING]])
395
- info = @@db.index_information(@@coll.name)
393
+ name = @coll.create_index([[:a, DESCENDING], [:b, ASCENDING], [:c, DESCENDING]])
394
+ info = @db.index_information(@coll.name)
396
395
  assert_equal 2, info.length
397
396
 
398
397
  assert_equal name, 'a_-1_b_1_c_-1'
399
398
  assert info.has_key?(name)
400
399
  assert_equal info[name]['key'], {"a" => -1, "b" => 1, "c" => -1}
401
400
  ensure
402
- @@db.drop_index(@@coll.name, name)
401
+ @db.drop_index(@coll.name, name)
403
402
  end
404
403
 
405
404
  def test_unique_index
406
- @@db.drop_collection("blah")
407
- test = @@db.collection("blah")
405
+ @db.drop_collection("blah")
406
+ test = @db.collection("blah")
408
407
  test.create_index("hello")
409
408
 
410
409
  test.insert("hello" => "world")
411
410
  test.insert("hello" => "mike")
412
411
  test.insert("hello" => "world")
413
- assert !@@db.error?
412
+ assert !@db.error?
414
413
 
415
- @@db.drop_collection("blah")
416
- test = @@db.collection("blah")
414
+ @db.drop_collection("blah")
415
+ test = @db.collection("blah")
417
416
  test.create_index("hello", :unique => true)
418
417
 
419
418
  test.insert("hello" => "world")
@@ -424,16 +423,16 @@ class DBAPITest < Test::Unit::TestCase
424
423
  end
425
424
 
426
425
  def test_index_on_subfield
427
- @@db.drop_collection("blah")
428
- test = @@db.collection("blah")
426
+ @db.drop_collection("blah")
427
+ test = @db.collection("blah")
429
428
 
430
429
  test.insert("hello" => {"a" => 4, "b" => 5})
431
430
  test.insert("hello" => {"a" => 7, "b" => 2})
432
431
  test.insert("hello" => {"a" => 4, "b" => 10})
433
- assert !@@db.error?
432
+ assert !@db.error?
434
433
 
435
- @@db.drop_collection("blah")
436
- test = @@db.collection("blah")
434
+ @db.drop_collection("blah")
435
+ test = @db.collection("blah")
437
436
  test.create_index("hello.a", :unique => true)
438
437
 
439
438
  test.insert("hello" => {"a" => 4, "b" => 5})
@@ -444,19 +443,19 @@ class DBAPITest < Test::Unit::TestCase
444
443
  end
445
444
 
446
445
  def test_array
447
- @@coll.remove({'$atomic' => true})
448
- @@coll.insert({'b' => [1, 2, 3]})
449
- @@coll.insert({'b' => [1, 2, 3]})
450
- rows = @@coll.find({}, {:fields => ['b']}).to_a
446
+ @coll.remove({'$atomic' => true})
447
+ @coll.insert({'b' => [1, 2, 3]})
448
+ @coll.insert({'b' => [1, 2, 3]})
449
+ rows = @coll.find({}, {:fields => ['b']}).to_a
451
450
  assert_equal 2, rows.length
452
451
  assert_equal [1, 2, 3], rows[1]['b']
453
452
  end
454
453
 
455
454
  def test_regex
456
455
  regex = /foobar/i
457
- @@coll << {'b' => regex}
458
- rows = @@coll.find({}, {:fields => ['b']}).to_a
459
- if @@version < "1.1.3"
456
+ @coll << {'b' => regex}
457
+ rows = @coll.find({}, {:fields => ['b']}).to_a
458
+ if @version < "1.1.3"
460
459
  assert_equal 1, rows.length
461
460
  assert_equal regex, rows[0]['b']
462
461
  else
@@ -466,14 +465,14 @@ class DBAPITest < Test::Unit::TestCase
466
465
  end
467
466
 
468
467
  def test_regex_multi_line
469
- if @@version >= "1.9.1"
470
- doc = <<HERE
468
+ if @version >= "1.9.1"
469
+ doc = <<HERE
471
470
  the lazy brown
472
471
  fox
473
472
  HERE
474
- @@coll.save({:doc => doc})
475
- assert @@coll.find_one({:doc => /n.*x/m})
476
- @@coll.remove
473
+ @coll.save({:doc => doc})
474
+ assert @coll.find_one({:doc => /n.*x/m})
475
+ @coll.remove
477
476
  end
478
477
  end
479
478
 
@@ -481,135 +480,137 @@ HERE
481
480
  # Note: can't use Time.new because that will include fractional seconds,
482
481
  # which Mongo does not store.
483
482
  t = Time.at(1234567890)
484
- @@coll << {'_id' => t}
485
- rows = @@coll.find({'_id' => t}).to_a
483
+ @coll << {'_id' => t}
484
+ rows = @coll.find({'_id' => t}).to_a
486
485
  assert_equal 1, rows.length
487
486
  assert_equal t, rows[0]['_id']
488
487
  end
489
488
 
490
489
  def test_strict
491
- assert !@@db.strict?
492
- @@db.strict = true
493
- assert @@db.strict?
490
+ assert !@db.strict?
491
+ @db.strict = true
492
+ assert @db.strict?
494
493
  ensure
495
- @@db.strict = false
494
+ @db.strict = false
496
495
  end
497
496
 
498
497
  def test_strict_access_collection
499
- @@db.strict = true
498
+ @db.strict = true
500
499
  begin
501
- @@db.collection('does-not-exist')
500
+ @db.collection('does-not-exist')
502
501
  fail "expected exception"
503
502
  rescue => ex
504
503
  assert_equal Mongo::MongoDBError, ex.class
505
504
  assert_equal "Collection 'does-not-exist' doesn't exist. (strict=true)", ex.to_s
506
505
  ensure
507
- @@db.strict = false
508
- @@db.drop_collection('does-not-exist')
506
+ @db.strict = false
507
+ @db.drop_collection('does-not-exist')
509
508
  end
510
509
  end
511
510
 
512
511
  def test_strict_create_collection
513
- @@db.drop_collection('foobar')
514
- @@db.strict = true
512
+ @db.drop_collection('foobar')
513
+ @db.strict = true
515
514
 
516
515
  begin
517
- assert @@db.create_collection('foobar')
516
+ assert @db.create_collection('foobar')
518
517
  rescue => ex
519
518
  fail "did not expect exception \"#{ex}\""
520
519
  end
521
520
 
522
521
  # Now the collection exists. This time we should see an exception.
523
522
  assert_raise Mongo::MongoDBError do
524
- @@db.create_collection('foobar')
523
+ @db.create_collection('foobar')
525
524
  end
526
- @@db.strict = false
527
- @@db.drop_collection('foobar')
525
+ @db.strict = false
526
+ @db.drop_collection('foobar')
528
527
 
529
528
  # Now we're not in strict mode - should succeed
530
- @@db.create_collection('foobar')
531
- @@db.create_collection('foobar')
532
- @@db.drop_collection('foobar')
529
+ @db.create_collection('foobar')
530
+ @db.create_collection('foobar')
531
+ @db.drop_collection('foobar')
533
532
  end
534
533
 
535
534
  def test_where
536
- @@coll.insert('a' => 2)
537
- @@coll.insert('a' => 3)
535
+ @coll.insert('a' => 2)
536
+ @coll.insert('a' => 3)
538
537
 
539
- assert_equal 3, @@coll.count
540
- assert_equal 1, @@coll.find('$where' => BSON::Code.new('this.a > 2')).count()
541
- assert_equal 2, @@coll.find('$where' => BSON::Code.new('this.a > i', {'i' => 1})).count()
538
+ assert_equal 3, @coll.count
539
+ assert_equal 1, @coll.find('$where' => BSON::Code.new('this.a > 2')).count()
540
+ assert_equal 2, @coll.find('$where' => BSON::Code.new('this.a > i', {'i' => 1})).count()
542
541
  end
543
542
 
544
543
  def test_eval
545
- assert_equal 3, @@db.eval('function (x) {return x;}', 3)
544
+ grant_admin_user_eval_role(@client)
545
+
546
+ assert_equal 3, @db.eval('function (x) {return x;}', 3)
546
547
 
547
- assert_equal nil, @@db.eval("function (x) {db.test_eval.save({y:x});}", 5)
548
- assert_equal 5, @@db.collection('test_eval').find_one['y']
548
+ assert_equal nil, @db.eval("function (x) {db.test_eval.save({y:x});}", 5)
549
+ assert_equal 5, @db.collection('test_eval').find_one['y']
549
550
 
550
- assert_equal 5, @@db.eval("function (x, y) {return x + y;}", 2, 3)
551
- assert_equal 5, @@db.eval("function () {return 5;}")
552
- assert_equal 5, @@db.eval("2 + 3;")
551
+ assert_equal 5, @db.eval("function (x, y) {return x + y;}", 2, 3)
552
+ assert_equal 5, @db.eval("function () {return 5;}")
553
+ assert_equal 5, @db.eval("2 + 3;")
553
554
 
554
- assert_equal 5, @@db.eval(Code.new("2 + 3;"))
555
- assert_equal 2, @@db.eval(Code.new("return i;", {"i" => 2}))
556
- assert_equal 5, @@db.eval(Code.new("i + 3;", {"i" => 2}))
555
+ assert_equal 5, @db.eval(Code.new("2 + 3;"))
556
+ assert_equal 2, @db.eval(Code.new("return i;", {"i" => 2}))
557
+ assert_equal 5, @db.eval(Code.new("i + 3;", {"i" => 2}))
557
558
 
558
559
  assert_raise OperationFailure do
559
- @@db.eval("5 ++ 5;")
560
+ @db.eval("5 ++ 5;")
560
561
  end
561
562
  end
562
563
 
563
564
  def test_hint
564
- name = @@coll.create_index('a')
565
+ name = @coll.create_index('a')
565
566
  begin
566
- assert_nil @@coll.hint
567
- assert_equal 1, @@coll.find({'a' => 1}, :hint => 'a').to_a.size
568
- assert_equal 1, @@coll.find({'a' => 1}, :hint => ['a']).to_a.size
569
- assert_equal 1, @@coll.find({'a' => 1}, :hint => {'a' => 1}).to_a.size
570
-
571
- @@coll.hint = 'a'
572
- assert_equal({'a' => 1}, @@coll.hint)
573
- assert_equal 1, @@coll.find('a' => 1).to_a.size
574
-
575
- @@coll.hint = ['a']
576
- assert_equal({'a' => 1}, @@coll.hint)
577
- assert_equal 1, @@coll.find('a' => 1).to_a.size
578
-
579
- @@coll.hint = {'a' => 1}
580
- assert_equal({'a' => 1}, @@coll.hint)
581
- assert_equal 1, @@coll.find('a' => 1).to_a.size
582
-
583
- @@coll.hint = nil
584
- assert_nil @@coll.hint
585
- assert_equal 1, @@coll.find('a' => 1).to_a.size
567
+ assert_nil @coll.hint
568
+ assert_equal 1, @coll.find({'a' => 1}, :hint => 'a').to_a.size
569
+ assert_equal 1, @coll.find({'a' => 1}, :hint => ['a']).to_a.size
570
+ assert_equal 1, @coll.find({'a' => 1}, :hint => {'a' => 1}).to_a.size
571
+
572
+ @coll.hint = 'a'
573
+ assert_equal({'a' => 1}, @coll.hint)
574
+ assert_equal 1, @coll.find('a' => 1).to_a.size
575
+
576
+ @coll.hint = ['a']
577
+ assert_equal({'a' => 1}, @coll.hint)
578
+ assert_equal 1, @coll.find('a' => 1).to_a.size
579
+
580
+ @coll.hint = {'a' => 1}
581
+ assert_equal({'a' => 1}, @coll.hint)
582
+ assert_equal 1, @coll.find('a' => 1).to_a.size
583
+
584
+ @coll.hint = nil
585
+ assert_nil @coll.hint
586
+ assert_equal 1, @coll.find('a' => 1).to_a.size
586
587
  ensure
587
- @@coll.drop_index(name)
588
+ @coll.drop_index(name)
588
589
  end
589
590
  end
590
591
 
591
592
  def test_named_hint
592
- name = @@coll.create_index('a', :name => 'named_index')
593
+ name = @coll.create_index('a', :name => 'named_index')
593
594
  begin
594
- assert_nil @@coll.hint
595
- assert_equal 1, @@coll.find({'a' => 1}, :named_hint => 'named_index').to_a.size
596
- assert_equal 1, @@coll.find({'a' => 1}, :hint => 'a', :named_hint => "bad_hint").to_a.size
595
+ assert_nil @coll.hint
596
+ assert_equal 1, @coll.find({'a' => 1}, :named_hint => 'named_index').to_a.size
597
+ assert_equal 1, @coll.find({'a' => 1}, :hint => 'a', :named_hint => "bad_hint").to_a.size
597
598
  ensure
598
- @@coll.drop_index('named_index')
599
+ @coll.drop_index('named_index')
599
600
  end
600
601
  end
601
602
 
602
603
  def test_hash_default_value_id
603
604
  val = Hash.new(0)
604
605
  val["x"] = 5
605
- @@coll.insert val
606
- id = @@coll.find_one("x" => 5)["_id"]
606
+ @coll.insert val
607
+ id = @coll.find_one("x" => 5)["_id"]
607
608
  assert id != 0
608
609
  end
609
610
 
610
611
  def test_group
611
- @@db.drop_collection("test")
612
- test = @@db.collection("test")
612
+ @db.drop_collection("test")
613
+ test = @db.collection("test")
613
614
 
614
615
  assert_equal [], test.group(:initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")
615
616
  assert_equal [], test.group(:initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")
@@ -619,26 +620,26 @@ HERE
619
620
  test.insert("a" => 1)
620
621
 
621
622
  assert_equal 3, test.group(:initial => {"count" => 0},
622
- :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
623
+ :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
623
624
  assert_equal 3, test.group(:initial => {"count" => 0},
624
- :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
625
+ :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
625
626
  assert_equal 1, test.group(:cond => {"a" => {"$gt" => 1}},
626
- :initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
627
+ :initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
627
628
  assert_equal 1, test.group(:cond => {"a" => {"$gt" => 1}},
628
- :initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
629
+ :initial => {"count" => 0}, :reduce => "function (obj, prev) { prev.count++; }")[0]["count"]
629
630
 
630
631
  finalize = "function (obj) { obj.f = obj.count - 1; }"
631
632
  assert_equal 2, test.group(:initial => {"count" => 0},
632
- :reduce => "function (obj, prev) { prev.count++; }", :finalize => finalize)[0]["f"]
633
+ :reduce => "function (obj, prev) { prev.count++; }", :finalize => finalize)[0]["f"]
633
634
 
634
635
  test.insert("a" => 2, "b" => 3)
635
636
  expected = [{"a" => 2, "count" => 2},
636
637
  {"a" => nil, "count" => 1},
637
638
  {"a" => 1, "count" => 1}]
638
639
  assert_equal expected, test.group(:key => ["a"], :initial => {"count" => 0},
639
- :reduce => "function (obj, prev) { prev.count++; }")
640
+ :reduce => "function (obj, prev) { prev.count++; }")
640
641
  assert_equal expected, test.group(:key => :a, :initial => {"count" => 0},
641
- :reduce => "function (obj, prev) { prev.count++; }")
642
+ :reduce => "function (obj, prev) { prev.count++; }")
642
643
 
643
644
  assert_raise OperationFailure do
644
645
  test.group(:initial => {}, :reduce => "5 ++ 5")
@@ -646,109 +647,109 @@ HERE
646
647
  end
647
648
 
648
649
  def test_deref
649
- @@coll.remove
650
+ @coll.remove
650
651
 
651
- assert_equal nil, @@db.dereference(DBRef.new("test", ObjectId.new))
652
- @@coll.insert({"x" => "hello"})
653
- key = @@coll.find_one()["_id"]
654
- assert_equal "hello", @@db.dereference(DBRef.new("test", key))["x"]
652
+ assert_equal nil, @db.dereference(DBRef.new("test", ObjectId.new))
653
+ @coll.insert({"x" => "hello"})
654
+ key = @coll.find_one()["_id"]
655
+ assert_equal "hello", @db.dereference(DBRef.new("test", key))["x"]
655
656
 
656
- assert_equal nil, @@db.dereference(DBRef.new("test", 4))
657
+ assert_equal nil, @db.dereference(DBRef.new("test", 4))
657
658
  obj = {"_id" => 4}
658
- @@coll.insert(obj)
659
- assert_equal obj, @@db.dereference(DBRef.new("test", 4))
659
+ @coll.insert(obj)
660
+ assert_equal obj, @db.dereference(DBRef.new("test", 4))
660
661
 
661
- @@coll.remove
662
- @@coll.insert({"x" => "hello"})
663
- assert_equal nil, @@db.dereference(DBRef.new("test", nil))
662
+ @coll.remove
663
+ @coll.insert({"x" => "hello"})
664
+ assert_equal nil, @db.dereference(DBRef.new("test", nil))
664
665
  end
665
666
 
666
667
  def test_save
667
- @@coll.remove
668
+ @coll.remove
668
669
 
669
670
  a = {"hello" => "world"}
670
671
 
671
- id = @@coll.save(a)
672
+ id = @coll.save(a)
672
673
  assert_kind_of ObjectId, id
673
- assert_equal 1, @@coll.count
674
+ assert_equal 1, @coll.count
674
675
 
675
- assert_equal id, @@coll.save(a)
676
- assert_equal 1, @@coll.count
676
+ assert_equal id, @coll.save(a)
677
+ assert_equal 1, @coll.count
677
678
 
678
- assert_equal "world", @@coll.find_one()["hello"]
679
+ assert_equal "world", @coll.find_one()["hello"]
679
680
 
680
681
  a["hello"] = "mike"
681
- @@coll.save(a)
682
- assert_equal 1, @@coll.count
682
+ @coll.save(a)
683
+ assert_equal 1, @coll.count
683
684
 
684
- assert_equal "mike", @@coll.find_one()["hello"]
685
+ assert_equal "mike", @coll.find_one()["hello"]
685
686
 
686
- @@coll.save({"hello" => "world"})
687
- assert_equal 2, @@coll.count
687
+ @coll.save({"hello" => "world"})
688
+ assert_equal 2, @coll.count
688
689
  end
689
690
 
690
691
  def test_save_long
691
- @@coll.remove
692
- @@coll.insert("x" => 9223372036854775807)
693
- assert_equal 9223372036854775807, @@coll.find_one()["x"]
692
+ @coll.remove
693
+ @coll.insert("x" => 9223372036854775807)
694
+ assert_equal 9223372036854775807, @coll.find_one()["x"]
694
695
  end
695
696
 
696
697
  def test_find_by_oid
697
- @@coll.remove
698
+ @coll.remove
698
699
 
699
- @@coll.save("hello" => "mike")
700
- id = @@coll.save("hello" => "world")
700
+ @coll.save("hello" => "mike")
701
+ id = @coll.save("hello" => "world")
701
702
  assert_kind_of ObjectId, id
702
703
 
703
- assert_equal "world", @@coll.find_one(:_id => id)["hello"]
704
- @@coll.find(:_id => id).to_a.each do |doc|
704
+ assert_equal "world", @coll.find_one(:_id => id)["hello"]
705
+ @coll.find(:_id => id).to_a.each do |doc|
705
706
  assert_equal "world", doc["hello"]
706
707
  end
707
708
 
708
709
  id = ObjectId.from_string(id.to_s)
709
- assert_equal "world", @@coll.find_one(:_id => id)["hello"]
710
+ assert_equal "world", @coll.find_one(:_id => id)["hello"]
710
711
  end
711
712
 
712
713
  def test_save_with_object_that_has_id_but_does_not_actually_exist_in_collection
713
- @@coll.remove
714
+ @coll.remove
714
715
 
715
716
  a = {'_id' => '1', 'hello' => 'world'}
716
- @@coll.save(a)
717
- assert_equal(1, @@coll.count)
718
- assert_equal("world", @@coll.find_one()["hello"])
717
+ @coll.save(a)
718
+ assert_equal(1, @coll.count)
719
+ assert_equal("world", @coll.find_one()["hello"])
719
720
 
720
721
  a["hello"] = "mike"
721
- @@coll.save(a)
722
- assert_equal(1, @@coll.count)
723
- assert_equal("mike", @@coll.find_one()["hello"])
722
+ @coll.save(a)
723
+ assert_equal(1, @coll.count)
724
+ assert_equal("mike", @coll.find_one()["hello"])
724
725
  end
725
726
 
726
727
  def test_collection_names_errors
727
728
  assert_raise TypeError do
728
- @@db.collection(5)
729
+ @db.collection(5)
729
730
  end
730
731
  assert_raise Mongo::InvalidNSName do
731
- @@db.collection("")
732
+ @db.collection("")
732
733
  end
733
734
  assert_raise Mongo::InvalidNSName do
734
- @@db.collection("te$t")
735
+ @db.collection("te$t")
735
736
  end
736
737
  assert_raise Mongo::InvalidNSName do
737
- @@db.collection(".test")
738
+ @db.collection(".test")
738
739
  end
739
740
  assert_raise Mongo::InvalidNSName do
740
- @@db.collection("test.")
741
+ @db.collection("test.")
741
742
  end
742
743
  assert_raise Mongo::InvalidNSName do
743
- @@db.collection("tes..t")
744
+ @db.collection("tes..t")
744
745
  end
745
746
  end
746
747
 
747
748
  def test_rename_collection
748
- @@db.drop_collection("foo")
749
- @@db.drop_collection("bar")
750
- a = @@db.collection("foo")
751
- b = @@db.collection("bar")
749
+ @db.drop_collection("foo")
750
+ @db.drop_collection("bar")
751
+ a = @db.collection("foo")
752
+ b = @db.collection("bar")
752
753
 
753
754
  assert_raise TypeError do
754
755
  a.rename(5)
@@ -784,9 +785,9 @@ HERE
784
785
 
785
786
  # doesn't really test functionality, just that the option is set correctly
786
787
  def test_snapshot
787
- @@db.collection("test").find({}, :snapshot => true).to_a
788
+ @db.collection("test").find({}, :snapshot => true).to_a
788
789
  assert_raise OperationFailure do
789
- @@db.collection("test").find({}, :snapshot => true, :sort => 'a').to_a
790
+ @db.collection("test").find({}, :snapshot => true, :sort => 'a').to_a
790
791
  end
791
792
  end
792
793
 
@@ -807,9 +808,9 @@ HERE
807
808
  assert_equal "UTF-8", utf8.encoding.name
808
809
  assert_equal "ISO-8859-1", iso8859.encoding.name
809
810
 
810
- @@coll.remove
811
- @@coll.save("default" => default, "utf8" => utf8, "iso8859" => iso8859)
812
- doc = @@coll.find_one()
811
+ @coll.remove
812
+ @coll.save("default" => default, "utf8" => utf8, "iso8859" => iso8859)
813
+ doc = @coll.find_one()
813
814
 
814
815
  assert_equal "UTF-8", doc["default"].encoding.name
815
816
  assert_equal "UTF-8", doc["utf8"].encoding.name