mongo 1.7.1 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +124 -111
- data/Rakefile +9 -325
- data/VERSION +1 -0
- data/bin/mongo_console +4 -4
- data/examples/admin.rb +43 -0
- data/examples/capped.rb +22 -0
- data/examples/cursor.rb +48 -0
- data/examples/gridfs.rb +44 -0
- data/examples/index_test.rb +126 -0
- data/examples/info.rb +31 -0
- data/examples/queries.rb +74 -0
- data/examples/replica_set.rb +26 -0
- data/examples/simple.rb +25 -0
- data/examples/strict.rb +35 -0
- data/examples/types.rb +36 -0
- data/{test/load → examples/web}/thin/load.rb +3 -1
- data/{test/load → examples/web}/unicorn/load.rb +5 -3
- data/lib/mongo.rb +8 -10
- data/lib/mongo/collection.rb +134 -114
- data/lib/mongo/cursor.rb +21 -14
- data/lib/mongo/db.rb +30 -28
- data/lib/mongo/exceptions.rb +1 -1
- data/lib/mongo/gridfs/grid.rb +8 -7
- data/lib/mongo/gridfs/grid_ext.rb +1 -1
- data/lib/mongo/gridfs/grid_file_system.rb +6 -5
- data/lib/mongo/gridfs/grid_io.rb +22 -19
- data/lib/mongo/legacy.rb +82 -0
- data/lib/mongo/{connection.rb → mongo_client.rb} +82 -61
- data/lib/mongo/{repl_set_connection.rb → mongo_replica_set_client.rb} +54 -39
- data/lib/mongo/{sharded_connection.rb → mongo_sharded_client.rb} +9 -9
- data/lib/mongo/networking.rb +25 -20
- data/lib/mongo/util/conversions.rb +1 -1
- data/lib/mongo/util/core_ext.rb +1 -1
- data/lib/mongo/util/logging.rb +20 -4
- data/lib/mongo/util/node.rb +16 -16
- data/lib/mongo/util/pool.rb +56 -27
- data/lib/mongo/util/pool_manager.rb +28 -27
- data/lib/mongo/util/server_version.rb +1 -1
- data/lib/mongo/util/sharding_pool_manager.rb +8 -8
- data/lib/mongo/util/ssl_socket.rb +1 -5
- data/lib/mongo/util/support.rb +24 -8
- data/lib/mongo/util/tcp_socket.rb +0 -4
- data/lib/mongo/util/uri_parser.rb +54 -38
- data/lib/mongo/util/write_concern.rb +67 -0
- data/mongo.gemspec +21 -32
- data/test/auxillary/{1.4_features.rb → 1.4_feature_test.rb} +4 -5
- data/test/auxillary/authentication_test.rb +18 -20
- data/test/auxillary/autoreconnect_test.rb +3 -5
- data/test/auxillary/fork_test.rb +5 -7
- data/test/auxillary/repl_set_auth_test.rb +13 -15
- data/test/auxillary/slave_connection_test.rb +8 -7
- data/test/auxillary/threaded_authentication_test.rb +15 -17
- data/test/bson/binary_test.rb +1 -1
- data/test/bson/bson_test.rb +60 -36
- data/test/bson/byte_buffer_test.rb +1 -1
- data/test/bson/hash_with_indifferent_access_test.rb +2 -2
- data/test/bson/json_test.rb +1 -2
- data/test/bson/object_id_test.rb +1 -2
- data/test/bson/ordered_hash_test.rb +1 -1
- data/test/bson/timestamp_test.rb +1 -1
- data/test/{collection_test.rb → functional/collection_test.rb} +57 -57
- data/test/{connection_test.rb → functional/connection_test.rb} +75 -89
- data/test/{conversions_test.rb → functional/conversions_test.rb} +1 -1
- data/test/{cursor_fail_test.rb → functional/cursor_fail_test.rb} +3 -29
- data/test/{cursor_message_test.rb → functional/cursor_message_test.rb} +1 -1
- data/test/{cursor_test.rb → functional/cursor_test.rb} +5 -1
- data/test/{db_api_test.rb → functional/db_api_test.rb} +8 -9
- data/test/{db_connection_test.rb → functional/db_connection_test.rb} +3 -5
- data/test/{db_test.rb → functional/db_test.rb} +13 -13
- data/test/{grid_file_system_test.rb → functional/grid_file_system_test.rb} +2 -2
- data/test/{grid_io_test.rb → functional/grid_io_test.rb} +6 -6
- data/test/{grid_test.rb → functional/grid_test.rb} +4 -10
- data/test/{pool_test.rb → functional/pool_test.rb} +1 -1
- data/test/functional/safe_test.rb +84 -0
- data/test/{support_test.rb → functional/support_test.rb} +1 -1
- data/test/{threading_test.rb → functional/threading_test.rb} +9 -9
- data/test/{timeout_test.rb → functional/timeout_test.rb} +1 -1
- data/test/{uri_test.rb → functional/uri_test.rb} +1 -1
- data/test/functional/write_concern_test.rb +104 -0
- data/test/replica_set/basic_test.rb +139 -0
- data/test/replica_set/client_test.rb +255 -0
- data/test/replica_set/complex_connect_test.rb +62 -0
- data/test/replica_set/connection_test.rb +255 -0
- data/test/{replica_sets → replica_set}/count_test.rb +17 -14
- data/test/replica_set/cursor_test.rb +75 -0
- data/test/{replica_sets → replica_set}/insert_test.rb +19 -16
- data/test/replica_set/query_test.rb +64 -0
- data/test/replica_set/refresh_test.rb +153 -0
- data/test/{replica_sets → replica_set}/replication_ack_test.rb +21 -17
- data/test/sharded_cluster/basic_test.rb +31 -50
- data/test/support/hash_with_indifferent_access.rb +1 -1
- data/test/test_helper.rb +56 -9
- data/test/threading/threading_with_large_pool_test.rb +8 -8
- data/test/tools/mongo_config.rb +270 -58
- data/test/tools/mongo_config_test.rb +146 -0
- data/test/unit/client_test.rb +230 -0
- data/test/unit/collection_test.rb +45 -32
- data/test/unit/connection_test.rb +82 -74
- data/test/unit/cursor_test.rb +14 -6
- data/test/unit/db_test.rb +8 -8
- data/test/unit/grid_test.rb +11 -11
- data/test/unit/node_test.rb +24 -24
- data/test/unit/pool_manager_test.rb +13 -13
- data/test/unit/pool_test.rb +1 -1
- data/test/unit/read_test.rb +21 -26
- data/test/unit/safe_test.rb +52 -33
- data/test/unit/util_test.rb +55 -0
- data/test/unit/write_concern_test.rb +161 -0
- metadata +158 -171
- data/docs/CREDITS.md +0 -123
- data/docs/FAQ.md +0 -116
- data/docs/GRID_FS.md +0 -158
- data/docs/HISTORY.md +0 -392
- data/docs/READ_PREFERENCE.md +0 -99
- data/docs/RELEASES.md +0 -54
- data/docs/REPLICA_SETS.md +0 -113
- data/docs/TAILABLE_CURSORS.md +0 -51
- data/docs/TUTORIAL.md +0 -356
- data/docs/WRITE_CONCERN.md +0 -31
- data/lib/mongo/gridfs/grid_io_fix.rb +0 -38
- data/lib/mongo/version.rb +0 -3
- data/test/bson/test_helper.rb +0 -30
- data/test/replica_sets/basic_test.rb +0 -119
- data/test/replica_sets/complex_connect_test.rb +0 -57
- data/test/replica_sets/complex_read_preference_test.rb +0 -237
- data/test/replica_sets/connect_test.rb +0 -156
- data/test/replica_sets/cursor_test.rb +0 -70
- data/test/replica_sets/pooled_insert_test.rb +0 -57
- data/test/replica_sets/query_test.rb +0 -50
- data/test/replica_sets/read_preference_test.rb +0 -234
- data/test/replica_sets/refresh_test.rb +0 -156
- data/test/replica_sets/refresh_with_threads_test.rb +0 -60
- data/test/replica_sets/rs_test_helper.rb +0 -39
- data/test/safe_test.rb +0 -68
- data/test/sharded_cluster/mongo_config_test.rb +0 -126
- data/test/sharded_cluster/sc_test_helper.rb +0 -39
- data/test/tools/repl_set_manager.rb +0 -418
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding:utf-8
|
2
|
-
require
|
3
|
-
require '
|
2
|
+
require 'test_helper'
|
3
|
+
require 'support/hash_with_indifferent_access'
|
4
4
|
|
5
5
|
class HashWithIndifferentAccessTest < Test::Unit::TestCase
|
6
6
|
include BSON
|
data/test/bson/json_test.rb
CHANGED
data/test/bson/object_id_test.rb
CHANGED
data/test/bson/timestamp_test.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.expand_path("../test_helper", __FILE__)
|
2
1
|
require 'rbconfig'
|
2
|
+
require 'test_helper'
|
3
3
|
|
4
4
|
class TestCollection < Test::Unit::TestCase
|
5
|
-
@@
|
6
|
-
@@db
|
7
|
-
@@test
|
8
|
-
@@version
|
5
|
+
@@client ||= standard_connection(:op_timeout => 10)
|
6
|
+
@@db = @@client.db(MONGO_TEST_DB)
|
7
|
+
@@test = @@db.collection("test")
|
8
|
+
@@version = @@client.server_version
|
9
9
|
|
10
10
|
def setup
|
11
11
|
@@test.remove
|
@@ -28,8 +28,8 @@ class TestCollection < Test::Unit::TestCase
|
|
28
28
|
assert_equal BSON::ObjectId, @coll_default_pk.pk_factory
|
29
29
|
|
30
30
|
# Create a db with a pk_factory.
|
31
|
-
@db =
|
32
|
-
ENV['MONGO_RUBY_DRIVER_PORT'] ||
|
31
|
+
@db = MongoClient.new(ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost',
|
32
|
+
ENV['MONGO_RUBY_DRIVER_PORT'] || MongoClient::DEFAULT_PORT).db(MONGO_TEST_DB, :pk => Object.new)
|
33
33
|
@coll = @db.collection('coll-with-pk')
|
34
34
|
assert @coll.pk_factory.is_a?(Object)
|
35
35
|
|
@@ -92,23 +92,23 @@ class TestCollection < Test::Unit::TestCase
|
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_nil_id
|
95
|
-
assert_equal 5, @@test.insert({"_id" => 5, "foo" => "bar"}
|
96
|
-
assert_equal 5, @@test.save({"_id" => 5, "foo" => "baz"}
|
95
|
+
assert_equal 5, @@test.insert({"_id" => 5, "foo" => "bar"})
|
96
|
+
assert_equal 5, @@test.save({"_id" => 5, "foo" => "baz"})
|
97
97
|
assert_equal nil, @@test.find_one("foo" => "bar")
|
98
98
|
assert_equal "baz", @@test.find_one(:_id => 5)["foo"]
|
99
99
|
assert_raise OperationFailure do
|
100
|
-
@@test.insert({"_id" => 5, "foo" => "bar"}
|
100
|
+
@@test.insert({"_id" => 5, "foo" => "bar"})
|
101
101
|
end
|
102
102
|
|
103
|
-
assert_equal nil, @@test.insert({"_id" => nil, "foo" => "bar"}
|
104
|
-
assert_equal nil, @@test.save({"_id" => nil, "foo" => "baz"}
|
103
|
+
assert_equal nil, @@test.insert({"_id" => nil, "foo" => "bar"})
|
104
|
+
assert_equal nil, @@test.save({"_id" => nil, "foo" => "baz"})
|
105
105
|
assert_equal nil, @@test.find_one("foo" => "bar")
|
106
106
|
assert_equal "baz", @@test.find_one(:_id => nil)["foo"]
|
107
107
|
assert_raise OperationFailure do
|
108
|
-
@@test.insert({"_id" => nil, "foo" => "bar"}
|
108
|
+
@@test.insert({"_id" => nil, "foo" => "bar"})
|
109
109
|
end
|
110
110
|
assert_raise OperationFailure do
|
111
|
-
@@test.insert({:_id => nil, "foo" => "bar"}
|
111
|
+
@@test.insert({:_id => nil, "foo" => "bar"})
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -146,11 +146,11 @@ class TestCollection < Test::Unit::TestCase
|
|
146
146
|
@@test.create_index("hello", :unique => true)
|
147
147
|
a = {"hello" => "world"}
|
148
148
|
@@test.insert(a)
|
149
|
-
@@test.insert(a)
|
149
|
+
@@test.insert(a, :w => 0)
|
150
150
|
assert(@@db.get_last_error['err'].include?("11000"))
|
151
151
|
|
152
152
|
assert_raise OperationFailure do
|
153
|
-
@@test.insert(a
|
153
|
+
@@test.insert(a)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -174,7 +174,7 @@ class TestCollection < Test::Unit::TestCase
|
|
174
174
|
docs << {:foo => 2}
|
175
175
|
docs << {:foo => 3}
|
176
176
|
assert_raise OperationFailure do
|
177
|
-
@@test.insert(docs
|
177
|
+
@@test.insert(docs)
|
178
178
|
end
|
179
179
|
assert_equal 1, @@test.count
|
180
180
|
@@test.remove
|
@@ -185,7 +185,7 @@ class TestCollection < Test::Unit::TestCase
|
|
185
185
|
docs << {:foo => 2}
|
186
186
|
docs << {:foo => 3}
|
187
187
|
assert_raise OperationFailure do
|
188
|
-
@@test.insert(docs, :
|
188
|
+
@@test.insert(docs, :continue_on_error => true)
|
189
189
|
end
|
190
190
|
assert_equal 3, @@test.count
|
191
191
|
|
@@ -255,26 +255,26 @@ class TestCollection < Test::Unit::TestCase
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
if @@version >= "1.5.1"
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
end
|
258
|
+
#if @@version >= "1.5.1"
|
259
|
+
# def test_safe_mode_with_advanced_safe_with_invalid_options
|
260
|
+
# assert_raise_error ArgumentError, "Unknown key(s): wtime" do
|
261
|
+
# @@test.insert({:foo => 1}, :w => 2, :wtime => 1, :fsync => true)
|
262
|
+
# end
|
263
|
+
# assert_raise_error ArgumentError, "Unknown key(s): wtime" do
|
264
|
+
# @@test.update({:foo => 1}, {:foo => 2}, :w => 2, :wtime => 1, :fsync => true)
|
265
|
+
# end
|
266
|
+
#
|
267
|
+
# assert_raise_error ArgumentError, "Unknown key(s): wtime" do
|
268
|
+
# @@test.remove({:foo => 2}, :w => 2, :wtime => 1, :fsync => true)
|
269
|
+
# end
|
270
|
+
# end
|
271
|
+
#end
|
272
272
|
|
273
273
|
if @@version >= "2.0.0"
|
274
274
|
def test_safe_mode_with_journal_commit_option
|
275
|
-
@@test.insert({:foo => 1}, :
|
276
|
-
@@test.update({:foo => 1}, {:foo => 2}, :
|
277
|
-
@@test.remove({:foo => 2}, :
|
275
|
+
@@test.insert({:foo => 1}, :j => true)
|
276
|
+
@@test.update({:foo => 1}, {:foo => 2}, :j => true)
|
277
|
+
@@test.remove({:foo => 2}, :j => true)
|
278
278
|
end
|
279
279
|
end
|
280
280
|
|
@@ -332,7 +332,7 @@ class TestCollection < Test::Unit::TestCase
|
|
332
332
|
|
333
333
|
# Can't change an index.
|
334
334
|
assert_raise OperationFailure do
|
335
|
-
@@test.update({}, {"$inc" => {"x" => 1}}
|
335
|
+
@@test.update({}, {"$inc" => {"x" => 1}})
|
336
336
|
end
|
337
337
|
@@test.drop
|
338
338
|
end
|
@@ -348,7 +348,7 @@ class TestCollection < Test::Unit::TestCase
|
|
348
348
|
|
349
349
|
# Can't duplicate an index.
|
350
350
|
assert_raise OperationFailure do
|
351
|
-
@@test.update({}, {"x" => 10}
|
351
|
+
@@test.update({}, {"x" => 10})
|
352
352
|
end
|
353
353
|
@@test.drop
|
354
354
|
end
|
@@ -358,39 +358,39 @@ class TestCollection < Test::Unit::TestCase
|
|
358
358
|
@@test.create_index("hello", :unique => true)
|
359
359
|
|
360
360
|
@@test.save("hello" => "world")
|
361
|
-
@@test.save("hello" => "world")
|
361
|
+
@@test.save({"hello" => "world"}, :w => 0)
|
362
362
|
|
363
363
|
assert_raise OperationFailure do
|
364
|
-
@@test.save({"hello" => "world"}
|
364
|
+
@@test.save({"hello" => "world"})
|
365
365
|
end
|
366
366
|
@@test.drop
|
367
367
|
end
|
368
368
|
|
369
369
|
def test_mocked_safe_remove
|
370
|
-
@
|
371
|
-
@db = @
|
370
|
+
@client = standard_connection
|
371
|
+
@db = @client[MONGO_TEST_DB]
|
372
372
|
@test = @db['test-safe-remove']
|
373
373
|
@test.save({:a => 20})
|
374
|
-
@
|
374
|
+
@client.stubs(:receive).returns([[{'ok' => 0, 'err' => 'failed'}], 1, 0])
|
375
375
|
|
376
376
|
assert_raise OperationFailure do
|
377
|
-
@test.remove({}
|
377
|
+
@test.remove({})
|
378
378
|
end
|
379
379
|
@test.drop
|
380
380
|
end
|
381
381
|
|
382
382
|
def test_safe_remove
|
383
|
-
@
|
384
|
-
@db = @
|
383
|
+
@client = standard_connection
|
384
|
+
@db = @client[MONGO_TEST_DB]
|
385
385
|
@test = @db['test-safe-remove']
|
386
386
|
@test.remove
|
387
387
|
@test.save({:a => 50})
|
388
|
-
assert_equal 1, @test.remove({}
|
388
|
+
assert_equal 1, @test.remove({})["n"]
|
389
389
|
@test.drop
|
390
390
|
end
|
391
391
|
|
392
392
|
def test_remove_return_value
|
393
|
-
assert_equal true, @@test.remove({})
|
393
|
+
assert_equal true, @@test.remove({}, :w => 0)
|
394
394
|
end
|
395
395
|
|
396
396
|
def test_count
|
@@ -542,7 +542,7 @@ class TestCollection < Test::Unit::TestCase
|
|
542
542
|
"_id" => 1,
|
543
543
|
"title" => "this is my title",
|
544
544
|
"author" => "bob",
|
545
|
-
"posted" => Time.utc(
|
545
|
+
"posted" => Time.utc(2000),
|
546
546
|
"pageViews" => 5 ,
|
547
547
|
"tags" => [ "fun" , "good" , "fun" ],
|
548
548
|
"comments" => [
|
@@ -556,7 +556,7 @@ class TestCollection < Test::Unit::TestCase
|
|
556
556
|
"_id" => 2,
|
557
557
|
"title" => "this is your title",
|
558
558
|
"author" => "dave",
|
559
|
-
"posted" => Time.utc(
|
559
|
+
"posted" => Time.utc(2001),
|
560
560
|
"pageViews" => 7,
|
561
561
|
"tags" => [ "fun" , "nasty" ],
|
562
562
|
"comments" => [
|
@@ -570,7 +570,7 @@ class TestCollection < Test::Unit::TestCase
|
|
570
570
|
"_id" => 3,
|
571
571
|
"title" => "this is some other title",
|
572
572
|
"author" => "jane",
|
573
|
-
"posted" => Time.utc(
|
573
|
+
"posted" => Time.utc(2002),
|
574
574
|
"pageViews" => 6 ,
|
575
575
|
"tags" => [ "nasty", "filthy" ],
|
576
576
|
"comments" => [
|
@@ -631,25 +631,25 @@ class TestCollection < Test::Unit::TestCase
|
|
631
631
|
|
632
632
|
def test_aggregate_pipeline_unwind
|
633
633
|
setup_aggregate_data
|
634
|
-
desired_results = [ {"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(
|
634
|
+
desired_results = [ {"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
635
635
|
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
636
636
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
637
|
-
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(
|
637
|
+
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
638
638
|
"pageViews"=>5, "tags"=>"good", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
639
639
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
640
|
-
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(
|
640
|
+
{"_id"=>1, "title"=>"this is my title", "author"=>"bob", "posted"=>Time.utc(2000),
|
641
641
|
"pageViews"=>5, "tags"=>"fun", "comments"=>[{"author"=>"joe", "text"=>"this is cool"},
|
642
642
|
{"author"=>"sam", "text"=>"this is bad"}], "other"=>{"foo"=>5 } },
|
643
|
-
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(
|
643
|
+
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(2001),
|
644
644
|
"pageViews"=>7, "tags"=>"fun", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
645
645
|
{"author"=>"jenny", "text"=>"i like to play pinball", "votes"=>10 }], "other"=>{"bar"=>14 } },
|
646
|
-
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(
|
646
|
+
{"_id"=>2, "title"=>"this is your title", "author"=>"dave", "posted"=>Time.utc(2001),
|
647
647
|
"pageViews"=>7, "tags"=>"nasty", "comments"=>[{"author"=>"barbara", "text"=>"this is interesting"},
|
648
648
|
{"author"=>"jenny", "text"=>"i like to play pinball", "votes"=>10 }], "other"=>{"bar"=>14 } },
|
649
|
-
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(
|
649
|
+
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(2002),
|
650
650
|
"pageViews"=>6, "tags"=>"nasty", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
651
651
|
{"author"=>"jenny", "text"=>"can i get that in green?"}], "other"=>{"bar"=>14 } },
|
652
|
-
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(
|
652
|
+
{"_id"=>3, "title"=>"this is some other title", "author"=>"jane", "posted"=>Time.utc(2002),
|
653
653
|
"pageViews"=>6, "tags"=>"filthy", "comments"=>[{"author"=>"will", "text"=>"i don't like the color"},
|
654
654
|
{"author"=>"jenny", "text"=>"can i get that in green?"}], "other"=>{"bar"=>14 } }
|
655
655
|
]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'test_helper'
|
2
2
|
require 'logger'
|
3
3
|
require 'stringio'
|
4
4
|
require 'thread'
|
@@ -9,66 +9,52 @@ class TestConnection < Test::Unit::TestCase
|
|
9
9
|
include BSON
|
10
10
|
|
11
11
|
def setup
|
12
|
-
@
|
12
|
+
@client = standard_connection
|
13
13
|
end
|
14
14
|
|
15
15
|
def teardown
|
16
|
-
@
|
16
|
+
@client.close
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_connection_failure
|
20
20
|
assert_raise Mongo::ConnectionFailure do
|
21
|
-
|
21
|
+
MongoClient.new('localhost', 27347)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
# def test_connection_timeout
|
26
|
-
# passed = false
|
27
|
-
# begin
|
28
|
-
# t0 = Time.now
|
29
|
-
# Mongo::Connection.new('foo.bar', 27017, :connect_timeout => 3)
|
30
|
-
# rescue OperationTimeout
|
31
|
-
# passed = true
|
32
|
-
# t1 = Time.now
|
33
|
-
# end
|
34
|
-
|
35
|
-
# assert passed
|
36
|
-
# assert t1 - t0 < 4
|
37
|
-
# end
|
38
|
-
|
39
25
|
def test_host_port_accessors
|
40
|
-
assert_equal @
|
41
|
-
assert_equal @
|
26
|
+
assert_equal @client.host, TEST_HOST
|
27
|
+
assert_equal @client.port, TEST_PORT
|
42
28
|
end
|
43
29
|
|
44
30
|
def test_server_info
|
45
|
-
server_info = @
|
31
|
+
server_info = @client.server_info
|
46
32
|
assert server_info.keys.include?("version")
|
47
33
|
assert Mongo::Support.ok?(server_info)
|
48
34
|
end
|
49
35
|
|
50
36
|
def test_ping
|
51
|
-
ping = @
|
37
|
+
ping = @client.ping
|
52
38
|
assert ping['ok']
|
53
39
|
end
|
54
40
|
|
55
41
|
def test_connection_uri
|
56
|
-
con =
|
42
|
+
con = MongoClient.from_uri("mongodb://#{host_port}")
|
57
43
|
assert_equal mongo_host, con.primary_pool.host
|
58
44
|
assert_equal mongo_port, con.primary_pool.port
|
59
45
|
end
|
60
46
|
|
61
47
|
def test_uri_with_extra_opts
|
62
|
-
con =
|
48
|
+
con = MongoClient.from_uri("mongodb://#{host_port}", :pool_size => 10, :slave_ok => true)
|
63
49
|
assert_equal 10, con.pool_size
|
64
|
-
|
50
|
+
assert con.slave_ok?
|
65
51
|
end
|
66
52
|
|
67
53
|
def test_env_mongodb_uri
|
68
54
|
begin
|
69
55
|
old_mongodb_uri = ENV['MONGODB_URI']
|
70
56
|
ENV['MONGODB_URI'] = "mongodb://#{host_port}"
|
71
|
-
con =
|
57
|
+
con = MongoClient.new
|
72
58
|
assert_equal mongo_host, con.primary_pool.host
|
73
59
|
assert_equal mongo_port, con.primary_pool.port
|
74
60
|
ensure
|
@@ -80,7 +66,7 @@ class TestConnection < Test::Unit::TestCase
|
|
80
66
|
begin
|
81
67
|
old_mongodb_uri = ENV['MONGODB_URI']
|
82
68
|
ENV['MONGODB_URI'] = "mongodb://#{host_port}"
|
83
|
-
con =
|
69
|
+
con = MongoClient.from_uri
|
84
70
|
assert_equal mongo_host, con.primary_pool.host
|
85
71
|
assert_equal mongo_port, con.primary_pool.port
|
86
72
|
ensure
|
@@ -94,7 +80,7 @@ class TestConnection < Test::Unit::TestCase
|
|
94
80
|
|
95
81
|
old_mongodb_uri = ENV['MONGODB_URI']
|
96
82
|
ENV['MONGODB_URI'] = "mongodb://#{host_port}/#{db_name}"
|
97
|
-
con =
|
83
|
+
con = MongoClient.from_uri
|
98
84
|
db = con.db
|
99
85
|
assert_equal db.name, db_name
|
100
86
|
ensure
|
@@ -108,7 +94,7 @@ class TestConnection < Test::Unit::TestCase
|
|
108
94
|
|
109
95
|
old_mongodb_uri = ENV['MONGODB_URI']
|
110
96
|
ENV['MONGODB_URI'] = "mongodb://#{host_port}/#{db_name}?"
|
111
|
-
con =
|
97
|
+
con = MongoClient.from_uri
|
112
98
|
db = con.db
|
113
99
|
assert_equal db.name, db_name
|
114
100
|
ensure
|
@@ -120,79 +106,79 @@ class TestConnection < Test::Unit::TestCase
|
|
120
106
|
begin
|
121
107
|
old_mongodb_uri = ENV['MONGODB_URI']
|
122
108
|
ENV['MONGODB_URI'] = "mongodb://#{host_port}/"
|
123
|
-
con =
|
109
|
+
con = MongoClient.from_uri
|
124
110
|
db = con.db
|
125
|
-
assert_equal db.name, Mongo::
|
111
|
+
assert_equal db.name, Mongo::MongoClient::DEFAULT_DB_NAME
|
126
112
|
ensure
|
127
113
|
ENV['MONGODB_URI'] = old_mongodb_uri
|
128
114
|
end
|
129
115
|
end
|
130
116
|
|
131
117
|
def test_server_version
|
132
|
-
assert_match(/\d\.\d+(\.\d+)?/, @
|
118
|
+
assert_match(/\d\.\d+(\.\d+)?/, @client.server_version.to_s)
|
133
119
|
end
|
134
120
|
|
135
121
|
def test_invalid_database_names
|
136
|
-
assert_raise TypeError do @
|
122
|
+
assert_raise TypeError do @client.db(4) end
|
137
123
|
|
138
|
-
assert_raise Mongo::InvalidNSName do @
|
139
|
-
assert_raise Mongo::InvalidNSName do @
|
140
|
-
assert_raise Mongo::InvalidNSName do @
|
141
|
-
assert_raise Mongo::InvalidNSName do @
|
142
|
-
assert_raise Mongo::InvalidNSName do @
|
143
|
-
assert_raise Mongo::InvalidNSName do @
|
124
|
+
assert_raise Mongo::InvalidNSName do @client.db('') end
|
125
|
+
assert_raise Mongo::InvalidNSName do @client.db('te$t') end
|
126
|
+
assert_raise Mongo::InvalidNSName do @client.db('te.t') end
|
127
|
+
assert_raise Mongo::InvalidNSName do @client.db('te\\t') end
|
128
|
+
assert_raise Mongo::InvalidNSName do @client.db('te/t') end
|
129
|
+
assert_raise Mongo::InvalidNSName do @client.db('te st') end
|
144
130
|
end
|
145
131
|
|
146
132
|
def test_options_passed_to_db
|
147
133
|
@pk_mock = Object.new
|
148
|
-
db = @
|
134
|
+
db = @client.db('test', :pk => @pk_mock, :strict => true)
|
149
135
|
assert_equal @pk_mock, db.pk_factory
|
150
136
|
assert db.strict?
|
151
137
|
end
|
152
138
|
|
153
139
|
def test_database_info
|
154
|
-
@
|
155
|
-
@
|
140
|
+
@client.drop_database(MONGO_TEST_DB)
|
141
|
+
@client.db(MONGO_TEST_DB).collection('info-test').insert('a' => 1)
|
156
142
|
|
157
|
-
info = @
|
143
|
+
info = @client.database_info
|
158
144
|
assert_not_nil info
|
159
145
|
assert_kind_of Hash, info
|
160
146
|
assert_not_nil info[MONGO_TEST_DB]
|
161
147
|
assert info[MONGO_TEST_DB] > 0
|
162
148
|
|
163
|
-
@
|
149
|
+
@client.drop_database(MONGO_TEST_DB)
|
164
150
|
end
|
165
151
|
|
166
152
|
def test_copy_database
|
167
|
-
@
|
168
|
-
@
|
169
|
-
old_object = @
|
170
|
-
new_object = @
|
153
|
+
@client.db('old').collection('copy-test').insert('a' => 1)
|
154
|
+
@client.copy_database('old', 'new', host_port)
|
155
|
+
old_object = @client.db('old').collection('copy-test').find.next_document
|
156
|
+
new_object = @client.db('new').collection('copy-test').find.next_document
|
171
157
|
assert_equal old_object, new_object
|
172
|
-
@
|
173
|
-
@
|
158
|
+
@client.drop_database('old')
|
159
|
+
@client.drop_database('new')
|
174
160
|
end
|
175
161
|
|
176
162
|
def test_copy_database_with_auth
|
177
|
-
@
|
178
|
-
@
|
163
|
+
@client.db('old').collection('copy-test').insert('a' => 1)
|
164
|
+
@client.db('old').add_user('bob', 'secret')
|
179
165
|
|
180
166
|
assert_raise Mongo::OperationFailure do
|
181
|
-
@
|
167
|
+
@client.copy_database('old', 'new', host_port, 'bob', 'badpassword')
|
182
168
|
end
|
183
169
|
|
184
|
-
result = @
|
170
|
+
result = @client.copy_database('old', 'new', host_port, 'bob', 'secret')
|
185
171
|
assert Mongo::Support.ok?(result)
|
186
172
|
|
187
|
-
@
|
188
|
-
@
|
173
|
+
@client.drop_database('old')
|
174
|
+
@client.drop_database('new')
|
189
175
|
end
|
190
176
|
|
191
177
|
def test_database_names
|
192
|
-
@
|
193
|
-
@
|
178
|
+
@client.drop_database(MONGO_TEST_DB)
|
179
|
+
@client.db(MONGO_TEST_DB).collection('info-test').insert('a' => 1)
|
194
180
|
|
195
|
-
names = @
|
181
|
+
names = @client.database_names
|
196
182
|
assert_not_nil names
|
197
183
|
assert_kind_of Array, names
|
198
184
|
assert names.length >= 1
|
@@ -212,7 +198,7 @@ class TestConnection < Test::Unit::TestCase
|
|
212
198
|
logger = Logger.new(output)
|
213
199
|
logger.level = Logger::DEBUG
|
214
200
|
standard_connection(:logger => logger).db(MONGO_TEST_DB)
|
215
|
-
assert_match(/\(\d
|
201
|
+
assert_match(/\(\d+.\d{1}ms\)/, output.string)
|
216
202
|
assert output.string.include?("admin['$cmd'].find")
|
217
203
|
end
|
218
204
|
|
@@ -228,37 +214,37 @@ class TestConnection < Test::Unit::TestCase
|
|
228
214
|
end
|
229
215
|
|
230
216
|
def test_drop_database
|
231
|
-
db = @
|
217
|
+
db = @client.db('ruby-mongo-will-be-deleted')
|
232
218
|
coll = db.collection('temp')
|
233
219
|
coll.remove
|
234
220
|
coll.insert(:name => 'temp')
|
235
221
|
assert_equal 1, coll.count()
|
236
|
-
assert @
|
222
|
+
assert @client.database_names.include?('ruby-mongo-will-be-deleted')
|
237
223
|
|
238
|
-
@
|
239
|
-
assert !@
|
224
|
+
@client.drop_database('ruby-mongo-will-be-deleted')
|
225
|
+
assert !@client.database_names.include?('ruby-mongo-will-be-deleted')
|
240
226
|
end
|
241
227
|
|
242
228
|
def test_nodes
|
243
229
|
silently do
|
244
|
-
@
|
230
|
+
@client = MongoClient.multi([['foo', 27017], ['bar', 27018]], :connect => false)
|
245
231
|
end
|
246
|
-
seeds = @
|
232
|
+
seeds = @client.seeds
|
247
233
|
assert_equal 2, seeds.length
|
248
234
|
assert_equal ['foo', 27017], seeds[0]
|
249
235
|
assert_equal ['bar', 27018], seeds[1]
|
250
236
|
end
|
251
237
|
|
252
238
|
def test_fsync_lock
|
253
|
-
assert !@
|
254
|
-
@
|
255
|
-
assert @
|
256
|
-
assert [1, true].include?(@
|
257
|
-
assert_match(/unlock/, @
|
239
|
+
assert !@client.locked?
|
240
|
+
@client.lock!
|
241
|
+
assert @client.locked?
|
242
|
+
assert [1, true].include?(@client['admin']['$cmd.sys.inprog'].find_one['fsyncLock'])
|
243
|
+
assert_match(/unlock/, @client.unlock!['info'])
|
258
244
|
unlocked = false
|
259
245
|
counter = 0
|
260
246
|
while counter < 5
|
261
|
-
if @
|
247
|
+
if @client['admin']['$cmd.sys.inprog'].find_one['fsyncLock'].nil?
|
262
248
|
unlocked = true
|
263
249
|
break
|
264
250
|
else
|
@@ -266,7 +252,7 @@ class TestConnection < Test::Unit::TestCase
|
|
266
252
|
counter += 1
|
267
253
|
end
|
268
254
|
end
|
269
|
-
assert !@
|
255
|
+
assert !@client.locked?
|
270
256
|
assert unlocked, "mongod failed to unlock"
|
271
257
|
end
|
272
258
|
|
@@ -287,7 +273,7 @@ class TestConnection < Test::Unit::TestCase
|
|
287
273
|
conn.connect
|
288
274
|
doc = {'n' => 'a' * (conn.max_bson_size)}
|
289
275
|
assert_raise InvalidDocument do
|
290
|
-
assert BSON::BSON_CODER.serialize(doc, false, true, @
|
276
|
+
assert BSON::BSON_CODER.serialize(doc, false, true, @client.max_bson_size)
|
291
277
|
end
|
292
278
|
end
|
293
279
|
|
@@ -316,7 +302,7 @@ class TestConnection < Test::Unit::TestCase
|
|
316
302
|
dropped_socket.stub_everything
|
317
303
|
|
318
304
|
conn.primary_pool.host = 'localhost'
|
319
|
-
conn.primary_pool.port = Mongo::
|
305
|
+
conn.primary_pool.port = Mongo::MongoClient::DEFAULT_PORT
|
320
306
|
conn.primary_pool.instance_variable_set("@pids", {dropped_socket => Process.pid})
|
321
307
|
conn.primary_pool.instance_variable_set("@sockets", [dropped_socket])
|
322
308
|
|
@@ -325,37 +311,37 @@ class TestConnection < Test::Unit::TestCase
|
|
325
311
|
|
326
312
|
context "Saved authentications" do
|
327
313
|
setup do
|
328
|
-
@
|
314
|
+
@client = standard_connection
|
329
315
|
@auth = {'db_name' => 'test', 'username' => 'bob', 'password' => 'secret'}
|
330
|
-
@
|
316
|
+
@client.add_auth(@auth['db_name'], @auth['username'], @auth['password'])
|
331
317
|
end
|
332
318
|
|
333
319
|
teardown do
|
334
|
-
@
|
320
|
+
@client.clear_auths
|
335
321
|
end
|
336
322
|
|
337
323
|
should "save the authentication" do
|
338
|
-
assert_equal @auth, @
|
324
|
+
assert_equal @auth, @client.auths[0]
|
339
325
|
end
|
340
326
|
|
341
327
|
should "replace the auth if given a new auth for the same db" do
|
342
328
|
auth = {'db_name' => 'test', 'username' => 'mickey', 'password' => 'm0u53'}
|
343
|
-
@
|
344
|
-
assert_equal 1, @
|
345
|
-
assert_equal auth, @
|
329
|
+
@client.add_auth(auth['db_name'], auth['username'], auth['password'])
|
330
|
+
assert_equal 1, @client.auths.length
|
331
|
+
assert_equal auth, @client.auths[0]
|
346
332
|
end
|
347
333
|
|
348
334
|
should "remove auths by database" do
|
349
|
-
@
|
350
|
-
assert_equal 1, @
|
335
|
+
@client.remove_auth('non-existent database')
|
336
|
+
assert_equal 1, @client.auths.length
|
351
337
|
|
352
|
-
@
|
353
|
-
assert_equal 0, @
|
338
|
+
@client.remove_auth('test')
|
339
|
+
assert_equal 0, @client.auths.length
|
354
340
|
end
|
355
341
|
|
356
342
|
should "remove all auths" do
|
357
|
-
@
|
358
|
-
assert_equal 0, @
|
343
|
+
@client.clear_auths
|
344
|
+
assert_equal 0, @client.auths.length
|
359
345
|
end
|
360
346
|
end
|
361
347
|
|
@@ -375,7 +361,7 @@ class TestConnection < Test::Unit::TestCase
|
|
375
361
|
end
|
376
362
|
end
|
377
363
|
|
378
|
-
should "close the connection on
|
364
|
+
should "close the connection on send_message_with_gle for major exceptions" do
|
379
365
|
@con.expects(:checkout_writer).raises(SystemStackError)
|
380
366
|
@con.expects(:close)
|
381
367
|
begin
|