mirror of
https://github.com/jimeh/amqp-failover.git
synced 2026-02-19 02:46:43 +00:00
failover integration spec is "complete", for now
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user