mongo 1.7.1 → 1.8.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/{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
|