mongo 1.8.6 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +13 -1
- data/VERSION +1 -1
- data/bin/mongo_console +15 -0
- data/lib/mongo.rb +14 -0
- data/lib/mongo/collection.rb +80 -42
- data/lib/mongo/cursor.rb +15 -1
- data/lib/mongo/db.rb +56 -19
- data/lib/mongo/exceptions.rb +14 -0
- data/lib/mongo/gridfs/grid.rb +16 -3
- data/lib/mongo/gridfs/grid_ext.rb +14 -0
- data/lib/mongo/gridfs/grid_file_system.rb +16 -3
- data/lib/mongo/gridfs/grid_io.rb +17 -3
- data/lib/mongo/legacy.rb +14 -0
- data/lib/mongo/mongo_client.rb +93 -40
- data/lib/mongo/mongo_replica_set_client.rb +21 -0
- data/lib/mongo/mongo_sharded_client.rb +15 -1
- data/lib/mongo/networking.rb +14 -0
- data/lib/mongo/util/conversions.rb +16 -2
- data/lib/mongo/util/core_ext.rb +14 -31
- data/lib/mongo/util/logging.rb +23 -7
- data/lib/mongo/util/node.rb +17 -2
- data/lib/mongo/util/pool.rb +17 -1
- data/lib/mongo/util/pool_manager.rb +15 -2
- data/lib/mongo/util/read_preference.rb +14 -0
- data/lib/mongo/util/server_version.rb +15 -0
- data/lib/mongo/util/sharding_pool_manager.rb +13 -0
- data/lib/mongo/util/socket_util.rb +14 -0
- data/lib/mongo/util/ssl_socket.rb +48 -7
- data/lib/mongo/util/support.rb +14 -0
- data/lib/mongo/util/tcp_socket.rb +18 -4
- data/lib/mongo/util/thread_local_variable_manager.rb +14 -0
- data/lib/mongo/util/unix_socket.rb +20 -6
- data/lib/mongo/util/uri_parser.rb +16 -8
- data/lib/mongo/util/write_concern.rb +16 -2
- data/test/functional/authentication_test.rb +26 -1
- data/test/functional/collection_test.rb +140 -41
- data/test/functional/connection_test.rb +19 -6
- data/test/functional/conversions_test.rb +14 -0
- data/test/functional/cursor_fail_test.rb +14 -0
- data/test/functional/cursor_message_test.rb +14 -0
- data/test/functional/cursor_test.rb +15 -1
- data/test/functional/db_api_test.rb +15 -1
- data/test/functional/db_connection_test.rb +14 -0
- data/test/functional/db_test.rb +14 -0
- data/test/functional/grid_file_system_test.rb +16 -4
- data/test/functional/grid_io_test.rb +14 -0
- data/test/functional/grid_test.rb +14 -0
- data/test/functional/pool_test.rb +22 -6
- data/test/functional/safe_test.rb +14 -0
- data/test/functional/ssl_test.rb +109 -0
- data/test/functional/support_test.rb +14 -0
- data/test/functional/threading_test.rb +22 -8
- data/test/functional/timeout_test.rb +20 -6
- data/test/functional/uri_test.rb +14 -14
- data/test/functional/write_concern_test.rb +14 -0
- data/test/replica_set/authentication_test.rb +28 -2
- data/test/replica_set/basic_test.rb +14 -0
- data/test/replica_set/client_test.rb +14 -0
- data/test/replica_set/complex_connect_test.rb +14 -0
- data/test/replica_set/connection_test.rb +14 -0
- data/test/replica_set/count_test.rb +14 -0
- data/test/replica_set/cursor_test.rb +14 -0
- data/test/replica_set/insert_test.rb +14 -0
- data/test/replica_set/max_values_test.rb +14 -0
- data/test/replica_set/pinning_test.rb +14 -0
- data/test/replica_set/query_test.rb +14 -0
- data/test/replica_set/read_preference_test.rb +14 -0
- data/test/replica_set/refresh_test.rb +14 -0
- data/test/replica_set/replication_ack_test.rb +14 -0
- data/test/replica_set/ssl_test.rb +114 -0
- data/test/sharded_cluster/basic_test.rb +14 -0
- data/test/shared/authentication.rb +55 -0
- data/test/test_helper.rb +15 -1
- data/test/threading/basic_test.rb +14 -0
- data/test/tools/mongo_config.rb +16 -1
- data/test/tools/mongo_config_test.rb +15 -1
- data/test/unit/client_test.rb +14 -0
- data/test/unit/collection_test.rb +14 -0
- data/test/unit/connection_test.rb +14 -0
- data/test/unit/cursor_test.rb +14 -0
- data/test/unit/db_test.rb +15 -1
- data/test/unit/grid_test.rb +14 -0
- data/test/unit/mongo_sharded_client_test.rb +14 -0
- data/test/unit/node_test.rb +15 -0
- data/test/unit/pool_manager_test.rb +15 -0
- data/test/unit/pool_test.rb +14 -0
- data/test/unit/read_pref_test.rb +14 -0
- data/test/unit/read_test.rb +14 -0
- data/test/unit/safe_test.rb +14 -0
- data/test/unit/sharding_pool_manager_test.rb +15 -0
- data/test/unit/util_test.rb +14 -0
- data/test/unit/write_concern_test.rb +15 -1
- metadata +8 -4
- metadata.gz.sig +0 -0
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
1
15
|
require 'cgi'
|
2
16
|
|
3
17
|
module Mongo
|
@@ -225,7 +239,7 @@ module Mongo
|
|
225
239
|
end
|
226
240
|
|
227
241
|
if @slaveok && !@readpreference
|
228
|
-
|
242
|
+
unless replicaset?
|
229
243
|
opts[:slave_ok] = true
|
230
244
|
else
|
231
245
|
opts[:read] = :secondary_preferred
|
@@ -233,10 +247,7 @@ module Mongo
|
|
233
247
|
end
|
234
248
|
|
235
249
|
opts[:ssl] = @ssl
|
236
|
-
|
237
|
-
if direct?
|
238
|
-
opts[:auths] = auths
|
239
|
-
end
|
250
|
+
opts[:auths] = auths
|
240
251
|
|
241
252
|
if replicaset.is_a?(String)
|
242
253
|
opts[:name] = replicaset
|
@@ -290,9 +301,6 @@ module Mongo
|
|
290
301
|
raise MongoArgumentError, "MongoDB URI must include username, password, "
|
291
302
|
"and db if username and password are specified."
|
292
303
|
end
|
293
|
-
|
294
|
-
# The auths are repeated for each host in a replica set
|
295
|
-
@auths *= hosturis.length
|
296
304
|
end
|
297
305
|
|
298
306
|
# This method uses the lambdas defined in OPT_VALID and OPT_CONV to validate
|
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
1
15
|
module Mongo
|
2
16
|
module WriteConcern
|
3
17
|
|
@@ -29,7 +43,7 @@ module Mongo
|
|
29
43
|
|
30
44
|
# todo: throw exception for conflicting write concern options
|
31
45
|
def get_write_concern(opts, parent=nil)
|
32
|
-
write_concern_from_legacy(opts) if opts.key?(:safe) ||
|
46
|
+
write_concern_from_legacy(opts) if opts.key?(:safe) || legacy_write_concern
|
33
47
|
write_concern = {
|
34
48
|
:w => 1,
|
35
49
|
:j => false,
|
@@ -51,4 +65,4 @@ module Mongo
|
|
51
65
|
end
|
52
66
|
|
53
67
|
end
|
54
|
-
end
|
68
|
+
end
|
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
1
15
|
require 'test_helper'
|
2
16
|
require 'shared/authentication'
|
3
17
|
|
@@ -13,6 +27,17 @@ class AuthenticationTest < Test::Unit::TestCase
|
|
13
27
|
|
14
28
|
def test_authenticate_with_connection_uri
|
15
29
|
@db.add_user('eunice', 'uritest')
|
16
|
-
|
30
|
+
|
31
|
+
client =
|
32
|
+
MongoClient.from_uri("mongodb://eunice:uritest@#{host_port}/#{@db.name}")
|
33
|
+
|
34
|
+
assert client
|
35
|
+
assert_equal client.auths.size, 1
|
36
|
+
assert client[MONGO_TEST_DB]['auth_test'].count
|
37
|
+
|
38
|
+
auth = client.auths.first
|
39
|
+
assert_equal @db.name, auth[:db_name]
|
40
|
+
assert_equal 'eunice', auth[:username]
|
41
|
+
assert_equal 'uritest', auth[:password]
|
17
42
|
end
|
18
43
|
end
|
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
1
15
|
require 'rbconfig'
|
2
16
|
require 'test_helper'
|
3
17
|
|
@@ -244,6 +258,26 @@ class TestCollection < Test::Unit::TestCase
|
|
244
258
|
assert_equal error_docs, invalid_docs
|
245
259
|
end
|
246
260
|
|
261
|
+
def test_insert_one_error_doc_with_collect_on_error
|
262
|
+
invalid_doc = {'$invalid-key' => 1}
|
263
|
+
invalid_docs = [invalid_doc]
|
264
|
+
doc_ids, error_docs = @@test.insert(invalid_docs, :collect_on_error => true)
|
265
|
+
assert_equal [], doc_ids
|
266
|
+
assert_equal [invalid_doc], error_docs
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_insert_empty_docs_raises_exception
|
270
|
+
assert_raise OperationFailure do
|
271
|
+
@@test.insert([])
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
def test_insert_empty_docs_with_collect_on_error_raises_exception
|
276
|
+
assert_raise OperationFailure do
|
277
|
+
@@test.insert([], :collect_on_error => true)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
247
281
|
def limited_collection
|
248
282
|
conn = standard_connection(:connect => false)
|
249
283
|
admin_db = Object.new
|
@@ -258,28 +292,93 @@ class TestCollection < Test::Unit::TestCase
|
|
258
292
|
return conn.db(MONGO_TEST_DB)["test"]
|
259
293
|
end
|
260
294
|
|
261
|
-
def
|
295
|
+
def test_chunking_batch_insert
|
296
|
+
docs = []
|
297
|
+
10.times do
|
298
|
+
docs << {'foo' => 'a' * 950}
|
299
|
+
end
|
300
|
+
limited_collection.insert(docs)
|
301
|
+
assert_equal 10, limited_collection.count
|
302
|
+
end
|
303
|
+
|
304
|
+
def test_chunking_batch_insert_without_collect_on_error
|
262
305
|
docs = []
|
263
|
-
|
306
|
+
4.times do
|
264
307
|
docs << {'foo' => 'a' * 950}
|
265
308
|
end
|
266
|
-
|
309
|
+
invalid_docs = []
|
310
|
+
invalid_docs << {'$invalid-key' => 1} # non utf8 encoding
|
311
|
+
docs += invalid_docs
|
312
|
+
4.times do
|
313
|
+
docs << {'foo' => 'a' * 950}
|
314
|
+
end
|
315
|
+
assert_raise BSON::InvalidKeyName do
|
316
|
+
limited_collection.insert(docs, :collect_on_error => false)
|
317
|
+
end
|
267
318
|
end
|
268
319
|
|
269
|
-
def
|
270
|
-
|
271
|
-
|
320
|
+
def test_chunking_batch_insert_with_collect_on_error
|
321
|
+
# Broken for current JRuby
|
322
|
+
if RUBY_PLATFORM == 'java' then return end
|
323
|
+
docs = []
|
324
|
+
4.times do
|
325
|
+
docs << {'foo' => 'a' * 950}
|
326
|
+
end
|
327
|
+
invalid_docs = []
|
328
|
+
invalid_docs << {'$invalid-key' => 1} # non utf8 encoding
|
329
|
+
docs += invalid_docs
|
330
|
+
4.times do
|
331
|
+
docs << {'foo' => 'a' * 950}
|
332
|
+
end
|
333
|
+
doc_ids, error_docs = limited_collection.insert(docs, :collect_on_error => true)
|
334
|
+
assert_equal 8, doc_ids.count
|
335
|
+
assert_equal doc_ids.count, limited_collection.count
|
336
|
+
assert_equal error_docs, invalid_docs
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_chunking_batch_insert_with_continue_on_error
|
340
|
+
docs = []
|
341
|
+
4.times do
|
342
|
+
docs << {'foo' => 'a' * 950}
|
343
|
+
end
|
344
|
+
docs << {'_id' => 'b', 'foo' => 'a'}
|
345
|
+
docs << {'_id' => 'b', 'foo' => 'c'}
|
346
|
+
4.times do
|
347
|
+
docs << {'foo' => 'a' * 950}
|
272
348
|
end
|
349
|
+
assert_raise OperationFailure do
|
350
|
+
limited_collection.insert(docs, :continue_on_error => true)
|
351
|
+
end
|
352
|
+
assert_equal 9, limited_collection.count
|
273
353
|
end
|
274
354
|
|
275
|
-
def
|
355
|
+
def test_chunking_batch_insert_without_continue_on_error
|
276
356
|
docs = []
|
277
357
|
4.times do
|
278
358
|
docs << {'foo' => 'a' * 950}
|
279
359
|
end
|
360
|
+
docs << {'_id' => 'b', 'foo' => 'a'}
|
361
|
+
docs << {'_id' => 'b', 'foo' => 'c'}
|
362
|
+
4.times do
|
363
|
+
docs << {'foo' => 'a' * 950}
|
364
|
+
end
|
365
|
+
assert_raise OperationFailure do
|
366
|
+
limited_collection.insert(docs, :continue_on_error => false)
|
367
|
+
end
|
368
|
+
assert_equal 5, limited_collection.count
|
369
|
+
end
|
370
|
+
|
371
|
+
def test_maximum_insert_size
|
372
|
+
docs = []
|
373
|
+
3.times do
|
374
|
+
docs << {'foo' => 'a' * 950}
|
375
|
+
end
|
376
|
+
assert_equal limited_collection.insert(docs).length, 3
|
377
|
+
end
|
280
378
|
|
281
|
-
|
282
|
-
|
379
|
+
def test_maximum_document_size
|
380
|
+
assert_raise InvalidDocument do
|
381
|
+
limited_collection.insert({'foo' => 'a' * 1024})
|
283
382
|
end
|
284
383
|
end
|
285
384
|
|
@@ -629,42 +728,42 @@ class TestCollection < Test::Unit::TestCase
|
|
629
728
|
# save some data
|
630
729
|
@@test.save( {
|
631
730
|
"_id" => 1,
|
632
|
-
"title" => "this is my title",
|
633
|
-
"author" => "bob",
|
731
|
+
"title" => "this is my title",
|
732
|
+
"author" => "bob",
|
634
733
|
"posted" => Time.utc(2000),
|
635
|
-
"pageViews" => 5 ,
|
734
|
+
"pageViews" => 5 ,
|
636
735
|
"tags" => [ "fun" , "good" , "fun" ],
|
637
|
-
"comments" => [
|
638
|
-
{ "author" => "joe", "text" => "this is cool" },
|
639
|
-
{ "author" => "sam", "text" => "this is bad" }
|
736
|
+
"comments" => [
|
737
|
+
{ "author" => "joe", "text" => "this is cool" },
|
738
|
+
{ "author" => "sam", "text" => "this is bad" }
|
640
739
|
],
|
641
740
|
"other" => { "foo" => 5 }
|
642
741
|
} )
|
643
742
|
|
644
743
|
@@test.save( {
|
645
744
|
"_id" => 2,
|
646
|
-
"title" => "this is your title",
|
647
|
-
"author" => "dave",
|
745
|
+
"title" => "this is your title",
|
746
|
+
"author" => "dave",
|
648
747
|
"posted" => Time.utc(2001),
|
649
|
-
"pageViews" => 7,
|
748
|
+
"pageViews" => 7,
|
650
749
|
"tags" => [ "fun" , "nasty" ],
|
651
|
-
"comments" => [
|
652
|
-
{ "author" => "barbara" , "text" => "this is interesting" },
|
653
|
-
{ "author" => "jenny", "text" => "i like to play pinball", "votes" => 10 }
|
750
|
+
"comments" => [
|
751
|
+
{ "author" => "barbara" , "text" => "this is interesting" },
|
752
|
+
{ "author" => "jenny", "text" => "i like to play pinball", "votes" => 10 }
|
654
753
|
],
|
655
754
|
"other" => { "bar" => 14 }
|
656
755
|
})
|
657
756
|
|
658
757
|
@@test.save( {
|
659
758
|
"_id" => 3,
|
660
|
-
"title" => "this is some other title",
|
661
|
-
"author" => "jane",
|
759
|
+
"title" => "this is some other title",
|
760
|
+
"author" => "jane",
|
662
761
|
"posted" => Time.utc(2002),
|
663
|
-
"pageViews" => 6 ,
|
762
|
+
"pageViews" => 6 ,
|
664
763
|
"tags" => [ "nasty", "filthy" ],
|
665
|
-
"comments" => [
|
666
|
-
{ "author" => "will" , "text" => "i don't like the color" } ,
|
667
|
-
{ "author" => "jenny" , "text" => "can i get that in green?" }
|
764
|
+
"comments" => [
|
765
|
+
{ "author" => "will" , "text" => "i don't like the color" } ,
|
766
|
+
{ "author" => "jenny" , "text" => "can i get that in green?" }
|
668
767
|
],
|
669
768
|
"other" => { "bar" => 14 }
|
670
769
|
})
|
@@ -696,8 +795,8 @@ class TestCollection < Test::Unit::TestCase
|
|
696
795
|
|
697
796
|
def test_aggregate_pipeline_operators_using_strings
|
698
797
|
setup_aggregate_data
|
699
|
-
desired_results = [ {"_id"=>1, "pageViews"=>5, "tags"=>["fun", "good", "fun"]},
|
700
|
-
{"_id"=>2, "pageViews"=>7, "tags"=>["fun", "nasty"]},
|
798
|
+
desired_results = [ {"_id"=>1, "pageViews"=>5, "tags"=>["fun", "good", "fun"]},
|
799
|
+
{"_id"=>2, "pageViews"=>7, "tags"=>["fun", "nasty"]},
|
701
800
|
{"_id"=>3, "pageViews"=>6, "tags"=>["nasty", "filthy"]} ]
|
702
801
|
results = @@test.aggregate([{"$project" => {"tags" => 1, "pageViews" => 1}}])
|
703
802
|
assert_equal desired_results, results
|
@@ -705,8 +804,8 @@ class TestCollection < Test::Unit::TestCase
|
|
705
804
|
|
706
805
|
def test_aggregate_pipeline_operators_using_symbols
|
707
806
|
setup_aggregate_data
|
708
|
-
desired_results = [ {"_id"=>1, "pageViews"=>5, "tags"=>["fun", "good", "fun"]},
|
709
|
-
{"_id"=>2, "pageViews"=>7, "tags"=>["fun", "nasty"]},
|
807
|
+
desired_results = [ {"_id"=>1, "pageViews"=>5, "tags"=>["fun", "good", "fun"]},
|
808
|
+
{"_id"=>2, "pageViews"=>7, "tags"=>["fun", "nasty"]},
|
710
809
|
{"_id"=>3, "pageViews"=>6, "tags"=>["nasty", "filthy"]} ]
|
711
810
|
results = @@test.aggregate([{"$project" => {:tags => 1, :pageViews => 1}}])
|
712
811
|
assert_equal desired_results, results
|
@@ -721,25 +820,25 @@ class TestCollection < Test::Unit::TestCase
|
|
721
820
|
def test_aggregate_pipeline_unwind
|
722
821
|
setup_aggregate_data
|
723
822
|
desired_results = [ {"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
724
|
-
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
823
|
+
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
725
824
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
726
825
|
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
727
|
-
"pageViews"=>5, "tags"=>"good", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
826
|
+
"pageViews"=>5, "tags"=>"good", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
728
827
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
729
828
|
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
730
|
-
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
829
|
+
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
731
830
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
732
831
|
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(2001),
|
733
|
-
"pageViews"=>7, "tags"=>"fun", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
832
|
+
"pageViews"=>7, "tags"=>"fun", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
734
833
|
{"author"=>"jenny", "text"=>"i like to play pinball", "votes"=>10 }], "other"=>{"bar"=>14 } },
|
735
834
|
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(2001),
|
736
|
-
"pageViews"=>7, "tags"=>"nasty", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
835
|
+
"pageViews"=>7, "tags"=>"nasty", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
737
836
|
{"author"=>"jenny", "text"=>"i like to play pinball", "votes"=>10 }], "other"=>{"bar"=>14 } },
|
738
837
|
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(2002),
|
739
|
-
"pageViews"=>6, "tags"=>"nasty", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
838
|
+
"pageViews"=>6, "tags"=>"nasty", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
740
839
|
{"author"=>"jenny", "text"=>"can i get that in green?"}], "other"=>{"bar"=>14 } },
|
741
840
|
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(2002),
|
742
|
-
"pageViews"=>6, "tags"=>"filthy", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
841
|
+
"pageViews"=>6, "tags"=>"filthy", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
743
842
|
{"author"=>"jenny", "text"=>"can i get that in green?"}], "other"=>{"bar"=>14 } }
|
744
843
|
]
|
745
844
|
results = @@test.aggregate([{"$unwind"=> "$tags"}])
|
@@ -1059,7 +1158,7 @@ end
|
|
1059
1158
|
end
|
1060
1159
|
|
1061
1160
|
def test_ensure_index_timeout
|
1062
|
-
@@db.cache_time =
|
1161
|
+
@@db.cache_time = 1
|
1063
1162
|
coll = @@db['ensure_test']
|
1064
1163
|
coll.expects(:generate_indexes).twice
|
1065
1164
|
coll.ensure_index([['a', 1]])
|
@@ -1070,7 +1169,7 @@ end
|
|
1070
1169
|
coll.ensure_index([['a', 1]])
|
1071
1170
|
coll.ensure_index([['a', 1]])
|
1072
1171
|
|
1073
|
-
sleep(
|
1172
|
+
sleep(1)
|
1074
1173
|
# This won't be, so generate_indexes will be called twice
|
1075
1174
|
coll.ensure_index([['a', 1]])
|
1076
1175
|
end
|
@@ -1143,7 +1242,7 @@ end
|
|
1143
1242
|
end
|
1144
1243
|
|
1145
1244
|
context "Grouping with a key function" do
|
1146
|
-
setup do
|
1245
|
+
setup do
|
1147
1246
|
@@test.remove
|
1148
1247
|
@@test.save("a" => 1)
|
1149
1248
|
@@test.save("a" => 2)
|
@@ -1,3 +1,17 @@
|
|
1
|
+
# Copyright (C) 2013 10gen Inc.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
1
15
|
require 'test_helper'
|
2
16
|
require 'logger'
|
3
17
|
require 'stringio'
|
@@ -243,12 +257,11 @@ class TestConnection < Test::Unit::TestCase
|
|
243
257
|
assert_match(/unlock/, @client.unlock!['info'])
|
244
258
|
unlocked = false
|
245
259
|
counter = 0
|
246
|
-
while counter <
|
260
|
+
while counter < 100
|
247
261
|
if @client['admin']['$cmd.sys.inprog'].find_one['fsyncLock'].nil?
|
248
262
|
unlocked = true
|
249
263
|
break
|
250
264
|
else
|
251
|
-
sleep(1)
|
252
265
|
counter += 1
|
253
266
|
end
|
254
267
|
end
|
@@ -336,8 +349,8 @@ class TestConnection < Test::Unit::TestCase
|
|
336
349
|
context "Saved authentications" do
|
337
350
|
setup do
|
338
351
|
@client = standard_connection
|
339
|
-
@auth = {:db_name => 'test', :username => 'bob', :password => 'secret'}
|
340
|
-
@client.add_auth(@auth[:db_name], @auth[:username], @auth[:password])
|
352
|
+
@auth = {:db_name => 'test', :username => 'bob', :password => 'secret', :source => nil}
|
353
|
+
@client.add_auth(@auth[:db_name], @auth[:username], @auth[:password], @auth[:source])
|
341
354
|
end
|
342
355
|
|
343
356
|
teardown do
|
@@ -349,9 +362,9 @@ class TestConnection < Test::Unit::TestCase
|
|
349
362
|
end
|
350
363
|
|
351
364
|
should "not allow multiple authentications for the same db" do
|
352
|
-
auth = {:db_name => 'test', :username => 'mickey', :password => 'm0u53'}
|
365
|
+
auth = {:db_name => 'test', :username => 'mickey', :password => 'm0u53', :source => nil}
|
353
366
|
assert_raise Mongo::MongoArgumentError do
|
354
|
-
@client.add_auth(auth[:db_name], auth[:username], auth[:password])
|
367
|
+
@client.add_auth(auth[:db_name], auth[:username], auth[:password], auth[:source])
|
355
368
|
end
|
356
369
|
end
|
357
370
|
|