2010-10-21 18:33:48 +00:00
|
|
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2010-12-14 18:14:45 +00:00
|
|
|
require './test/replica_sets/rs_test_helper'
|
2010-10-21 18:33:48 +00:00
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
# NOTE: This test expects a replica set of three nodes to be running on RS.host,
|
|
|
|
# on ports TEST_PORT, RS.ports[1], and TEST + 2.
|
2010-10-21 18:33:48 +00:00
|
|
|
class ConnectTest < Test::Unit::TestCase
|
|
|
|
include Mongo
|
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
def setup
|
|
|
|
RS.restart_killed_nodes
|
|
|
|
end
|
|
|
|
|
2010-12-14 22:38:52 +00:00
|
|
|
def teardown
|
|
|
|
RS.restart_killed_nodes
|
|
|
|
end
|
|
|
|
|
2010-12-15 19:16:05 +00:00
|
|
|
def test_connect_with_deprecated_multi
|
|
|
|
@conn = Connection.multi([[RS.host, RS.ports[0]], [RS.host, RS.ports[1]]], :name => RS.name)
|
|
|
|
assert @conn.connected?
|
|
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
|
|
end
|
|
|
|
|
2010-11-03 19:12:15 +00:00
|
|
|
def test_connect_bad_name
|
2010-12-14 18:14:45 +00:00
|
|
|
assert_raise_error(ReplicaSetConnectionError, "-wrong") do
|
|
|
|
ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]], :rs_name => RS.name + "-wrong")
|
2010-11-03 19:12:15 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2010-10-21 18:33:48 +00:00
|
|
|
def test_connect
|
2010-12-14 18:14:45 +00:00
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]], :name => RS.name)
|
|
|
|
assert @conn.connected?
|
2010-12-29 18:01:05 +00:00
|
|
|
assert @conn.read_primary?
|
2010-12-14 18:14:45 +00:00
|
|
|
|
|
|
|
assert_equal RS.primary, @conn.primary
|
2010-12-14 20:47:18 +00:00
|
|
|
assert_equal RS.secondaries.sort, @conn.secondaries.sort
|
|
|
|
assert_equal RS.arbiters.sort, @conn.arbiters.sort
|
2010-12-14 18:14:45 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_connect_with_primary_node_killed
|
|
|
|
node = RS.kill_primary
|
|
|
|
|
|
|
|
# Becuase we're killing the primary and trying to connect right away,
|
|
|
|
# this is going to fail right away.
|
|
|
|
assert_raise_error(ConnectionFailure, "Failed to connect to primary node") do
|
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]])
|
|
|
|
end
|
|
|
|
|
|
|
|
# This allows the secondary to come up as a primary
|
|
|
|
rescue_connection_failure do
|
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]])
|
|
|
|
end
|
2010-10-21 18:33:48 +00:00
|
|
|
assert @conn.connected?
|
|
|
|
end
|
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
def test_connect_with_secondary_node_killed
|
|
|
|
node = RS.kill_secondary
|
2010-10-21 18:33:48 +00:00
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]])
|
2010-10-21 18:33:48 +00:00
|
|
|
assert @conn.connected?
|
|
|
|
end
|
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
def test_connect_with_third_node_killed
|
|
|
|
RS.kill(RS.get_node_from_port(RS.ports[2]))
|
2010-10-21 18:33:48 +00:00
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]])
|
2010-10-21 18:33:48 +00:00
|
|
|
assert @conn.connected?
|
|
|
|
end
|
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
def test_connect_with_primary_stepped_down
|
|
|
|
RS.step_down_primary
|
2010-10-21 18:33:48 +00:00
|
|
|
|
2010-12-14 18:14:45 +00:00
|
|
|
rescue_connection_failure do
|
|
|
|
@conn = ReplSetConnection.new([RS.host, RS.ports[0]], [RS.host, RS.ports[1]],
|
|
|
|
[RS.host, RS.ports[2]])
|
|
|
|
end
|
2010-10-21 18:33:48 +00:00
|
|
|
assert @conn.connected?
|
|
|
|
end
|
2010-12-14 18:14:45 +00:00
|
|
|
|
2010-10-21 18:33:48 +00:00
|
|
|
end
|