177 lines
5.3 KiB
Ruby
177 lines
5.3 KiB
Ruby
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
require './test/replica_sets/rs_test_helper'
|
|
|
|
class ConnectTest < Test::Unit::TestCase
|
|
def setup
|
|
ensure_rs
|
|
end
|
|
|
|
def teardown
|
|
@rs.restart_killed_nodes
|
|
@conn.close if defined?(@conn) && @conn
|
|
end
|
|
|
|
# TODO: test connect timeout.
|
|
|
|
def test_connect_with_deprecated_multi
|
|
silently do
|
|
@conn = Connection.multi([[@rs.host, @rs.ports[0]], [@rs.host, @rs.ports[1]]], :name => @rs.name)
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_bad_name
|
|
assert_raise_error(ReplicaSetConnectionError, "-wrong") do
|
|
@conn = ReplSetConnection.new(build_seeds(3), :name => @rs.name + "-wrong")
|
|
end
|
|
end
|
|
|
|
def test_connect_with_primary_node_killed
|
|
@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 build_seeds(3)
|
|
end
|
|
|
|
# This allows the secondary to come up as a primary
|
|
rescue_connection_failure do
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
end
|
|
end
|
|
|
|
def test_connect_with_secondary_node_killed
|
|
@rs.kill_secondary
|
|
|
|
rescue_connection_failure do
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
end
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_with_third_node_killed
|
|
@rs.kill(@rs.get_node_from_port(@rs.ports[2]))
|
|
|
|
rescue_connection_failure do
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
end
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_with_primary_stepped_down
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
@conn[MONGO_TEST_DB]['bar'].save({:a => 1}, {:safe => {:w => 3}})
|
|
assert @conn[MONGO_TEST_DB]['bar'].find_one
|
|
|
|
primary = Mongo::Connection.new(@conn.primary_pool.host, @conn.primary_pool.port)
|
|
assert_raise Mongo::ConnectionFailure do
|
|
primary['admin'].command({:replSetStepDown => 60})
|
|
end
|
|
assert @conn.connected?
|
|
assert_raise Mongo::ConnectionFailure do
|
|
@conn[MONGO_TEST_DB]['bar'].find_one
|
|
end
|
|
assert !@conn.connected?
|
|
|
|
rescue_connection_failure do
|
|
@conn[MONGO_TEST_DB]['bar'].find_one
|
|
end
|
|
end
|
|
|
|
def test_save_with_primary_stepped_down
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
|
|
primary = Mongo::Connection.new(@conn.primary_pool.host, @conn.primary_pool.port)
|
|
|
|
# Adding force=true to avoid 'no secondaries within 10 seconds of my optime' errors
|
|
step_down_command = BSON::OrderedHash.new
|
|
step_down_command[:replSetStepDown] = 60
|
|
step_down_command[:force] = true
|
|
assert_raise Mongo::ConnectionFailure do
|
|
primary['admin'].command(step_down_command)
|
|
end
|
|
|
|
rescue_connection_failure do
|
|
@conn[MONGO_TEST_DB]['bar'].save({:a => 1}, {:safe => {:w => 3}})
|
|
end
|
|
end
|
|
|
|
def test_connect_with_connection_string
|
|
silently do
|
|
@conn = Connection.from_uri("mongodb://#{@rs.host}:#{@rs.ports[0]},#{@rs.host}:#{@rs.ports[1]}?replicaset=#{@rs.name}")
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_with_connection_string_in_env_var
|
|
begin
|
|
old_mongodb_uri = ENV['MONGODB_URI']
|
|
ENV['MONGODB_URI'] = "mongodb://#{@rs.host}:#{@rs.ports[0]},#{@rs.host}:#{@rs.ports[1]}?replicaset=#{@rs.name}"
|
|
silently do
|
|
@conn = ReplSetConnection.new
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
ensure
|
|
ENV['MONGODB_URI'] = old_mongodb_uri
|
|
end
|
|
end
|
|
|
|
def test_connect_with_connection_string_in_implicit_mongodb_uri
|
|
begin
|
|
old_mongodb_uri = ENV['MONGODB_URI']
|
|
ENV['MONGODB_URI'] = "mongodb://#{@rs.host}:#{@rs.ports[0]},#{@rs.host}:#{@rs.ports[1]}?replicaset=#{@rs.name}"
|
|
silently do
|
|
@conn = Connection.from_uri
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
ensure
|
|
ENV['MONGODB_URI'] = old_mongodb_uri
|
|
end
|
|
end
|
|
|
|
def test_connect_with_new_seed_format
|
|
@conn = ReplSetConnection.new build_seeds(3)
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_with_old_seed_format
|
|
silently do
|
|
@conn = ReplSetConnection.new([@rs.host, @rs.ports[0]], [@rs.host, @rs.ports[1]], [@rs.host, @rs.ports[2]])
|
|
end
|
|
assert @conn.connected?
|
|
end
|
|
|
|
def test_connect_with_full_connection_string
|
|
silently do
|
|
@conn = Connection.from_uri("mongodb://#{@rs.host}:#{@rs.ports[0]},#{@rs.host}:#{@rs.ports[1]}?replicaset=#{@rs.name};safe=true;w=2;fsync=true;slaveok=true")
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
assert_equal 2, @conn.safe[:w]
|
|
assert @conn.safe[:fsync]
|
|
assert @conn.read_pool
|
|
end
|
|
|
|
def test_connect_with_full_connection_string_in_env_var
|
|
begin
|
|
old_mongodb_uri = ENV['MONGODB_URI']
|
|
ENV['MONGODB_URI'] = "mongodb://#{@rs.host}:#{@rs.ports[0]},#{@rs.host}:#{@rs.ports[1]}?replicaset=#{@rs.name};safe=true;w=2;fsync=true;slaveok=true"
|
|
silently do
|
|
@conn = ReplSetConnection.new
|
|
end
|
|
assert @conn.is_a?(ReplSetConnection)
|
|
assert @conn.connected?
|
|
assert_equal 2, @conn.safe[:w]
|
|
assert @conn.safe[:fsync]
|
|
assert @conn.read_pool
|
|
ensure
|
|
ENV['MONGODB_URI'] = old_mongodb_uri
|
|
end
|
|
end
|
|
end
|