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,37 +1,40 @@
|
|
1
|
-
|
2
|
-
require './test/replica_sets/rs_test_helper'
|
1
|
+
require 'test_helper'
|
3
2
|
|
4
3
|
class ReplicaSetInsertTest < Test::Unit::TestCase
|
5
4
|
|
6
5
|
def setup
|
7
|
-
|
8
|
-
@
|
9
|
-
@db = @
|
6
|
+
ensure_cluster(:rs)
|
7
|
+
@client = MongoReplicaSetClient.new @rs.repl_set_seeds
|
8
|
+
@db = @client.db(MONGO_TEST_DB)
|
10
9
|
@db.drop_collection("test-sets")
|
11
10
|
@coll = @db.collection("test-sets")
|
12
11
|
end
|
13
12
|
|
14
13
|
def teardown
|
15
|
-
@
|
16
|
-
|
14
|
+
@client.close if @conn
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.shutdown
|
18
|
+
@@cluster.stop
|
19
|
+
@@cluster.clobber
|
17
20
|
end
|
18
21
|
|
19
22
|
def test_insert
|
20
|
-
@coll.save({:a => 20}, :
|
23
|
+
@coll.save({:a => 20}, :w => 2)
|
21
24
|
|
22
|
-
@rs.
|
25
|
+
@rs.primary.stop
|
23
26
|
|
24
27
|
rescue_connection_failure do
|
25
|
-
@coll.save({:a => 30}, :
|
28
|
+
@coll.save({:a => 30}, :w => 2)
|
26
29
|
end
|
27
30
|
|
28
|
-
@coll.save({:a => 40}, :
|
29
|
-
@coll.save({:a => 50}, :
|
30
|
-
@coll.save({:a => 60}, :
|
31
|
-
@coll.save({:a => 70}, :
|
31
|
+
@coll.save({:a => 40}, :w => 2)
|
32
|
+
@coll.save({:a => 50}, :w => 2)
|
33
|
+
@coll.save({:a => 60}, :w => 2)
|
34
|
+
@coll.save({:a => 70}, :w => 2)
|
32
35
|
|
33
36
|
# Restart the old master and wait for sync
|
34
|
-
@rs.
|
37
|
+
@rs.start
|
35
38
|
sleep(5)
|
36
39
|
results = []
|
37
40
|
|
@@ -42,7 +45,7 @@ class ReplicaSetInsertTest < Test::Unit::TestCase
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
|
-
@coll.save({:a => 80}, :
|
48
|
+
@coll.save({:a => 80}, :w => 2)
|
46
49
|
@coll.find.each {|r| results << r}
|
47
50
|
[20, 30, 40, 50, 60, 70, 80].each do |a|
|
48
51
|
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a} on second find"
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ReplicaSetQueryTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
ensure_cluster(:rs)
|
7
|
+
@client = MongoReplicaSetClient.new @rs.repl_set_seeds
|
8
|
+
@db = @client.db(MONGO_TEST_DB)
|
9
|
+
@db.drop_collection("test-sets")
|
10
|
+
@coll = @db.collection("test-sets")
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@client.close if @conn
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.shutdown
|
18
|
+
@@cluster.stop
|
19
|
+
@@cluster.clobber
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_query
|
23
|
+
@coll.save({:a => 20}, :w => 3)
|
24
|
+
@coll.save({:a => 30}, :w => 3)
|
25
|
+
@coll.save({:a => 40}, :w => 3)
|
26
|
+
results = []
|
27
|
+
@coll.find.each {|r| results << r}
|
28
|
+
[20, 30, 40].each do |a|
|
29
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
30
|
+
end
|
31
|
+
|
32
|
+
@rs.primary.stop
|
33
|
+
|
34
|
+
results = []
|
35
|
+
rescue_connection_failure do
|
36
|
+
@coll.find.each {|r| results << r}
|
37
|
+
[20, 30, 40].each do |a|
|
38
|
+
assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Create a large collection and do a secondary query that returns
|
44
|
+
# enough records to require sending a GETMORE. In between opening
|
45
|
+
# the cursor and sending the GETMORE, do a :primary query. Confirm
|
46
|
+
# that the cursor reading from the secondary continues to talk to
|
47
|
+
# the secondary, rather than trying to read the cursor from the
|
48
|
+
# primary, where it does not exist.
|
49
|
+
# def test_secondary_getmore
|
50
|
+
# 200.times do |i|
|
51
|
+
# @coll.save({:a => i}, :w => 3)
|
52
|
+
# end
|
53
|
+
# as = []
|
54
|
+
# # Set an explicit batch size, in case the default ever changes.
|
55
|
+
# @coll.find({}, { :batch_size => 100, :read => :secondary }) do |c|
|
56
|
+
# c.each do |result|
|
57
|
+
# as << result['a']
|
58
|
+
# @coll.find({:a => result['a']}, :read => :primary).map
|
59
|
+
# end
|
60
|
+
# end
|
61
|
+
# assert_equal(as.sort, 0.upto(199).to_a)
|
62
|
+
# end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'benchmark'
|
3
|
+
|
4
|
+
class ReplicaSetRefreshTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
ensure_cluster(:rs)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.shutdown
|
11
|
+
@@cluster.stop
|
12
|
+
@@cluster.clobber
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_connect_and_manual_refresh_with_secondaries_down
|
16
|
+
@rs.secondaries.each{|s| s.stop}
|
17
|
+
|
18
|
+
rescue_connection_failure do
|
19
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => false)
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_equal [], @client.secondaries
|
23
|
+
assert @client.connected?
|
24
|
+
assert_equal @client.read_pool, @client.primary_pool
|
25
|
+
|
26
|
+
# Refresh with no change to set
|
27
|
+
@client.refresh
|
28
|
+
assert_equal [], @client.secondaries
|
29
|
+
assert @client.connected?
|
30
|
+
assert_equal @client.read_pool, @client.primary_pool
|
31
|
+
|
32
|
+
# Test no changes after restart until manual refresh
|
33
|
+
@rs.restart
|
34
|
+
assert_equal [], @client.secondaries
|
35
|
+
assert @client.connected?
|
36
|
+
assert_equal @client.read_pool, @client.primary_pool
|
37
|
+
|
38
|
+
# Refresh and ensure state
|
39
|
+
@client.refresh
|
40
|
+
assert_equal @client.read_pool, @client.primary_pool
|
41
|
+
#assert_equal 2, @client.secondaries.length
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_automated_refresh_with_secondaries_down
|
45
|
+
@rs.secondaries.each{|s| s.stop}
|
46
|
+
|
47
|
+
rescue_connection_failure do
|
48
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
49
|
+
:refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Ensure secondaries not available and read from primary
|
53
|
+
assert_equal [], @client.secondaries
|
54
|
+
assert @client.connected?
|
55
|
+
assert_equal @client.manager.read, @client.manager.primary
|
56
|
+
old_refresh_version = @client.refresh_version
|
57
|
+
|
58
|
+
# Restart nodes and ensure refresh interval has passed
|
59
|
+
@rs.restart
|
60
|
+
sleep(2)
|
61
|
+
|
62
|
+
assert @client.refresh_version == old_refresh_version,
|
63
|
+
"Refresh version has changed."
|
64
|
+
|
65
|
+
# Trigger synchronous refresh
|
66
|
+
@client['foo']['bar'].find_one
|
67
|
+
|
68
|
+
assert @client.refresh_version > old_refresh_version,
|
69
|
+
"Refresh version hasn't changed."
|
70
|
+
assert @client.secondaries.length == 2,
|
71
|
+
"No secondaries have been added."
|
72
|
+
assert @client.manager.read != @client.manager.primary,
|
73
|
+
"Read pool and primary pool are identical."
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_automated_refresh_when_secondary_goes_down
|
77
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
78
|
+
:refresh_interval => 1, :refresh_mode => :sync)
|
79
|
+
|
80
|
+
num_secondaries = @client.secondary_pools.length
|
81
|
+
old_refresh_version = @client.refresh_version
|
82
|
+
|
83
|
+
@rs.secondaries.first.kill
|
84
|
+
sleep(2)
|
85
|
+
|
86
|
+
assert @client.refresh_version == old_refresh_version,
|
87
|
+
"Refresh version has changed."
|
88
|
+
|
89
|
+
@client['foo']['bar'].find_one
|
90
|
+
|
91
|
+
assert @client.refresh_version > old_refresh_version,
|
92
|
+
"Refresh version hasn't changed."
|
93
|
+
assert_equal num_secondaries - 1, @client.secondaries.length
|
94
|
+
assert_equal num_secondaries - 1, @client.secondary_pools.length
|
95
|
+
|
96
|
+
@rs.start
|
97
|
+
sleep(2)
|
98
|
+
|
99
|
+
@client['foo']['bar'].find_one
|
100
|
+
|
101
|
+
assert_equal num_secondaries, @client.secondaries.length
|
102
|
+
assert_equal num_secondaries, @client.secondary_pools.length
|
103
|
+
end
|
104
|
+
=begin
|
105
|
+
def test_automated_refresh_with_removed_node
|
106
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
|
107
|
+
:refresh_interval => 1, :refresh_mode => :sync)
|
108
|
+
|
109
|
+
num_secondaries = @client.secondary_pools.length
|
110
|
+
old_refresh_version = @client.refresh_version
|
111
|
+
|
112
|
+
n = @rs.repl_set_remove_node(2)
|
113
|
+
sleep(2)
|
114
|
+
|
115
|
+
rescue_connection_failure do
|
116
|
+
@client['foo']['bar'].find_one
|
117
|
+
end
|
118
|
+
|
119
|
+
assert @client.refresh_version > old_refresh_version,
|
120
|
+
"Refresh version hasn't changed."
|
121
|
+
assert_equal num_secondaries - 1, @client.secondaries.length
|
122
|
+
assert_equal num_secondaries - 1, @client.secondary_pools.length
|
123
|
+
|
124
|
+
#@rs.add_node(n)
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_adding_and_removing_nodes
|
128
|
+
@client = MongoReplicaSetClient.new(build_seeds(3),
|
129
|
+
:refresh_interval => 2, :refresh_mode => :sync)
|
130
|
+
|
131
|
+
@rs.add_node
|
132
|
+
sleep(4)
|
133
|
+
@client['foo']['bar'].find_one
|
134
|
+
|
135
|
+
@conn2 = MongoReplicaSetClient.new(build_seeds(3),
|
136
|
+
:refresh_interval => 2, :refresh_mode => :sync)
|
137
|
+
|
138
|
+
assert @conn2.secondaries.sort == @client.secondaries.sort,
|
139
|
+
"Second connection secondaries not equal to first."
|
140
|
+
assert_equal 3, @client.secondary_pools.length
|
141
|
+
assert_equal 3, @client.secondaries.length
|
142
|
+
|
143
|
+
config = @client['admin'].command({:ismaster => 1})
|
144
|
+
|
145
|
+
@rs.remove_secondary_node
|
146
|
+
sleep(4)
|
147
|
+
config = @client['admin'].command({:ismaster => 1})
|
148
|
+
|
149
|
+
assert_equal 2, @client.secondary_pools.length
|
150
|
+
assert_equal 2, @client.secondaries.length
|
151
|
+
end
|
152
|
+
=end
|
153
|
+
end
|
@@ -1,49 +1,53 @@
|
|
1
|
-
|
2
|
-
require './test/replica_sets/rs_test_helper'
|
1
|
+
require 'test_helper'
|
3
2
|
|
4
3
|
class ReplicaSetAckTest < Test::Unit::TestCase
|
5
4
|
|
6
5
|
def setup
|
7
|
-
|
8
|
-
@
|
6
|
+
ensure_cluster(:rs)
|
7
|
+
@client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
|
9
8
|
|
10
|
-
@slave1 =
|
11
|
-
@
|
9
|
+
@slave1 = MongoClient.new(
|
10
|
+
@client.secondary_pools[0].host,
|
11
|
+
@client.secondary_pools[0].port, :slave_ok => true)
|
12
12
|
|
13
13
|
assert !@slave1.read_primary?
|
14
14
|
|
15
|
-
@db = @
|
15
|
+
@db = @client.db(MONGO_TEST_DB)
|
16
16
|
@db.drop_collection("test-sets")
|
17
17
|
@col = @db.collection("test-sets")
|
18
18
|
end
|
19
19
|
|
20
20
|
def teardown
|
21
|
-
@
|
22
|
-
|
21
|
+
@client.close if @conn
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.shutdown
|
25
|
+
@@cluster.stop
|
26
|
+
@@cluster.clobber
|
23
27
|
end
|
24
28
|
|
25
29
|
def test_safe_mode_with_w_failure
|
26
30
|
assert_raise_error OperationFailure, "timeout" do
|
27
|
-
@col.insert({:foo => 1}, :
|
31
|
+
@col.insert({:foo => 1}, :w => 4, :wtimeout => 1, :fsync => true)
|
28
32
|
end
|
29
33
|
assert_raise_error OperationFailure, "timeout" do
|
30
|
-
@col.update({:foo => 1}, {:foo => 2}, :
|
34
|
+
@col.update({:foo => 1}, {:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
|
31
35
|
end
|
32
36
|
assert_raise_error OperationFailure, "timeout" do
|
33
|
-
@col.remove({:foo => 2}, :
|
37
|
+
@col.remove({:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
37
41
|
def test_safe_mode_replication_ack
|
38
|
-
@col.insert({:baz => "bar"}, :
|
42
|
+
@col.insert({:baz => "bar"}, :w => 3, :wtimeout => 5000)
|
39
43
|
|
40
|
-
assert @col.insert({:foo => "0" * 5000}, :
|
44
|
+
assert @col.insert({:foo => "0" * 5000}, :w => 3, :wtimeout => 5000)
|
41
45
|
assert_equal 2, @slave1[MONGO_TEST_DB]["test-sets"].count
|
42
46
|
|
43
|
-
assert @col.update({:baz => "bar"}, {:baz => "foo"}, :
|
47
|
+
assert @col.update({:baz => "bar"}, {:baz => "foo"}, :w => 3, :wtimeout => 5000)
|
44
48
|
assert @slave1[MONGO_TEST_DB]["test-sets"].find_one({:baz => "foo"})
|
45
49
|
|
46
|
-
assert @col.remove({}, :
|
50
|
+
assert @col.remove({}, :w => 3, :wtimeout => 5000)
|
47
51
|
assert_equal 0, @slave1[MONGO_TEST_DB]["test-sets"].count
|
48
52
|
end
|
49
53
|
|
@@ -53,7 +57,7 @@ class ReplicaSetAckTest < Test::Unit::TestCase
|
|
53
57
|
assert response['ok'] == 1
|
54
58
|
assert response['lastOp']
|
55
59
|
|
56
|
-
@col.update({}, {:baz => "foo"}
|
60
|
+
@col.update({}, {:baz => "foo"})
|
57
61
|
response = @db.get_last_error(:w => 2, :wtimeout => 5000)
|
58
62
|
assert response['ok'] == 1
|
59
63
|
assert response['lastOp']
|
@@ -1,112 +1,93 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'test/tools/mongo_config'
|
1
|
+
require 'test_helper'
|
2
|
+
include Mongo
|
4
3
|
|
5
4
|
class BasicTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
def self.suite
|
8
|
-
s = super
|
9
|
-
def s.setup
|
10
|
-
|
11
|
-
end
|
12
|
-
def s.teardown
|
13
|
-
@@sc.stop
|
14
|
-
@@sc.clobber
|
15
|
-
end
|
16
|
-
def s.run(*args)
|
17
|
-
setup
|
18
|
-
super
|
19
|
-
teardown
|
20
|
-
end
|
21
|
-
s
|
22
|
-
end
|
23
|
-
|
5
|
+
|
24
6
|
def setup
|
25
|
-
|
7
|
+
ensure_cluster(:sc)
|
26
8
|
end
|
27
9
|
|
28
|
-
def
|
29
|
-
|
10
|
+
def self.shutdown
|
11
|
+
@@cluster.stop
|
12
|
+
@@cluster.clobber
|
30
13
|
end
|
31
14
|
|
32
15
|
# TODO member.primary? ==> true
|
33
16
|
def test_connect
|
34
17
|
seeds = @sc.mongos_seeds
|
35
|
-
@
|
36
|
-
assert @
|
37
|
-
assert_equal(seeds.size, @
|
18
|
+
@client = MongoShardedClient.new(seeds)
|
19
|
+
assert @client.connected?
|
20
|
+
assert_equal(seeds.size, @client.seeds.size)
|
38
21
|
probe(seeds.size)
|
39
|
-
@
|
22
|
+
@client.close
|
40
23
|
end
|
41
24
|
|
42
25
|
def test_hard_refresh
|
43
26
|
seeds = @sc.mongos_seeds
|
44
|
-
@
|
45
|
-
assert @
|
46
|
-
@
|
47
|
-
assert @
|
48
|
-
@
|
27
|
+
@client = MongoShardedClient.new(seeds)
|
28
|
+
assert @client.connected?
|
29
|
+
@client.hard_refresh!
|
30
|
+
assert @client.connected?
|
31
|
+
@client.close
|
49
32
|
end
|
50
33
|
|
51
34
|
def test_reconnect
|
52
35
|
seeds = @sc.mongos_seeds
|
53
|
-
@
|
54
|
-
assert @
|
36
|
+
@client = MongoShardedClient.new(seeds)
|
37
|
+
assert @client.connected?
|
55
38
|
router = @sc.servers(:routers).first
|
56
39
|
router.stop
|
57
40
|
probe(seeds.size)
|
58
|
-
assert @
|
59
|
-
@
|
41
|
+
assert @client.connected?
|
42
|
+
@client.close
|
60
43
|
end
|
61
44
|
|
62
45
|
def test_all_down
|
63
46
|
seeds = @sc.mongos_seeds
|
64
|
-
@
|
65
|
-
assert @
|
47
|
+
@client = MongoShardedClient.new(seeds)
|
48
|
+
assert @client.connected?
|
66
49
|
@sc.servers(:routers).each{|router| router.stop}
|
67
50
|
assert_raises Mongo::ConnectionFailure do
|
68
51
|
probe(seeds.size)
|
69
52
|
end
|
70
|
-
assert_false @
|
71
|
-
@
|
53
|
+
assert_false @client.connected?
|
54
|
+
@client.close
|
72
55
|
end
|
73
56
|
|
74
57
|
def test_cycle
|
75
58
|
seeds = @sc.mongos_seeds
|
76
|
-
@
|
77
|
-
assert @
|
59
|
+
@client = MongoShardedClient.new(seeds)
|
60
|
+
assert @client.connected?
|
78
61
|
routers = @sc.servers(:routers)
|
79
62
|
while routers.size > 0 do
|
80
63
|
rescue_connection_failure do
|
81
64
|
probe(seeds.size)
|
82
65
|
end
|
83
66
|
probe(seeds.size)
|
84
|
-
|
85
|
-
router = routers.detect{|r| r.port == @con.manager.primary.last}
|
67
|
+
router = routers.detect{|r| r.port == @client.manager.primary.last}
|
86
68
|
routers.delete(router)
|
87
69
|
router.stop
|
88
70
|
end
|
89
71
|
assert_raises Mongo::ConnectionFailure do
|
90
72
|
probe(seeds.size)
|
91
73
|
end
|
92
|
-
assert_false @
|
74
|
+
assert_false @client.connected?
|
93
75
|
routers = @sc.servers(:routers).reverse
|
94
76
|
routers.each do |r|
|
95
77
|
r.start
|
96
|
-
@
|
97
|
-
#p @con.manager.primary
|
78
|
+
@client.hard_refresh!
|
98
79
|
rescue_connection_failure do
|
99
80
|
probe(seeds.size)
|
100
81
|
end
|
101
82
|
probe(seeds.size)
|
102
83
|
end
|
103
|
-
@
|
84
|
+
@client.close
|
104
85
|
end
|
105
86
|
|
106
87
|
private
|
107
88
|
|
108
89
|
def probe(size)
|
109
|
-
assert_equal(size, @
|
90
|
+
assert_equal(size, @client['config']['mongos'].find.to_a.size)
|
110
91
|
end
|
111
92
|
|
112
93
|
end
|