mongo 1.1.5 → 1.2.rc0
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/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
|