jmongo 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +8 -0
- data/Gemfile.lock +43 -0
- data/Rakefile +72 -0
- data/jmongo.gemspec +84 -6
- data/lib/jmongo.rb +6 -14
- data/lib/jmongo/collection.rb +196 -114
- data/lib/jmongo/connection.rb +39 -13
- data/lib/jmongo/cursor.rb +161 -63
- data/lib/jmongo/db.rb +119 -30
- data/lib/jmongo/exceptions.rb +39 -0
- data/lib/jmongo/mongo-2.6.5.gb1.jar +0 -0
- data/lib/jmongo/mongo/bson.rb +130 -0
- data/lib/jmongo/mongo/collection.rb +185 -0
- data/lib/jmongo/mongo/connection.rb +45 -0
- data/lib/jmongo/mongo/db.rb +31 -0
- data/lib/jmongo/mongo/jmongo.rb +44 -0
- data/lib/jmongo/mongo/mongo.rb +98 -0
- data/lib/jmongo/mongo/ruby_ext.rb +38 -0
- data/lib/jmongo/mongo/utils.rb +136 -0
- data/lib/jmongo/version.rb +1 -1
- data/test-results.txt +98 -0
- data/test/auxillary/1.4_features.rb +166 -0
- data/test/auxillary/authentication_test.rb +68 -0
- data/test/auxillary/autoreconnect_test.rb +41 -0
- data/test/auxillary/fork_test.rb +30 -0
- data/test/auxillary/repl_set_auth_test.rb +58 -0
- data/test/auxillary/slave_connection_test.rb +36 -0
- data/test/auxillary/threaded_authentication_test.rb +101 -0
- data/test/bson/binary_test.rb +15 -0
- data/test/bson/bson_test.rb +657 -0
- data/test/bson/byte_buffer_test.rb +208 -0
- data/test/bson/hash_with_indifferent_access_test.rb +38 -0
- data/test/bson/json_test.rb +17 -0
- data/test/bson/object_id_test.rb +138 -0
- data/test/bson/ordered_hash_test.rb +245 -0
- data/test/bson/test_helper.rb +46 -0
- data/test/bson/timestamp_test.rb +46 -0
- data/test/collection_test.rb +933 -0
- data/test/connection_test.rb +325 -0
- data/test/conversions_test.rb +121 -0
- data/test/cursor_fail_test.rb +75 -0
- data/test/cursor_message_test.rb +43 -0
- data/test/cursor_test.rb +547 -0
- data/test/data/empty_data +0 -0
- data/test/data/sample_data +0 -0
- data/test/data/sample_file.pdf +0 -0
- data/test/data/small_data.txt +1 -0
- data/test/db_api_test.rb +739 -0
- data/test/db_connection_test.rb +15 -0
- data/test/db_test.rb +325 -0
- data/test/grid_file_system_test.rb +260 -0
- data/test/grid_io_test.rb +210 -0
- data/test/grid_test.rb +259 -0
- data/test/load/thin/config.ru +6 -0
- data/test/load/thin/config.yml.template +6 -0
- data/test/load/thin/load.rb +24 -0
- data/test/load/unicorn/config.ru +6 -0
- data/test/load/unicorn/load.rb +23 -0
- data/test/load/unicorn/unicorn.rb.template +29 -0
- data/test/replica_sets/connect_test.rb +111 -0
- data/test/replica_sets/connection_string_test.rb +29 -0
- data/test/replica_sets/count_test.rb +36 -0
- data/test/replica_sets/insert_test.rb +54 -0
- data/test/replica_sets/pooled_insert_test.rb +58 -0
- data/test/replica_sets/query_secondaries.rb +109 -0
- data/test/replica_sets/query_test.rb +52 -0
- data/test/replica_sets/read_preference_test.rb +43 -0
- data/test/replica_sets/refresh_test.rb +123 -0
- data/test/replica_sets/replication_ack_test.rb +71 -0
- data/test/replica_sets/rs_test_helper.rb +27 -0
- data/test/safe_test.rb +68 -0
- data/test/support/hash_with_indifferent_access.rb +186 -0
- data/test/support/keys.rb +45 -0
- data/test/support_test.rb +19 -0
- data/test/test_helper.rb +111 -0
- data/test/threading/threading_with_large_pool_test.rb +90 -0
- data/test/threading_test.rb +88 -0
- data/test/tools/auth_repl_set_manager.rb +14 -0
- data/test/tools/keyfile.txt +1 -0
- data/test/tools/repl_set_manager.rb +377 -0
- data/test/unit/collection_test.rb +128 -0
- data/test/unit/connection_test.rb +85 -0
- data/test/unit/cursor_test.rb +127 -0
- data/test/unit/db_test.rb +96 -0
- data/test/unit/grid_test.rb +51 -0
- data/test/unit/node_test.rb +73 -0
- data/test/unit/pool_manager_test.rb +47 -0
- data/test/unit/pool_test.rb +9 -0
- data/test/unit/read_test.rb +101 -0
- data/test/unit/safe_test.rb +125 -0
- data/test/uri_test.rb +92 -0
- metadata +170 -99
- data/lib/jmongo/ajrb.rb +0 -189
- data/lib/jmongo/jmongo_jext.rb +0 -302
- data/lib/jmongo/mongo-2.6.3.jar +0 -0
- data/lib/jmongo/utils.rb +0 -61
@@ -0,0 +1,73 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class NodeTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@connection = stub()
|
7
|
+
end
|
8
|
+
|
9
|
+
should "refuse to connect to node without 'hosts' key" do
|
10
|
+
tcp = mock()
|
11
|
+
node = Node.new(@connection, ['localhost', 27017])
|
12
|
+
tcp.stubs(:new).returns(new_mock_socket)
|
13
|
+
@connection.stubs(:socket_class).returns(tcp)
|
14
|
+
|
15
|
+
admin_db = new_mock_db
|
16
|
+
admin_db.stubs(:command).returns({'ok' => 1, 'ismaster' => 1})
|
17
|
+
@connection.stubs(:[]).with('admin').returns(admin_db)
|
18
|
+
@connection.stubs(:connect_timeout).returns(nil)
|
19
|
+
@connection.expects(:log)
|
20
|
+
|
21
|
+
assert node.connect
|
22
|
+
node.set_config
|
23
|
+
end
|
24
|
+
|
25
|
+
should "load a node from an array" do
|
26
|
+
node = Node.new(@connection, ['power.level.com', 9001])
|
27
|
+
assert_equal 'power.level.com', node.host
|
28
|
+
assert_equal 9001, node.port
|
29
|
+
assert_equal 'power.level.com:9001', node.address
|
30
|
+
end
|
31
|
+
|
32
|
+
should "should default the port for an array" do
|
33
|
+
node = Node.new(@connection, ['power.level.com'])
|
34
|
+
assert_equal 'power.level.com', node.host
|
35
|
+
assert_equal Connection::DEFAULT_PORT, node.port
|
36
|
+
assert_equal "power.level.com:#{Connection::DEFAULT_PORT}", node.address
|
37
|
+
end
|
38
|
+
|
39
|
+
should "load a node from a string" do
|
40
|
+
node = Node.new(@connection, 'localhost:1234')
|
41
|
+
assert_equal 'localhost', node.host
|
42
|
+
assert_equal 1234, node.port
|
43
|
+
assert_equal 'localhost:1234', node.address
|
44
|
+
end
|
45
|
+
|
46
|
+
should "should default the port for a string" do
|
47
|
+
node = Node.new(@connection, '192.168.0.1')
|
48
|
+
assert_equal '192.168.0.1', node.host
|
49
|
+
assert_equal Connection::DEFAULT_PORT, node.port
|
50
|
+
assert_equal "192.168.0.1:#{Connection::DEFAULT_PORT}", node.address
|
51
|
+
end
|
52
|
+
|
53
|
+
should "two nodes with the same address should be equal" do
|
54
|
+
assert_equal Node.new(@connection, '192.168.0.1'),
|
55
|
+
Node.new(@connection, ['192.168.0.1', Connection::DEFAULT_PORT])
|
56
|
+
end
|
57
|
+
|
58
|
+
should "two nodes with the same address should have the same hash" do
|
59
|
+
assert_equal Node.new(@connection, '192.168.0.1').hash,
|
60
|
+
Node.new(@connection, ['192.168.0.1', Connection::DEFAULT_PORT]).hash
|
61
|
+
end
|
62
|
+
|
63
|
+
should "two nodes with different addresses should not be equal" do
|
64
|
+
assert_not_equal Node.new(@connection, '192.168.0.2'),
|
65
|
+
Node.new(@connection, ['192.168.0.1', Connection::DEFAULT_PORT])
|
66
|
+
end
|
67
|
+
|
68
|
+
should "two nodes with the same address should have the same hash negate" do
|
69
|
+
assert_not_equal Node.new(@connection, '192.168.0.1').hash,
|
70
|
+
Node.new(@connection, '1239.33.4.2393:29949').hash
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
include Mongo
|
3
|
+
|
4
|
+
class PoolManagerTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "Initialization: " do
|
7
|
+
|
8
|
+
should "populate pools correctly" do
|
9
|
+
TCPSocket.stubs(:new).returns(new_mock_socket)
|
10
|
+
@db = new_mock_db
|
11
|
+
|
12
|
+
@connection = stub("Connection")
|
13
|
+
@connection.stubs(:connect_timeout).returns(5000)
|
14
|
+
@connection.stubs(:pool_size).returns(2)
|
15
|
+
@connection.stubs(:socket_class).returns(TCPSocket)
|
16
|
+
@connection.stubs(:[]).returns(@db)
|
17
|
+
|
18
|
+
@connection.stubs(:replica_set_name).returns(nil)
|
19
|
+
@connection.stubs(:log)
|
20
|
+
@arbiters = ['localhost:27020']
|
21
|
+
@hosts = ['localhost:27017', 'localhost:27018', 'localhost:27019',
|
22
|
+
'localhost:27020']
|
23
|
+
|
24
|
+
@db.stubs(:command).returns(
|
25
|
+
# First call to get a socket.
|
26
|
+
{'ismaster' => true, 'hosts' => @hosts, 'arbiters' => @arbiters},
|
27
|
+
|
28
|
+
# Subsequent calls to configure pools.
|
29
|
+
{'ismaster' => true, 'hosts' => @hosts, 'arbiters' => @arbiters},
|
30
|
+
{'secondary' => true, 'hosts' => @hosts, 'arbiters' => @arbiters},
|
31
|
+
{'secondary' => true, 'hosts' => @hosts, 'arbiters' => @arbiters},
|
32
|
+
{'arbiterOnly' => true, 'hosts' => @hosts, 'arbiters' => @arbiters})
|
33
|
+
|
34
|
+
seeds = [['localhost', 27017]]
|
35
|
+
manager = Mongo::PoolManager.new(@connection, seeds)
|
36
|
+
manager.connect
|
37
|
+
|
38
|
+
assert_equal ['localhost', 27017], manager.primary
|
39
|
+
assert_equal 27017, manager.primary_pool.port
|
40
|
+
assert_equal 2, manager.secondaries.length
|
41
|
+
assert_equal 27018, manager.secondary_pools[0].port
|
42
|
+
assert_equal [['localhost', 27020]], manager.arbiters
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class ReadTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Read mode on standard connection: " do
|
6
|
+
setup do
|
7
|
+
@read_preference = :secondary
|
8
|
+
@con = Mongo::Connection.new('localhost', 27017, :read => @read_preference, :connect => false)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
context "Read mode on connection: " do
|
14
|
+
setup do
|
15
|
+
@read_preference = :secondary
|
16
|
+
@con = Mongo::ReplSetConnection.new(['localhost', 27017], :read => @read_preference, :connect => false)
|
17
|
+
end
|
18
|
+
|
19
|
+
should "store read preference on Connection" do
|
20
|
+
assert_equal @read_preference, @con.read_preference
|
21
|
+
end
|
22
|
+
|
23
|
+
should "propogate to DB" do
|
24
|
+
db = @con['foo']
|
25
|
+
assert_equal @read_preference, db.read_preference
|
26
|
+
|
27
|
+
db = @con.db('foo')
|
28
|
+
assert_equal @read_preference, db.read_preference
|
29
|
+
|
30
|
+
db = DB.new('foo', @con)
|
31
|
+
assert_equal @read_preference, db.read_preference
|
32
|
+
end
|
33
|
+
|
34
|
+
should "allow db override" do
|
35
|
+
db = DB.new('foo', @con, :read => :primary)
|
36
|
+
assert_equal :primary, db.read_preference
|
37
|
+
|
38
|
+
db = @con.db('foo', :read => :primary)
|
39
|
+
assert_equal :primary, db.read_preference
|
40
|
+
end
|
41
|
+
|
42
|
+
context "on DB: " do
|
43
|
+
setup do
|
44
|
+
@db = @con['foo']
|
45
|
+
end
|
46
|
+
|
47
|
+
should "propogate to collection" do
|
48
|
+
col = @db.collection('bar')
|
49
|
+
assert_equal @read_preference, col.read_preference
|
50
|
+
|
51
|
+
col = @db['bar']
|
52
|
+
assert_equal @read_preference, col.read_preference
|
53
|
+
|
54
|
+
col = Collection.new('bar', @db)
|
55
|
+
assert_equal @read_preference, col.read_preference
|
56
|
+
end
|
57
|
+
|
58
|
+
should "allow override on collection" do
|
59
|
+
col = @db.collection('bar', :read => :primary)
|
60
|
+
assert_equal :primary, col.read_preference
|
61
|
+
|
62
|
+
col = Collection.new('bar', @db, :read => :primary)
|
63
|
+
assert_equal :primary, col.read_preference
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "on read mode ops" do
|
68
|
+
setup do
|
69
|
+
@col = @con['foo']['bar']
|
70
|
+
@mock_socket = stub()
|
71
|
+
end
|
72
|
+
|
73
|
+
should "use default value on query" do
|
74
|
+
@con.expects(:receive_message).with do |o, m, l, s, c, r|
|
75
|
+
r == :secondary
|
76
|
+
end.returns([[], 0, 0])
|
77
|
+
|
78
|
+
@col.find_one({:a => 1})
|
79
|
+
end
|
80
|
+
|
81
|
+
should "allow override default value on query" do
|
82
|
+
@con.expects(:receive_message).with do |o, m, l, s, c, r|
|
83
|
+
r == :primary
|
84
|
+
end.returns([[], 0, 0])
|
85
|
+
|
86
|
+
@col.find_one({:a => 1}, :read => :primary)
|
87
|
+
end
|
88
|
+
|
89
|
+
should "allow override alternate value on query" do
|
90
|
+
# TODO: enable this test once we enable reading from tags.
|
91
|
+
# @con.expects(:receive_message).with do |o, m, l, s, c, r|
|
92
|
+
# tags = {:dc => "ny"}
|
93
|
+
# end.returns([[], 0, 0])
|
94
|
+
|
95
|
+
assert_raise MongoArgumentError do
|
96
|
+
@col.find_one({:a => 1}, :read => {:dc => "ny"})
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class SafeTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Safe mode on connection: " do
|
6
|
+
setup do
|
7
|
+
@safe_value = {:w => 7}
|
8
|
+
@con = Mongo::Connection.new('localhost', 27017, :safe => @safe_value, :connect => false)
|
9
|
+
end
|
10
|
+
|
11
|
+
should "propogate to DB" do
|
12
|
+
db = @con['foo']
|
13
|
+
assert_equal @safe_value, db.safe
|
14
|
+
|
15
|
+
|
16
|
+
db = @con.db('foo')
|
17
|
+
assert_equal @safe_value, db.safe
|
18
|
+
|
19
|
+
db = DB.new('foo', @con)
|
20
|
+
assert_equal @safe_value, db.safe
|
21
|
+
end
|
22
|
+
|
23
|
+
should "allow db override" do
|
24
|
+
db = DB.new('foo', @con, :safe => false)
|
25
|
+
assert_equal false, db.safe
|
26
|
+
|
27
|
+
db = @con.db('foo', :safe => false)
|
28
|
+
assert_equal false, db.safe
|
29
|
+
end
|
30
|
+
|
31
|
+
context "on DB: " do
|
32
|
+
setup do
|
33
|
+
@db = @con['foo']
|
34
|
+
end
|
35
|
+
|
36
|
+
should "propogate to collection" do
|
37
|
+
col = @db.collection('bar')
|
38
|
+
assert_equal @safe_value, col.safe
|
39
|
+
|
40
|
+
col = @db['bar']
|
41
|
+
assert_equal @safe_value, col.safe
|
42
|
+
|
43
|
+
col = Collection.new('bar', @db)
|
44
|
+
assert_equal @safe_value, col.safe
|
45
|
+
end
|
46
|
+
|
47
|
+
should "allow override on collection" do
|
48
|
+
col = @db.collection('bar', :safe => false)
|
49
|
+
assert_equal false, col.safe
|
50
|
+
|
51
|
+
col = Collection.new('bar', @db, :safe => false)
|
52
|
+
assert_equal false, col.safe
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "on operations supporting safe mode" do
|
57
|
+
setup do
|
58
|
+
@col = @con['foo']['bar']
|
59
|
+
end
|
60
|
+
|
61
|
+
should "use default value on insert" do
|
62
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
63
|
+
safe == @safe_value
|
64
|
+
end
|
65
|
+
|
66
|
+
@col.insert({:a => 1})
|
67
|
+
end
|
68
|
+
|
69
|
+
should "allow override alternate value on insert" do
|
70
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
71
|
+
safe == {:w => 100}
|
72
|
+
end
|
73
|
+
|
74
|
+
@col.insert({:a => 1}, :safe => {:w => 100})
|
75
|
+
end
|
76
|
+
|
77
|
+
should "allow override to disable on insert" do
|
78
|
+
@con.expects(:send_message)
|
79
|
+
@col.insert({:a => 1}, :safe => false)
|
80
|
+
end
|
81
|
+
|
82
|
+
should "use default value on update" do
|
83
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
84
|
+
safe == @safe_value
|
85
|
+
end
|
86
|
+
|
87
|
+
@col.update({:a => 1}, {:a => 2})
|
88
|
+
end
|
89
|
+
|
90
|
+
should "allow override alternate value on update" do
|
91
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
92
|
+
safe == {:w => 100}
|
93
|
+
end
|
94
|
+
|
95
|
+
@col.update({:a => 1}, {:a => 2}, :safe => {:w => 100})
|
96
|
+
end
|
97
|
+
|
98
|
+
should "allow override to disable on update" do
|
99
|
+
@con.expects(:send_message)
|
100
|
+
@col.update({:a => 1}, {:a => 2}, :safe => false)
|
101
|
+
end
|
102
|
+
|
103
|
+
should "use default value on remove" do
|
104
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
105
|
+
safe == @safe_value
|
106
|
+
end
|
107
|
+
|
108
|
+
@col.remove
|
109
|
+
end
|
110
|
+
|
111
|
+
should "allow override alternate value on remove" do
|
112
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
113
|
+
safe == {:w => 100}
|
114
|
+
end
|
115
|
+
|
116
|
+
@col.remove({}, :safe => {:w => 100})
|
117
|
+
end
|
118
|
+
|
119
|
+
should "allow override to disable on remove" do
|
120
|
+
@con.expects(:send_message)
|
121
|
+
@col.remove({}, :safe => false)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/test/uri_test.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
__END__
|
2
|
+
require './test/test_helper'
|
3
|
+
|
4
|
+
class TestThreading < Test::Unit::TestCase
|
5
|
+
include Mongo
|
6
|
+
|
7
|
+
def test_uri_without_port
|
8
|
+
parser = Mongo::URIParser.new('mongodb://localhost')
|
9
|
+
assert_equal 1, parser.nodes.length
|
10
|
+
assert_equal 'localhost', parser.nodes[0][0]
|
11
|
+
assert_equal 27017, parser.nodes[0][1]
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_basic_uri
|
15
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018')
|
16
|
+
assert_equal 1, parser.nodes.length
|
17
|
+
assert_equal 'localhost', parser.nodes[0][0]
|
18
|
+
assert_equal 27018, parser.nodes[0][1]
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_multiple_uris
|
22
|
+
parser = Mongo::URIParser.new('mongodb://a.example.com:27018,b.example.com')
|
23
|
+
assert_equal 2, parser.nodes.length
|
24
|
+
assert_equal 'a.example.com', parser.nodes[0][0]
|
25
|
+
assert_equal 27018, parser.nodes[0][1]
|
26
|
+
assert_equal 'b.example.com', parser.nodes[1][0]
|
27
|
+
assert_equal 27017, parser.nodes[1][1]
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_complex_passwords
|
31
|
+
parser = Mongo::URIParser.new('mongodb://bob:secret.word@a.example.com:27018/test')
|
32
|
+
assert_equal "bob", parser.auths[0]["username"]
|
33
|
+
assert_equal "secret.word", parser.auths[0]["password"]
|
34
|
+
|
35
|
+
parser = Mongo::URIParser.new('mongodb://bob:s-_3#%R.t@a.example.com:27018/test')
|
36
|
+
assert_equal "bob", parser.auths[0]["username"]
|
37
|
+
assert_equal "s-_3#%R.t", parser.auths[0]["password"]
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_passwords_contain_no_commas
|
41
|
+
assert_raise MongoArgumentError do
|
42
|
+
Mongo::URIParser.new('mongodb://bob:a,b@a.example.com:27018/test')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_multiple_uris_with_auths
|
47
|
+
parser = Mongo::URIParser.new('mongodb://bob:secret@a.example.com:27018/test,joe:secret2@b.example.com/test2')
|
48
|
+
assert_equal 2, parser.nodes.length
|
49
|
+
assert_equal 'a.example.com', parser.nodes[0][0]
|
50
|
+
assert_equal 27018, parser.nodes[0][1]
|
51
|
+
assert_equal 'b.example.com', parser.nodes[1][0]
|
52
|
+
assert_equal 27017, parser.nodes[1][1]
|
53
|
+
assert_equal 2, parser.auths.length
|
54
|
+
assert_equal "bob", parser.auths[0]["username"]
|
55
|
+
assert_equal "secret", parser.auths[0]["password"]
|
56
|
+
assert_equal "test", parser.auths[0]["db_name"]
|
57
|
+
assert_equal "joe", parser.auths[1]["username"]
|
58
|
+
assert_equal "secret2", parser.auths[1]["password"]
|
59
|
+
assert_equal "test2", parser.auths[1]["db_name"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_opts_basic
|
63
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=direct;slaveok=true;safe=true')
|
64
|
+
assert_equal 'direct', parser.connect
|
65
|
+
assert parser.slaveok
|
66
|
+
assert parser.safe
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_opts_with_amp_separator
|
70
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=direct&slaveok=true&safe=true')
|
71
|
+
assert_equal 'direct', parser.connect
|
72
|
+
assert parser.slaveok
|
73
|
+
assert parser.safe
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_opts_safe
|
77
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?safe=true;w=2;wtimeout=200;fsync=true')
|
78
|
+
assert parser.safe
|
79
|
+
assert_equal 2, parser.w
|
80
|
+
assert_equal 200, parser.wtimeout
|
81
|
+
assert parser.fsync
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_opts_replica_set
|
85
|
+
assert_raise_error MongoArgumentError, "specify that connect=replicaset" do
|
86
|
+
Mongo::URIParser.new('mongodb://localhost:27018?replicaset=foo')
|
87
|
+
end
|
88
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=replicaset;replicaset=foo')
|
89
|
+
assert_equal 'foo', parser.replicaset
|
90
|
+
assert_equal 'replicaset', parser.connect
|
91
|
+
end
|
92
|
+
end
|