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.
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