mongo 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. data/{LICENSE.txt → LICENSE} +0 -0
  2. data/README.md +124 -111
  3. data/Rakefile +9 -325
  4. data/VERSION +1 -0
  5. data/bin/mongo_console +4 -4
  6. data/examples/admin.rb +43 -0
  7. data/examples/capped.rb +22 -0
  8. data/examples/cursor.rb +48 -0
  9. data/examples/gridfs.rb +44 -0
  10. data/examples/index_test.rb +126 -0
  11. data/examples/info.rb +31 -0
  12. data/examples/queries.rb +74 -0
  13. data/examples/replica_set.rb +26 -0
  14. data/examples/simple.rb +25 -0
  15. data/examples/strict.rb +35 -0
  16. data/examples/types.rb +36 -0
  17. data/{test/load → examples/web}/thin/load.rb +3 -1
  18. data/{test/load → examples/web}/unicorn/load.rb +5 -3
  19. data/lib/mongo.rb +8 -10
  20. data/lib/mongo/collection.rb +134 -114
  21. data/lib/mongo/cursor.rb +21 -14
  22. data/lib/mongo/db.rb +30 -28
  23. data/lib/mongo/exceptions.rb +1 -1
  24. data/lib/mongo/gridfs/grid.rb +8 -7
  25. data/lib/mongo/gridfs/grid_ext.rb +1 -1
  26. data/lib/mongo/gridfs/grid_file_system.rb +6 -5
  27. data/lib/mongo/gridfs/grid_io.rb +22 -19
  28. data/lib/mongo/legacy.rb +82 -0
  29. data/lib/mongo/{connection.rb → mongo_client.rb} +82 -61
  30. data/lib/mongo/{repl_set_connection.rb → mongo_replica_set_client.rb} +54 -39
  31. data/lib/mongo/{sharded_connection.rb → mongo_sharded_client.rb} +9 -9
  32. data/lib/mongo/networking.rb +25 -20
  33. data/lib/mongo/util/conversions.rb +1 -1
  34. data/lib/mongo/util/core_ext.rb +1 -1
  35. data/lib/mongo/util/logging.rb +20 -4
  36. data/lib/mongo/util/node.rb +16 -16
  37. data/lib/mongo/util/pool.rb +56 -27
  38. data/lib/mongo/util/pool_manager.rb +28 -27
  39. data/lib/mongo/util/server_version.rb +1 -1
  40. data/lib/mongo/util/sharding_pool_manager.rb +8 -8
  41. data/lib/mongo/util/ssl_socket.rb +1 -5
  42. data/lib/mongo/util/support.rb +24 -8
  43. data/lib/mongo/util/tcp_socket.rb +0 -4
  44. data/lib/mongo/util/uri_parser.rb +54 -38
  45. data/lib/mongo/util/write_concern.rb +67 -0
  46. data/mongo.gemspec +21 -32
  47. data/test/auxillary/{1.4_features.rb → 1.4_feature_test.rb} +4 -5
  48. data/test/auxillary/authentication_test.rb +18 -20
  49. data/test/auxillary/autoreconnect_test.rb +3 -5
  50. data/test/auxillary/fork_test.rb +5 -7
  51. data/test/auxillary/repl_set_auth_test.rb +13 -15
  52. data/test/auxillary/slave_connection_test.rb +8 -7
  53. data/test/auxillary/threaded_authentication_test.rb +15 -17
  54. data/test/bson/binary_test.rb +1 -1
  55. data/test/bson/bson_test.rb +60 -36
  56. data/test/bson/byte_buffer_test.rb +1 -1
  57. data/test/bson/hash_with_indifferent_access_test.rb +2 -2
  58. data/test/bson/json_test.rb +1 -2
  59. data/test/bson/object_id_test.rb +1 -2
  60. data/test/bson/ordered_hash_test.rb +1 -1
  61. data/test/bson/timestamp_test.rb +1 -1
  62. data/test/{collection_test.rb → functional/collection_test.rb} +57 -57
  63. data/test/{connection_test.rb → functional/connection_test.rb} +75 -89
  64. data/test/{conversions_test.rb → functional/conversions_test.rb} +1 -1
  65. data/test/{cursor_fail_test.rb → functional/cursor_fail_test.rb} +3 -29
  66. data/test/{cursor_message_test.rb → functional/cursor_message_test.rb} +1 -1
  67. data/test/{cursor_test.rb → functional/cursor_test.rb} +5 -1
  68. data/test/{db_api_test.rb → functional/db_api_test.rb} +8 -9
  69. data/test/{db_connection_test.rb → functional/db_connection_test.rb} +3 -5
  70. data/test/{db_test.rb → functional/db_test.rb} +13 -13
  71. data/test/{grid_file_system_test.rb → functional/grid_file_system_test.rb} +2 -2
  72. data/test/{grid_io_test.rb → functional/grid_io_test.rb} +6 -6
  73. data/test/{grid_test.rb → functional/grid_test.rb} +4 -10
  74. data/test/{pool_test.rb → functional/pool_test.rb} +1 -1
  75. data/test/functional/safe_test.rb +84 -0
  76. data/test/{support_test.rb → functional/support_test.rb} +1 -1
  77. data/test/{threading_test.rb → functional/threading_test.rb} +9 -9
  78. data/test/{timeout_test.rb → functional/timeout_test.rb} +1 -1
  79. data/test/{uri_test.rb → functional/uri_test.rb} +1 -1
  80. data/test/functional/write_concern_test.rb +104 -0
  81. data/test/replica_set/basic_test.rb +139 -0
  82. data/test/replica_set/client_test.rb +255 -0
  83. data/test/replica_set/complex_connect_test.rb +62 -0
  84. data/test/replica_set/connection_test.rb +255 -0
  85. data/test/{replica_sets → replica_set}/count_test.rb +17 -14
  86. data/test/replica_set/cursor_test.rb +75 -0
  87. data/test/{replica_sets → replica_set}/insert_test.rb +19 -16
  88. data/test/replica_set/query_test.rb +64 -0
  89. data/test/replica_set/refresh_test.rb +153 -0
  90. data/test/{replica_sets → replica_set}/replication_ack_test.rb +21 -17
  91. data/test/sharded_cluster/basic_test.rb +31 -50
  92. data/test/support/hash_with_indifferent_access.rb +1 -1
  93. data/test/test_helper.rb +56 -9
  94. data/test/threading/threading_with_large_pool_test.rb +8 -8
  95. data/test/tools/mongo_config.rb +270 -58
  96. data/test/tools/mongo_config_test.rb +146 -0
  97. data/test/unit/client_test.rb +230 -0
  98. data/test/unit/collection_test.rb +45 -32
  99. data/test/unit/connection_test.rb +82 -74
  100. data/test/unit/cursor_test.rb +14 -6
  101. data/test/unit/db_test.rb +8 -8
  102. data/test/unit/grid_test.rb +11 -11
  103. data/test/unit/node_test.rb +24 -24
  104. data/test/unit/pool_manager_test.rb +13 -13
  105. data/test/unit/pool_test.rb +1 -1
  106. data/test/unit/read_test.rb +21 -26
  107. data/test/unit/safe_test.rb +52 -33
  108. data/test/unit/util_test.rb +55 -0
  109. data/test/unit/write_concern_test.rb +161 -0
  110. metadata +158 -171
  111. data/docs/CREDITS.md +0 -123
  112. data/docs/FAQ.md +0 -116
  113. data/docs/GRID_FS.md +0 -158
  114. data/docs/HISTORY.md +0 -392
  115. data/docs/READ_PREFERENCE.md +0 -99
  116. data/docs/RELEASES.md +0 -54
  117. data/docs/REPLICA_SETS.md +0 -113
  118. data/docs/TAILABLE_CURSORS.md +0 -51
  119. data/docs/TUTORIAL.md +0 -356
  120. data/docs/WRITE_CONCERN.md +0 -31
  121. data/lib/mongo/gridfs/grid_io_fix.rb +0 -38
  122. data/lib/mongo/version.rb +0 -3
  123. data/test/bson/test_helper.rb +0 -30
  124. data/test/replica_sets/basic_test.rb +0 -119
  125. data/test/replica_sets/complex_connect_test.rb +0 -57
  126. data/test/replica_sets/complex_read_preference_test.rb +0 -237
  127. data/test/replica_sets/connect_test.rb +0 -156
  128. data/test/replica_sets/cursor_test.rb +0 -70
  129. data/test/replica_sets/pooled_insert_test.rb +0 -57
  130. data/test/replica_sets/query_test.rb +0 -50
  131. data/test/replica_sets/read_preference_test.rb +0 -234
  132. data/test/replica_sets/refresh_test.rb +0 -156
  133. data/test/replica_sets/refresh_with_threads_test.rb +0 -60
  134. data/test/replica_sets/rs_test_helper.rb +0 -39
  135. data/test/safe_test.rb +0 -68
  136. data/test/sharded_cluster/mongo_config_test.rb +0 -126
  137. data/test/sharded_cluster/sc_test_helper.rb +0 -39
  138. data/test/tools/repl_set_manager.rb +0 -418
@@ -1,37 +1,40 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
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
- ensure_rs
8
- @conn = ReplSetConnection.new build_seeds(3)
9
- @db = @conn.db(MONGO_TEST_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
- @rs.restart_killed_nodes
16
- @conn.close if @conn
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}, :safe => {:w => 2})
23
+ @coll.save({:a => 20}, :w => 2)
21
24
 
22
- @rs.kill_primary
25
+ @rs.primary.stop
23
26
 
24
27
  rescue_connection_failure do
25
- @coll.save({:a => 30}, :safe => {:w => 2})
28
+ @coll.save({:a => 30}, :w => 2)
26
29
  end
27
30
 
28
- @coll.save({:a => 40}, :safe => {:w => 2})
29
- @coll.save({:a => 50}, :safe => {:w => 2})
30
- @coll.save({:a => 60}, :safe => {:w => 2})
31
- @coll.save({:a => 70}, :safe => {:w => 2})
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.restart_killed_nodes
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}, :safe => {:w => 2})
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
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
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
- ensure_rs
8
- @conn = ReplSetConnection.new(build_seeds(1))
6
+ ensure_cluster(:rs)
7
+ @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
9
8
 
10
- @slave1 = Connection.new(@conn.secondary_pools[0].host,
11
- @conn.secondary_pools[0].port, :slave_ok => true)
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 = @conn.db(MONGO_TEST_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
- @rs.restart_killed_nodes
22
- @conn.close if @conn
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}, :safe => {:w => 4, :wtimeout => 1, :fsync => true})
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}, :safe => {:w => 4, :wtimeout => 1, :fsync => true})
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}, :safe => {:w => 4, :wtimeout => 1, :fsync => true})
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"}, :safe => {:w => 3, :wtimeout => 5000})
42
+ @col.insert({:baz => "bar"}, :w => 3, :wtimeout => 5000)
39
43
 
40
- assert @col.insert({:foo => "0" * 5000}, :safe => {:w => 3, :wtimeout => 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"}, :safe => {:w => 3, :wtimeout => 5000})
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({}, :safe => {:w => 3, :wtimeout => 5000})
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"}, :multi => true)
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
- $:.unshift(File.expand_path('../..', File.dirname(__FILE__)))
2
- require 'test/sharded_cluster/sc_test_helper'
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
- ensure_sc
7
+ ensure_cluster(:sc)
26
8
  end
27
9
 
28
- def teardown
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
- @con = Mongo::ShardedConnection.new(seeds)
36
- assert @con.connected?
37
- assert_equal(seeds.size, @con.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
- @con.close
22
+ @client.close
40
23
  end
41
24
 
42
25
  def test_hard_refresh
43
26
  seeds = @sc.mongos_seeds
44
- @con = Mongo::ShardedConnection.new(seeds)
45
- assert @con.connected?
46
- @con.hard_refresh!
47
- assert @con.connected?
48
- @con.close
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
- @con = Mongo::ShardedConnection.new(seeds)
54
- assert @con.connected?
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 @con.connected?
59
- @con.close
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
- @con = Mongo::ShardedConnection.new(seeds)
65
- assert @con.connected?
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 @con.connected?
71
- @con.close
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
- @con = Mongo::ShardedConnection.new(seeds)
77
- assert @con.connected?
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
- #p @con.manager.primary
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 @con.connected?
74
+ assert_false @client.connected?
93
75
  routers = @sc.servers(:routers).reverse
94
76
  routers.each do |r|
95
77
  r.start
96
- @con.hard_refresh!
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
- @con.close
84
+ @client.close
104
85
  end
105
86
 
106
87
  private
107
88
 
108
89
  def probe(size)
109
- assert_equal(size, @con['config']['mongos'].find.to_a.size)
90
+ assert_equal(size, @client['config']['mongos'].find.to_a.size)
110
91
  end
111
92
 
112
93
  end