failover integration spec is "complete", for now

This commit is contained in:
2011-02-01 10:41:05 +00:00
parent ec9810ea62
commit a88d3b3284

View File

@@ -8,7 +8,7 @@ require 'logger_helper'
describe "Full Failover support of AMQP gem" do
before(:all) do
before(:each) do
@flog = LoggerHelper.new
AMQP::Failover.logger = @flog
end
@@ -19,10 +19,11 @@ describe "Full Failover support of AMQP gem" do
end
it "should be able to connect" do
port1 = 15672
EM.run {
serv = start_server(15672)
serv = start_server(port1)
EM.add_timer(0.1) {
conn = AMQP.connect(:host => 'localhost', :port => 15672)
conn = AMQP.connect(:host => 'localhost', :port => port1)
conn.failover.should be_nil
EM.add_timer(0.1) {
conn.should be_connected
@@ -33,26 +34,32 @@ describe "Full Failover support of AMQP gem" do
end
it "should be able to connect and failover" do
port1 = 25672
port2 = 35672
EM.run {
serv1 = start_server(25672)
serv2 = start_server(35672)
# start mock amqp servers
serv1 = start_server(port1)
serv2 = start_server(port2)
EM.add_timer(0.1) {
conn = AMQP.connect({:hosts => [{:port => 25672}, {:port => 35672}]})
conn.failover.primary[:port].should == 25672
conn.settings[:port].should == 25672
# start amqp client connection and make sure it's picked the right config
conn = AMQP.connect({:hosts => [{:port => port1}, {:port => port2}]})
conn.failover.primary[:port].should == port1
conn.settings[:port].should == port1
conn.settings.should == conn.failover.primary
EM.add_timer(0.1) {
# make sure client connected to the correct server, then kill server
conn.should be_connected
serv1.log.should have(3).items
serv2.log.should have(0).items
serv1.stop
EM.add_timer(0.1) {
# make sure client performed a failover when primary server died
conn.should be_connected
[:error, :info].each do |i|
@flog.send("#{i}_log").should have(1).item
@flog.send("#{i}_log")[0][0].should match(/connect to or lost connection.+25672.+attempting connection.+35672/i)
@flog.send("#{i}_log")[0][0].should match(/connect to or lost connection.+#{port1}.+attempting connection.+#{port2}/i)
end
conn.settings[:port].should == 35672
conn.settings[:port].should == port2
serv1.log.should have(3).items
serv2.log.should have(3).items
conn.close
@@ -66,4 +73,51 @@ describe "Full Failover support of AMQP gem" do
}
end
it "should be able to fallback when primary server returns" do
port1 = 45672
port2 = 55672
lambda {
EM.run {
# start mock amqp servers
serv1 = start_server(port1)
serv2 = start_server(port2)
EM.add_timer(0.1) {
# start amqp client connection and make sure it's picked the right config
conn = AMQP.connect({:hosts => [{:port => port1}, {:port => port2}], :fallback => true, :fallback_interval => 0.1})
conn.failover.primary[:port].should == port1
conn.settings[:port].should == port1
conn.settings.should == conn.failover.primary
EM.add_timer(0.1) {
# make sure client connected to the correct server, then kill server
conn.should be_connected
serv1.log.should have(3).items
serv2.log.should have(0).items
serv1.stop
EM.add_timer(0.1) {
# make sure client performed a failover when primary server died
conn.should be_connected
[:error, :info].each do |i|
@flog.send("#{i}_log").should have(1).item
@flog.send("#{i}_log")[0][0].should match(/connect to or lost connection.+#{port1}.+attempting connection.+#{port2}/i)
end
conn.settings[:port].should == port2
serv1.log.should have(3).items
serv2.log.should have(3).items
serv3 = start_server(port1)
EM.add_timer(0.2) {
# by this point client should have raised a SystemExit exception
serv2.stop
EM.stop
}
}
}
}
}
}.should raise_error(SystemExit, "exit")
[:error, :info].each do |i|
@flog.send("#{i}_log").should have(2).item
@flog.send("#{i}_log")[1][0].should match(/primary server.+45672.+performing clean exit/i)
end
end
end