mongo 1.1.5 → 1.2.rc0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/docs/HISTORY.md +8 -0
- data/docs/REPLICA_SETS.md +8 -12
- data/lib/mongo.rb +3 -1
- data/lib/mongo/collection.rb +32 -28
- data/lib/mongo/connection.rb +61 -42
- data/lib/mongo/cursor.rb +13 -13
- data/lib/mongo/db.rb +30 -30
- data/lib/mongo/repl_set_connection.rb +17 -3
- data/lib/mongo/util/pool.rb +3 -3
- data/lib/mongo/util/uri_parser.rb +119 -11
- data/test/bson/bson_test.rb +24 -2
- data/test/collection_test.rb +34 -6
- data/test/connection_test.rb +35 -0
- data/test/replica_sets/connect_test.rb +2 -1
- data/test/replica_sets/connection_string_test.rb +32 -0
- data/test/replica_sets/query_secondaries.rb +4 -0
- data/test/replica_sets/replication_ack_test.rb +2 -0
- data/test/replica_sets/rs_test_helper.rb +9 -11
- data/test/unit/collection_test.rb +0 -1
- data/test/unit/connection_test.rb +4 -4
- data/test/unit/repl_set_connection_test.rb +0 -10
- data/test/unit/safe_test.rb +2 -2
- data/test/uri_test.rb +75 -0
- metadata +20 -14
data/test/connection_test.rb
CHANGED
@@ -165,6 +165,41 @@ class TestConnection < Test::Unit::TestCase
|
|
165
165
|
assert unlocked, "mongod failed to unlock"
|
166
166
|
end
|
167
167
|
|
168
|
+
def test_max_bson_size_value
|
169
|
+
conn = standard_connection
|
170
|
+
if conn.server_version > "1.6"
|
171
|
+
assert_equal conn['admin'].command({:ismaster => 1})['maxBsonObjectSize'], conn.max_bson_size
|
172
|
+
end
|
173
|
+
|
174
|
+
conn.connect
|
175
|
+
assert_equal BSON::BSON_CODER.max_bson_size, conn.max_bson_size
|
176
|
+
doc = {'n' => 'a' * (BSON_CODER.max_bson_size - 11)}
|
177
|
+
assert_raise InvalidDocument do
|
178
|
+
assert BSON::BSON_CODER.serialize(doc)
|
179
|
+
end
|
180
|
+
|
181
|
+
limit = 7 * 1024 * 1024
|
182
|
+
conn.stubs(:max_bson_size).returns(limit)
|
183
|
+
conn.connect
|
184
|
+
assert_equal limit, conn.max_bson_size
|
185
|
+
assert_equal limit, BSON::BSON_CODER.max_bson_size
|
186
|
+
doc = {'n' => 'a' * ((limit) - 11)}
|
187
|
+
assert_raise_error InvalidDocument, "limited to #{limit}" do
|
188
|
+
assert BSON::BSON_CODER.serialize(doc)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_max_bson_size_with_old_mongod
|
193
|
+
conn = standard_connection(:connect => false)
|
194
|
+
|
195
|
+
admin_db = Object.new
|
196
|
+
admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1}).twice
|
197
|
+
conn.expects(:[]).with('admin').returns(admin_db).twice
|
198
|
+
|
199
|
+
conn.connect
|
200
|
+
assert_equal Mongo::DEFAULT_MAX_BSON_SIZE, BSON::BSON_CODER.max_bson_size
|
201
|
+
end
|
202
|
+
|
168
203
|
context "Saved authentications" do
|
169
204
|
setup do
|
170
205
|
@conn = standard_connection
|
@@ -16,8 +16,8 @@ class ConnectTest < Test::Unit::TestCase
|
|
16
16
|
|
17
17
|
def test_connect_with_deprecated_multi
|
18
18
|
@conn = Connection.multi([[RS.host, RS.ports[0]], [RS.host, RS.ports[1]]], :name => RS.name)
|
19
|
-
assert @conn.connected?
|
20
19
|
assert @conn.is_a?(ReplSetConnection)
|
20
|
+
assert @conn.connected?
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_connect_bad_name
|
@@ -31,6 +31,7 @@ class ConnectTest < Test::Unit::TestCase
|
|
31
31
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
32
32
|
[RS.host, RS.ports[2]], :name => RS.name)
|
33
33
|
assert @conn.connected?
|
34
|
+
assert @conn.read_primary?
|
34
35
|
|
35
36
|
assert_equal RS.primary, @conn.primary
|
36
37
|
assert_equal RS.secondaries.sort, @conn.secondaries.sort
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require './test/replica_sets/rs_test_helper'
|
3
|
+
|
4
|
+
# NOTE: This test expects a replica set of three nodes to be running on RS.host,
|
5
|
+
# on ports TEST_PORT, RS.ports[1], and TEST + 2.
|
6
|
+
class ConnectionStringTest < Test::Unit::TestCase
|
7
|
+
include Mongo
|
8
|
+
|
9
|
+
def setup
|
10
|
+
RS.restart_killed_nodes
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
RS.restart_killed_nodes
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_connect_with_connection_string
|
18
|
+
@conn = Connection.from_uri("mongodb://#{RS.host}:#{RS.ports[0]},#{RS.host}:#{RS.ports[1]}?replicaset=#{RS.name}")
|
19
|
+
assert @conn.is_a?(ReplSetConnection)
|
20
|
+
assert @conn.connected?
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_connect_with_full_connection_string
|
24
|
+
@conn = Connection.from_uri("mongodb://#{RS.host}:#{RS.ports[0]},#{RS.host}:#{RS.ports[1]}?replicaset=#{RS.name};safe=true;w=2;fsync=true;slaveok=true")
|
25
|
+
assert @conn.is_a?(ReplSetConnection)
|
26
|
+
assert @conn.connected?
|
27
|
+
assert_equal 2, @conn.safe[:w]
|
28
|
+
assert @conn.safe[:fsync]
|
29
|
+
assert @conn.read_pool
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -16,6 +16,10 @@ class ReplicaSetQuerySecondariesTest < Test::Unit::TestCase
|
|
16
16
|
RS.restart_killed_nodes
|
17
17
|
end
|
18
18
|
|
19
|
+
def test_read_primary
|
20
|
+
assert !@conn.read_primary?
|
21
|
+
end
|
22
|
+
|
19
23
|
def test_con
|
20
24
|
assert @conn.primary_pool, "No primary pool!"
|
21
25
|
assert @conn.read_pool, "No read pool!"
|
@@ -13,6 +13,8 @@ class ReplicaSetAckTest < Test::Unit::TestCase
|
|
13
13
|
@slave1 = Connection.new(@conn.secondary_pools[0].host,
|
14
14
|
@conn.secondary_pools[0].port, :slave_ok => true)
|
15
15
|
|
16
|
+
assert !@slave1.read_primary?
|
17
|
+
|
16
18
|
@db = @conn.db(MONGO_TEST_DB)
|
17
19
|
@db.drop_collection("test-sets")
|
18
20
|
@col = @db.collection("test-sets")
|
@@ -12,17 +12,15 @@ class Test::Unit::TestCase
|
|
12
12
|
# Generic code for rescuing connection failures and retrying operations.
|
13
13
|
# This could be combined with some timeout functionality.
|
14
14
|
def rescue_connection_failure(max_retries=60)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
sleep(1)
|
25
|
-
end
|
15
|
+
retries = 0
|
16
|
+
begin
|
17
|
+
yield
|
18
|
+
rescue Mongo::ConnectionFailure => ex
|
19
|
+
puts "Rescue attempt #{retries}"
|
20
|
+
retries += 1
|
21
|
+
raise ex if retries > max_retries
|
22
|
+
sleep(1)
|
23
|
+
retry
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
@@ -22,8 +22,8 @@ class ConnectionTest < Test::Unit::TestCase
|
|
22
22
|
TCPSocket.stubs(:new).returns(new_mock_socket)
|
23
23
|
|
24
24
|
admin_db = new_mock_db
|
25
|
-
admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
|
26
|
-
@conn.expects(:[]).with('admin').returns(admin_db)
|
25
|
+
admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1}).twice
|
26
|
+
@conn.expects(:[]).with('admin').returns(admin_db).twice
|
27
27
|
@conn.connect
|
28
28
|
end
|
29
29
|
|
@@ -65,8 +65,8 @@ class ConnectionTest < Test::Unit::TestCase
|
|
65
65
|
@conn = Connection.from_uri("mongodb://localhost", :connect => false)
|
66
66
|
|
67
67
|
admin_db = new_mock_db
|
68
|
-
admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
|
69
|
-
@conn.expects(:[]).with('admin').returns(admin_db)
|
68
|
+
admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1}).twice
|
69
|
+
@conn.expects(:[]).with('admin').returns(admin_db).twice
|
70
70
|
@conn.expects(:apply_saved_authentication)
|
71
71
|
@conn.connect
|
72
72
|
end
|
@@ -67,16 +67,6 @@ class ReplSetConnectionTest < Test::Unit::TestCase
|
|
67
67
|
assert_equal ['localhost', 27017], @conn.nodes[0]
|
68
68
|
assert_equal ['mydb.com', 27018], @conn.nodes[1]
|
69
69
|
end
|
70
|
-
|
71
|
-
should "parse a uri specifying multiple nodes with auth" do
|
72
|
-
@conn = Connection.from_uri("mongodb://kyle:s3cr3t@localhost:27017/app,mickey:m0u5e@mydb.com:27018/dsny", :connect => false)
|
73
|
-
assert_equal ['localhost', 27017], @conn.nodes[0]
|
74
|
-
assert_equal ['mydb.com', 27018], @conn.nodes[1]
|
75
|
-
auth_hash = {'username' => 'kyle', 'password' => 's3cr3t', 'db_name' => 'app'}
|
76
|
-
assert_equal auth_hash, @conn.auths[0]
|
77
|
-
auth_hash = {'username' => 'mickey', 'password' => 'm0u5e', 'db_name' => 'dsny'}
|
78
|
-
assert_equal auth_hash, @conn.auths[1]
|
79
|
-
end
|
80
70
|
end
|
81
71
|
end
|
82
72
|
end
|
data/test/unit/safe_test.rb
CHANGED
@@ -40,7 +40,7 @@ class SafeTest < Test::Unit::TestCase
|
|
40
40
|
col = @db['bar']
|
41
41
|
assert_equal @safe_value, col.safe
|
42
42
|
|
43
|
-
col = Collection.new(
|
43
|
+
col = Collection.new('bar', @db)
|
44
44
|
assert_equal @safe_value, col.safe
|
45
45
|
end
|
46
46
|
|
@@ -48,7 +48,7 @@ class SafeTest < Test::Unit::TestCase
|
|
48
48
|
col = @db.collection('bar', :safe => false)
|
49
49
|
assert_equal false, col.safe
|
50
50
|
|
51
|
-
col = Collection.new(
|
51
|
+
col = Collection.new('bar', @db, :safe => false)
|
52
52
|
assert_equal false, col.safe
|
53
53
|
end
|
54
54
|
end
|
data/test/uri_test.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class TestThreading < Test::Unit::TestCase
|
4
|
+
include Mongo
|
5
|
+
|
6
|
+
def test_uri_without_port
|
7
|
+
parser = Mongo::URIParser.new('mongodb://localhost')
|
8
|
+
assert_equal 1, parser.nodes.length
|
9
|
+
assert_equal 'localhost', parser.nodes[0][0]
|
10
|
+
assert_equal 27017, parser.nodes[0][1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_basic_uri
|
14
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018')
|
15
|
+
assert_equal 1, parser.nodes.length
|
16
|
+
assert_equal 'localhost', parser.nodes[0][0]
|
17
|
+
assert_equal 27018, parser.nodes[0][1]
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_multiple_uris
|
21
|
+
parser = Mongo::URIParser.new('mongodb://a.example.com:27018,b.example.com')
|
22
|
+
assert_equal 2, parser.nodes.length
|
23
|
+
assert_equal 'a.example.com', parser.nodes[0][0]
|
24
|
+
assert_equal 27018, parser.nodes[0][1]
|
25
|
+
assert_equal 'b.example.com', parser.nodes[1][0]
|
26
|
+
assert_equal 27017, parser.nodes[1][1]
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_multiple_uris_with_auths
|
30
|
+
parser = Mongo::URIParser.new('mongodb://bob:secret@a.example.com:27018/test,joe:secret2@b.example.com/test2')
|
31
|
+
assert_equal 2, parser.nodes.length
|
32
|
+
assert_equal 'a.example.com', parser.nodes[0][0]
|
33
|
+
assert_equal 27018, parser.nodes[0][1]
|
34
|
+
assert_equal 'b.example.com', parser.nodes[1][0]
|
35
|
+
assert_equal 27017, parser.nodes[1][1]
|
36
|
+
assert_equal 2, parser.auths.length
|
37
|
+
assert_equal "bob", parser.auths[0]["username"]
|
38
|
+
assert_equal "secret", parser.auths[0]["password"]
|
39
|
+
assert_equal "test", parser.auths[0]["db_name"]
|
40
|
+
assert_equal "joe", parser.auths[1]["username"]
|
41
|
+
assert_equal "secret2", parser.auths[1]["password"]
|
42
|
+
assert_equal "test2", parser.auths[1]["db_name"]
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_opts_basic
|
46
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=direct;slaveok=true;safe=true')
|
47
|
+
assert_equal 'direct', parser.connect
|
48
|
+
assert parser.slaveok
|
49
|
+
assert parser.safe
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_opts_with_amp_separator
|
53
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=direct&slaveok=true&safe=true')
|
54
|
+
assert_equal 'direct', parser.connect
|
55
|
+
assert parser.slaveok
|
56
|
+
assert parser.safe
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_opts_safe
|
60
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?safe=true;w=2;wtimeout=200;fsync=true')
|
61
|
+
assert parser.safe
|
62
|
+
assert_equal 2, parser.w
|
63
|
+
assert_equal 200, parser.wtimeout
|
64
|
+
assert parser.fsync
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_opts_replica_set
|
68
|
+
assert_raise_error MongoArgumentError, "specify that connect=replicaset" do
|
69
|
+
Mongo::URIParser.new('mongodb://localhost:27018?replicaset=foo')
|
70
|
+
end
|
71
|
+
parser = Mongo::URIParser.new('mongodb://localhost:27018?connect=replicaset;replicaset=foo')
|
72
|
+
assert_equal 'foo', parser.replicaset
|
73
|
+
assert_equal 'replicaset', parser.connect
|
74
|
+
end
|
75
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 977940448
|
5
|
+
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 2
|
9
|
+
- rc0
|
10
|
+
version: 1.2.rc0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jim Menard
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date:
|
20
|
+
date: 2011-01-05 00:00:00 -05:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -28,12 +28,12 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
hash:
|
31
|
+
hash: 977940448
|
32
32
|
segments:
|
33
33
|
- 1
|
34
|
-
-
|
35
|
-
-
|
36
|
-
version: 1.
|
34
|
+
- 2
|
35
|
+
- rc0
|
36
|
+
version: 1.2.rc0
|
37
37
|
type: :runtime
|
38
38
|
version_requirements: *id001
|
39
39
|
description: A Ruby driver for MongoDB. For more information about Mongo, see http://www.mongodb.org.
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- test/auxillary/1.4_features.rb
|
97
97
|
- test/conversions_test.rb
|
98
98
|
- test/connection_test.rb
|
99
|
+
- test/uri_test.rb
|
99
100
|
- test/cursor_message_test.rb
|
100
101
|
- test/tools/test.rb
|
101
102
|
- test/tools/repl_set_manager.rb
|
@@ -119,6 +120,7 @@ files:
|
|
119
120
|
- test/replica_sets/replication_ack_test.rb
|
120
121
|
- test/replica_sets/query_secondaries.rb
|
121
122
|
- test/replica_sets/query_test.rb
|
123
|
+
- test/replica_sets/connection_string_test.rb
|
122
124
|
- test/replica_sets/insert_test.rb
|
123
125
|
- test/replica_sets/connect_test.rb
|
124
126
|
- test/safe_test.rb
|
@@ -147,12 +149,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
147
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
150
|
none: false
|
149
151
|
requirements:
|
150
|
-
- - "
|
152
|
+
- - ">"
|
151
153
|
- !ruby/object:Gem::Version
|
152
|
-
hash:
|
154
|
+
hash: 25
|
153
155
|
segments:
|
154
|
-
-
|
155
|
-
|
156
|
+
- 1
|
157
|
+
- 3
|
158
|
+
- 1
|
159
|
+
version: 1.3.1
|
156
160
|
requirements: []
|
157
161
|
|
158
162
|
rubyforge_project:
|
@@ -181,6 +185,7 @@ test_files:
|
|
181
185
|
- test/auxillary/1.4_features.rb
|
182
186
|
- test/conversions_test.rb
|
183
187
|
- test/connection_test.rb
|
188
|
+
- test/uri_test.rb
|
184
189
|
- test/cursor_message_test.rb
|
185
190
|
- test/tools/test.rb
|
186
191
|
- test/tools/repl_set_manager.rb
|
@@ -204,6 +209,7 @@ test_files:
|
|
204
209
|
- test/replica_sets/replication_ack_test.rb
|
205
210
|
- test/replica_sets/query_secondaries.rb
|
206
211
|
- test/replica_sets/query_test.rb
|
212
|
+
- test/replica_sets/connection_string_test.rb
|
207
213
|
- test/replica_sets/insert_test.rb
|
208
214
|
- test/replica_sets/connect_test.rb
|
209
215
|
- test/safe_test.rb
|