right_agent 0.5.1 → 0.5.10
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.
- data/lib/right_agent.rb +3 -13
- data/lib/right_agent/actors/agent_manager.rb +78 -4
- data/lib/right_agent/agent.rb +81 -4
- data/lib/right_agent/agent_config.rb +17 -1
- data/lib/right_agent/agent_tags_manager.rb +2 -2
- data/lib/right_agent/broker_client.rb +32 -34
- data/lib/right_agent/command/agent_manager_commands.rb +16 -0
- data/lib/right_agent/command/command_constants.rb +0 -9
- data/lib/right_agent/dispatcher.rb +6 -3
- data/lib/right_agent/ha_broker_client.rb +63 -14
- data/lib/right_agent/log.rb +1 -1
- data/lib/right_agent/minimal.rb +43 -0
- data/lib/right_agent/monkey_patches/amqp_patch.rb +91 -182
- data/lib/right_agent/packets.rb +10 -5
- data/lib/right_agent/platform.rb +8 -0
- data/lib/right_agent/platform/darwin.rb +14 -0
- data/lib/right_agent/platform/linux.rb +23 -0
- data/lib/right_agent/platform/windows.rb +31 -0
- data/lib/right_agent/scripts/agent_controller.rb +16 -8
- data/lib/right_agent/scripts/agent_deployer.rb +6 -0
- data/lib/right_agent/scripts/log_level_manager.rb +4 -5
- data/lib/right_agent/scripts/stats_manager.rb +9 -1
- data/lib/right_agent/sender.rb +623 -371
- data/lib/right_agent/stats_helper.rb +15 -1
- data/lib/right_agent/tracer.rb +1 -1
- data/right_agent.gemspec +14 -15
- data/spec/agent_config_spec.rb +9 -0
- data/spec/agent_spec.rb +154 -18
- data/spec/broker_client_spec.rb +171 -170
- data/spec/dispatcher_spec.rb +24 -8
- data/spec/ha_broker_client_spec.rb +55 -33
- data/spec/monkey_patches/amqp_patch_spec.rb +12 -0
- data/spec/packets_spec.rb +2 -0
- data/spec/sender_spec.rb +140 -69
- data/spec/stats_helper_spec.rb +5 -0
- metadata +54 -53
@@ -515,6 +515,7 @@ module RightScale
|
|
515
515
|
sprintf("%-#{name_width}s#{SEPARATOR}%s\n", "last reset", time_at(stats["last reset time"])) +
|
516
516
|
sprintf("%-#{name_width}s#{SEPARATOR}%s\n", "service up", elapsed(stats["service uptime"]))
|
517
517
|
str += sprintf("%-#{name_width}s#{SEPARATOR}%s\n", "machine up", elapsed(stats["machine uptime"])) if stats.has_key?("machine uptime")
|
518
|
+
str += sprintf("%-#{name_width}s#{SEPARATOR}%s\n", "memory KB", stats["memory"]) if stats.has_key?("memory")
|
518
519
|
str += sprintf("%-#{name_width}s#{SEPARATOR}%s\n", "version", stats["version"].to_i) if stats.has_key?("version")
|
519
520
|
str += brokers_str(stats["brokers"], name_width) if stats.has_key?("brokers")
|
520
521
|
stats.to_a.sort.each { |k, v| str += sub_stats_str(k[0..-7], v, name_width) if k.to_s =~ /stats$/ }
|
@@ -537,6 +538,7 @@ module RightScale
|
|
537
538
|
# "exceptions"(Hash|nil):: Exceptions raised per category, or nil if none
|
538
539
|
# "total"(Integer):: Total exceptions for this category
|
539
540
|
# "recent"(Array):: Most recent as a hash of "count", "type", "message", "when", and "where"
|
541
|
+
# "heartbeat"(Integer|nil):: Number of seconds between AMQP heartbeats, or nil if heartbeat disabled
|
540
542
|
# "returns"(Hash|nil):: Message return activity stats with keys "total", "percent", "last", and "rate"
|
541
543
|
# with percentage breakdown per request type, or nil if none
|
542
544
|
# name_width(Integer):: Fixed width for left-justified name display
|
@@ -571,6 +573,13 @@ module RightScale
|
|
571
573
|
exceptions_str(brokers["exceptions"], sub_value_indent) + "\n"
|
572
574
|
end
|
573
575
|
str += value_indent
|
576
|
+
str += sprintf("%-#{sub_name_width}s#{SEPARATOR}", "heartbeat")
|
577
|
+
str += if [nil, 0].include?(brokers["heartbeat"])
|
578
|
+
"none\n"
|
579
|
+
else
|
580
|
+
"#{brokers["heartbeat"]} sec\n"
|
581
|
+
end
|
582
|
+
str += value_indent
|
574
583
|
str += sprintf("%-#{sub_name_width}s#{SEPARATOR}", "returns")
|
575
584
|
str += if brokers["returns"].nil? || brokers["returns"].empty?
|
576
585
|
"none\n"
|
@@ -652,6 +661,11 @@ module RightScale
|
|
652
661
|
str += ", last: #{last_activity_str(value['last'], single_item = true)}" if value["last"]
|
653
662
|
str += ", rate: #{enough_precision(value['rate'])}/sec" if value["rate"]
|
654
663
|
str += ", duration: #{enough_precision(value['duration'])} sec" if value["duration"]
|
664
|
+
value.each do |name, data|
|
665
|
+
unless ["total", "percent", "last", "rate", "duration"].include?(name)
|
666
|
+
str += ", #{name}: #{data.is_a?(String) ? data : data.inspect}"
|
667
|
+
end
|
668
|
+
end
|
655
669
|
str
|
656
670
|
end
|
657
671
|
|
@@ -728,4 +742,4 @@ module RightScale
|
|
728
742
|
|
729
743
|
end # StatsHelper
|
730
744
|
|
731
|
-
end # RightScale
|
745
|
+
end # RightScale
|
data/lib/right_agent/tracer.rb
CHANGED
@@ -33,7 +33,7 @@ module RightScale
|
|
33
33
|
|
34
34
|
class Tracer
|
35
35
|
|
36
|
-
NON_TRACEABLE_CLASSES = [ 'Kernel', 'Module', 'Object' , 'SyslogLogger', 'RightSupport::SystemLogger' ] +
|
36
|
+
NON_TRACEABLE_CLASSES = [ 'Kernel', 'Module', 'Object' , 'SyslogLogger', 'RightSupport::Log::SystemLogger' ] +
|
37
37
|
[ 'RightScale::Tracer', 'RightScale::Multiplexer' ] +
|
38
38
|
[ 'RightScale::Log', 'RightScale::Log::Formatter' ]
|
39
39
|
|
data/right_agent.gemspec
CHANGED
@@ -24,7 +24,7 @@ require 'rubygems'
|
|
24
24
|
|
25
25
|
Gem::Specification.new do |spec|
|
26
26
|
spec.name = 'right_agent'
|
27
|
-
spec.version = '0.5.
|
27
|
+
spec.version = '0.5.10'
|
28
28
|
spec.authors = ['Lee Kirchhoff', 'Raphael Simon', 'Tony Spataro']
|
29
29
|
spec.email = 'lee@rightscale.com'
|
30
30
|
spec.homepage = 'https://github.com/rightscale/right_agent'
|
@@ -36,22 +36,21 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.required_ruby_version = '>= 1.8.7'
|
37
37
|
spec.require_path = 'lib'
|
38
38
|
|
39
|
-
spec.add_dependency('right_support')
|
40
|
-
spec.add_dependency('amqp',
|
41
|
-
spec.add_dependency('json', [
|
42
|
-
spec.add_dependency('eventmachine',
|
43
|
-
spec.add_dependency('right_popen',
|
44
|
-
spec.add_dependency('msgpack',
|
39
|
+
spec.add_dependency('right_support', '~> 1.0')
|
40
|
+
spec.add_dependency('amqp', '0.7.1')
|
41
|
+
spec.add_dependency('json', ['~> 1.4'])
|
42
|
+
spec.add_dependency('eventmachine', '~> 0.12.10')
|
43
|
+
spec.add_dependency('right_popen', '~> 1.0.11')
|
44
|
+
spec.add_dependency('msgpack', '0.4.4')
|
45
45
|
|
46
46
|
spec.description = <<-EOF
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
Similarly a RightAgent can also make requests of other RightAgents in the
|
47
|
+
RightAgent provides a foundation for running an agent on a server to interface
|
48
|
+
in a secure fashion with other agents in the RightScale system. A RightAgent
|
49
|
+
uses RabbitMQ as the message bus and the RightScale mapper as the routing node.
|
50
|
+
Servers running a RightAgent establish a queue on startup for receiving packets
|
51
|
+
routed to it via the mapper. The packets are structured to invoke services in
|
52
|
+
the agent represented by actors and methods. The RightAgent may respond to these
|
53
|
+
requests with a result packet that the mapper then routes to the originator.
|
55
54
|
EOF
|
56
55
|
|
57
56
|
candidates = Dir.glob("{lib,spec}/**/*") +
|
data/spec/agent_config_spec.rb
CHANGED
@@ -63,6 +63,7 @@ describe RightScale::AgentConfig do
|
|
63
63
|
@agent_options2 = {
|
64
64
|
:identity => @agent_id2,
|
65
65
|
:root_dir => @root_dir2,
|
66
|
+
:pid_dir => @pid_dir
|
66
67
|
}
|
67
68
|
FileUtils.mkdir_p(@cfg_agent2_dir = File.join(@cfg_dir, 'agent_2'))
|
68
69
|
FileUtils.touch([@cfg_agent2 = File.join(@cfg_agent2_dir, 'config.yml')])
|
@@ -223,4 +224,12 @@ describe RightScale::AgentConfig do
|
|
223
224
|
@agent_config.agent_options("no_agent").should == {}
|
224
225
|
end
|
225
226
|
|
227
|
+
it 'should return the name of agents that are running' do
|
228
|
+
flexmock(Process).should_receive(:getpgid).with(@pid).and_return(123)
|
229
|
+
@agent_config.cfg_dir = @cfg_dir
|
230
|
+
@agent_config.cfg_agents.should =~ ['agent_1', 'agent_2']
|
231
|
+
@agent_config.running_agents.should =~ ['agent_1']
|
232
|
+
@agent_config.running_agents(/core/).should =~ []
|
233
|
+
end
|
234
|
+
|
226
235
|
end
|
data/spec/agent_spec.rb
CHANGED
@@ -37,7 +37,8 @@ describe RightScale::Agent do
|
|
37
37
|
describe "Default Option" do
|
38
38
|
|
39
39
|
before(:all) do
|
40
|
-
flexmock(RightScale::Log)
|
40
|
+
@log = flexmock(RightScale::Log)
|
41
|
+
@log.should_receive(:error).by_default.and_return { |m| raise RightScale::Log.format(*m) }
|
41
42
|
flexmock(EM).should_receive(:next_tick).and_yield
|
42
43
|
flexmock(EM).should_receive(:add_timer).and_yield
|
43
44
|
@timer = flexmock("timer")
|
@@ -101,6 +102,11 @@ describe RightScale::Agent do
|
|
101
102
|
@agent.options[:root_dir].should == Dir.pwd
|
102
103
|
end
|
103
104
|
|
105
|
+
it "for heartbeat is 60" do
|
106
|
+
@agent.options.should include(:heartbeat)
|
107
|
+
@agent.options[:heartbeat].should == 60
|
108
|
+
end
|
109
|
+
|
104
110
|
end
|
105
111
|
|
106
112
|
describe "Options from config.yml" do
|
@@ -120,7 +126,8 @@ describe RightScale::Agent do
|
|
120
126
|
describe "Passed in Options" do
|
121
127
|
|
122
128
|
before(:each) do
|
123
|
-
flexmock(RightScale::Log)
|
129
|
+
@log = flexmock(RightScale::Log)
|
130
|
+
@log.should_receive(:error).never.by_default
|
124
131
|
flexmock(EM).should_receive(:next_tick).and_yield
|
125
132
|
flexmock(EM).should_receive(:add_timer).and_yield
|
126
133
|
@timer = flexmock("timer")
|
@@ -204,6 +211,12 @@ describe RightScale::Agent do
|
|
204
211
|
@agent.options[:ping_time].should == 5
|
205
212
|
end
|
206
213
|
|
214
|
+
it "for heartbeat should override default (60)" do
|
215
|
+
@agent = RightScale::Agent.new(:heartbeat => 45, :identity => @identity)
|
216
|
+
@agent.options.should include(:heartbeat)
|
217
|
+
@agent.options[:heartbeat].should == 45
|
218
|
+
end
|
219
|
+
|
207
220
|
it "for root_dir should override default (#{File.dirname(__FILE__)})" do
|
208
221
|
root_dir = File.normalize_path(File.join(File.dirname(__FILE__), '..', '..'))
|
209
222
|
@agent = RightScale::Agent.new(:root_dir => root_dir, :identity => @identity)
|
@@ -234,7 +247,8 @@ describe RightScale::Agent do
|
|
234
247
|
describe "" do
|
235
248
|
|
236
249
|
before(:each) do
|
237
|
-
flexmock(RightScale::Log)
|
250
|
+
@log = flexmock(RightScale::Log)
|
251
|
+
@log.should_receive(:error).by_default.and_return { |m| raise RightScale::Log.format(*m) }
|
238
252
|
flexmock(EM).should_receive(:next_tick).and_yield
|
239
253
|
flexmock(EM).should_receive(:add_timer).and_yield
|
240
254
|
@timer = flexmock("timer")
|
@@ -244,14 +258,16 @@ describe RightScale::Agent do
|
|
244
258
|
flexmock(EM::PeriodicTimer).should_receive(:new).and_return(@periodic_timer)
|
245
259
|
@periodic_timer.should_receive(:cancel).by_default
|
246
260
|
@broker_id = "rs-broker-123-1"
|
247
|
-
@
|
261
|
+
@broker_id2 = "rs-broker-123-2"
|
262
|
+
@broker_ids = [@broker_id, @broker_id2]
|
248
263
|
@broker = flexmock("broker", :subscribe => @broker_ids, :publish => @broker_ids.first(1), :prefetch => true,
|
249
264
|
:all => @broker_ids, :connected => @broker_ids.first(1), :failed => @broker_ids.last(1),
|
250
265
|
:unusable => @broker_ids.last(1), :close_one => true, :non_delivery => true,
|
251
|
-
:stats => "", :
|
252
|
-
:
|
253
|
-
|
254
|
-
@broker.should_receive(:
|
266
|
+
:stats => "", :status => "status", :hosts => ["123"], :ports => [1, 2], :get => true,
|
267
|
+
:alias_ => "b1", :aliases => ["b1"]).by_default
|
268
|
+
@broker.should_receive(:connection_status).and_yield(:connected).by_default
|
269
|
+
@broker.should_receive(:identity_parts).with(@broker_id).and_return(["123", 1, 0, 0, nil])
|
270
|
+
@broker.should_receive(:identity_parts).with(@broker_id2).and_return(["123", 2, 1, 1, nil])
|
255
271
|
flexmock(RightScale::HABrokerClient).should_receive(:new).and_return(@broker)
|
256
272
|
flexmock(RightScale::PidFile).should_receive(:new).
|
257
273
|
and_return(flexmock("pid file", :check=>true, :write=>true, :remove=>true))
|
@@ -321,7 +337,7 @@ describe RightScale::Agent do
|
|
321
337
|
@agent.run
|
322
338
|
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, false, Proc).and_yield(@broker_ids.last).once
|
323
339
|
@broker.should_receive(:connection_status).and_yield(:failed)
|
324
|
-
|
340
|
+
@log.should_receive(:error).with(/Failed to connect to broker/).once
|
325
341
|
flexmock(@agent).should_receive(:update_configuration).never
|
326
342
|
@agent.connect("123", 2, 1, 1)
|
327
343
|
end
|
@@ -361,7 +377,7 @@ describe RightScale::Agent do
|
|
361
377
|
@broker.should_receive(:remove).never
|
362
378
|
@broker.should_receive(:close_one).never
|
363
379
|
flexmock(@agent).should_receive(:update_configuration).never
|
364
|
-
|
380
|
+
@log.should_receive(:error).with(/Not disconnecting.*last connected broker/).once
|
365
381
|
@agent.disconnect("123", 1)
|
366
382
|
end
|
367
383
|
end
|
@@ -421,6 +437,126 @@ describe RightScale::Agent do
|
|
421
437
|
|
422
438
|
end
|
423
439
|
|
440
|
+
describe "Tuning heartbeat" do
|
441
|
+
|
442
|
+
it "should tune heartbeat for all broker connections" do
|
443
|
+
run_in_em do
|
444
|
+
@log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker/).twice
|
445
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
446
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
447
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_return(true).once
|
448
|
+
@agent.run
|
449
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
450
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_yield(@broker_id).once
|
451
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
452
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).once
|
453
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
454
|
+
@agent.tune_heartbeat(45).should be_nil
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
it "should tune heartbeat for all broker connections as deferred task" do
|
459
|
+
run_in_em do
|
460
|
+
@log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker/).twice
|
461
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
462
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
463
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_return(true).once
|
464
|
+
@agent.run
|
465
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
466
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_yield(@broker_id).once
|
467
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
468
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).once
|
469
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
470
|
+
flexmock(@agent).should_receive(:finish_setup)
|
471
|
+
@agent.defer_task { @agent.tune_heartbeat(45).should be_nil }
|
472
|
+
@agent.__send__(:check_status)
|
473
|
+
@agent.instance_variable_get(:@deferred_tasks).should == []
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
it "should disable heartbeat for all broker connections" do
|
478
|
+
run_in_em do
|
479
|
+
@log.should_receive(:info).with(/Disabled heartbeat for broker/).twice
|
480
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
481
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
482
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 0).and_return(true).once
|
483
|
+
@agent.run
|
484
|
+
@broker.should_receive(:heartbeat=).with(0).once
|
485
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_yield(@broker_id).once
|
486
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
487
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).once
|
488
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
489
|
+
@agent.tune_heartbeat(0).should be_nil
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
it "should log error if any broker connect attempts fail" do
|
494
|
+
run_in_em do
|
495
|
+
@log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
|
496
|
+
@log.should_receive(:error).with("Failed to reconnect to broker #{@broker_id} to tune heartbeat", Exception, :trace).once
|
497
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
498
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
499
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_return(true).once
|
500
|
+
@agent.run
|
501
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
502
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_raise(Exception).once
|
503
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
504
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).never
|
505
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
506
|
+
@agent.tune_heartbeat(45).should == "Failed to tune heartbeat for brokers [\"#{@broker_id}\"]"
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
it "should log error if any brokers do not connect" do
|
511
|
+
run_in_em do
|
512
|
+
@log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
|
513
|
+
@log.should_receive(:error).with(/Failed to reconnect to broker #{@broker_id} to tune heartbeat, status/).once
|
514
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
515
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
516
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_return(true).once
|
517
|
+
@agent.run
|
518
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
519
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_yield(@broker_id).once
|
520
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
521
|
+
@broker.should_receive(:connection_status).with({:one_off => 60, :brokers => [@broker_id]}, Proc).and_yield(:failed)
|
522
|
+
@broker.should_receive(:connection_status).with({:one_off => 60, :brokers => [@broker_id2]}, Proc).and_yield(:connected)
|
523
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).never
|
524
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
525
|
+
@agent.tune_heartbeat(45).should be_nil
|
526
|
+
end
|
527
|
+
end
|
528
|
+
|
529
|
+
it "should log error if any broker queue setup fails" do
|
530
|
+
run_in_em do
|
531
|
+
@log.should_receive(:info).with(/Tuned heartbeat to 45 seconds for broker #{@broker_id2}/).once
|
532
|
+
@log.should_receive(:error).with(/Failed to setup queues for broker #{@broker_id} when tuning heartbeat/, Exception, :trace).once
|
533
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
534
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
535
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_return(true).once
|
536
|
+
@agent.run
|
537
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
538
|
+
@broker.should_receive(:connect).with("123", 1, 0, 0, nil, true, Proc).and_yield(@broker_id).once
|
539
|
+
@broker.should_receive(:connect).with("123", 2, 1, 1, nil, true, Proc).and_yield(@broker_id2).once
|
540
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id]).and_raise(Exception)
|
541
|
+
flexmock(@agent).should_receive(:setup_queues).with([@broker_id2]).once
|
542
|
+
@agent.tune_heartbeat(45).should be_nil
|
543
|
+
end
|
544
|
+
end
|
545
|
+
|
546
|
+
it "should log error if an exception is raised" do
|
547
|
+
run_in_em do
|
548
|
+
@log.should_receive(:error).with(/Failed tuning broker connection heartbeat/, Exception, :trace).once
|
549
|
+
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
550
|
+
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
551
|
+
flexmock(@agent).should_receive(:update_configuration).with(:heartbeat => 45).and_raise(Exception).once
|
552
|
+
@agent.run
|
553
|
+
@broker.should_receive(:heartbeat=).with(45).once
|
554
|
+
@agent.tune_heartbeat(45).should =~ /Failed tuning broker connection heartbeat/
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
end
|
559
|
+
|
424
560
|
describe "Terminating" do
|
425
561
|
|
426
562
|
it "should close unusable broker connections at start of termination" do
|
@@ -477,8 +613,8 @@ describe RightScale::Agent do
|
|
477
613
|
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
478
614
|
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
479
615
|
@agent.run
|
480
|
-
|
481
|
-
|
616
|
+
@log.should_receive(:info).with(/Agent rs-instance-123-1 terminating/).once
|
617
|
+
@log.should_receive(:info).with(/Termination waiting 9 seconds for/).once
|
482
618
|
@agent.terminate
|
483
619
|
end
|
484
620
|
end
|
@@ -492,8 +628,8 @@ describe RightScale::Agent do
|
|
492
628
|
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
493
629
|
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
494
630
|
@agent.run
|
495
|
-
|
496
|
-
|
631
|
+
@log.should_receive(:info).with(/Agent rs-instance-123-1 terminating/).once
|
632
|
+
@log.should_receive(:info).with(/Termination waiting/).never
|
497
633
|
@agent.terminate
|
498
634
|
end
|
499
635
|
end
|
@@ -508,10 +644,10 @@ describe RightScale::Agent do
|
|
508
644
|
@agent = RightScale::Agent.new(:user => "me", :identity => @identity)
|
509
645
|
flexmock(@agent).should_receive(:load_actors).and_return(true)
|
510
646
|
@agent.run
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
647
|
+
@log.should_receive(:info).with(/Agent rs-instance-123-1 terminating/).once
|
648
|
+
@log.should_receive(:info).with(/Termination waiting/).once
|
649
|
+
@log.should_receive(:info).with(/Continuing with termination/).once
|
650
|
+
@log.should_receive(:info).with(/The following 1 request/).once
|
515
651
|
@agent.terminate
|
516
652
|
end
|
517
653
|
end
|
data/spec/broker_client_spec.rb
CHANGED
@@ -27,17 +27,18 @@ describe RightScale::BrokerClient do
|
|
27
27
|
include FlexMock::ArgumentTypes
|
28
28
|
|
29
29
|
before(:each) do
|
30
|
-
flexmock(RightScale::Log)
|
31
|
-
|
32
|
-
|
30
|
+
@log = flexmock(RightScale::Log)
|
31
|
+
@log.should_receive(:error).by_default.and_return { |m| raise RightScale::Log.format(*m) }
|
32
|
+
@log.should_receive(:warning).by_default.and_return { |m| raise RightScale::Log.format(*m) }
|
33
|
+
@log.should_receive(:info).by_default
|
33
34
|
@serializer = flexmock("serializer")
|
34
35
|
@exceptions = flexmock("exception_stats")
|
35
36
|
@exceptions.should_receive(:track).never.by_default
|
36
37
|
@connection = flexmock("connection")
|
37
38
|
@connection.should_receive(:connection_status).by_default
|
38
39
|
flexmock(AMQP).should_receive(:connect).and_return(@connection).by_default
|
39
|
-
@
|
40
|
-
@
|
40
|
+
@channel = flexmock("AMQP connection channel")
|
41
|
+
@channel.should_receive(:connection).and_return(@connection).by_default
|
41
42
|
@identity = "rs-broker-localhost-5672"
|
42
43
|
@address = {:host => "localhost", :port => 5672, :index => 0}
|
43
44
|
@options = {}
|
@@ -48,8 +49,8 @@ describe RightScale::BrokerClient do
|
|
48
49
|
before(:each) do
|
49
50
|
@amqp = flexmock(AMQP)
|
50
51
|
@amqp.should_receive(:connect).and_return(@connection).by_default
|
51
|
-
@
|
52
|
-
flexmock(
|
52
|
+
@channel.should_receive(:prefetch).never.by_default
|
53
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
53
54
|
@island = flexmock("island", :id => 2, :broker_hosts => "local_host").by_default
|
54
55
|
end
|
55
56
|
|
@@ -110,16 +111,16 @@ describe RightScale::BrokerClient do
|
|
110
111
|
end
|
111
112
|
|
112
113
|
it "should log an info message when it creates an AMQP connection" do
|
113
|
-
|
114
|
+
@log.should_receive(:info).with(/Connecting to broker/).once
|
114
115
|
RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
115
116
|
end
|
116
117
|
|
117
118
|
it "should log an error and set status to :failed if it fails to create an AMQP connection" do
|
118
119
|
@exceptions.should_receive(:track).once
|
119
120
|
@connection.should_receive(:close).once
|
120
|
-
|
121
|
-
|
122
|
-
flexmock(
|
121
|
+
@log.should_receive(:info).once
|
122
|
+
@log.should_receive(:error).with(/Failed connecting/, Exception, :trace).once
|
123
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_raise(Exception)
|
123
124
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
124
125
|
broker.summary.should == {:alias => "b0", :identity => @identity, :status => :failed,
|
125
126
|
:disconnects => 0, :failures => 1, :retries => 0}
|
@@ -131,7 +132,7 @@ describe RightScale::BrokerClient do
|
|
131
132
|
end
|
132
133
|
|
133
134
|
it "should set broker prefetch value if specified" do
|
134
|
-
@
|
135
|
+
@channel.should_receive(:prefetch).with(1).once
|
135
136
|
RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, {:prefetch => 1})
|
136
137
|
end
|
137
138
|
|
@@ -149,17 +150,17 @@ describe RightScale::BrokerClient do
|
|
149
150
|
@bind = flexmock("bind")
|
150
151
|
@queue = flexmock("queue")
|
151
152
|
@queue.should_receive(:bind).and_return(@bind).by_default
|
152
|
-
@
|
153
|
-
@
|
154
|
-
@
|
155
|
-
flexmock(
|
153
|
+
@channel.should_receive(:queue).and_return(@queue).by_default
|
154
|
+
@channel.should_receive(:direct).and_return(@direct).by_default
|
155
|
+
@channel.should_receive(:fanout).and_return(@fanout).by_default
|
156
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
156
157
|
end
|
157
158
|
|
158
159
|
it "should subscribe queue to exchange" do
|
159
160
|
@queue.should_receive(:bind).and_return(@bind).once
|
160
161
|
@bind.should_receive(:subscribe).once
|
161
162
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
162
|
-
broker.__send__(:update_status, :
|
163
|
+
broker.__send__(:update_status, :connected)
|
163
164
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}) {|_, _|}
|
164
165
|
end
|
165
166
|
|
@@ -167,7 +168,7 @@ describe RightScale::BrokerClient do
|
|
167
168
|
@queue.should_receive(:bind).and_return(@bind).twice
|
168
169
|
@bind.should_receive(:subscribe).once
|
169
170
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
170
|
-
broker.__send__(:update_status, :
|
171
|
+
broker.__send__(:update_status, :connected)
|
171
172
|
options = {:exchange2 => {:type => :fanout, :name => "exchange2", :options => {:durable => true}}}
|
172
173
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}, options) {|_, _|}
|
173
174
|
end
|
@@ -181,7 +182,7 @@ describe RightScale::BrokerClient do
|
|
181
182
|
it "should subscribe queue to empty exchange if no exchange specified" do
|
182
183
|
@queue.should_receive(:subscribe).once
|
183
184
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
184
|
-
broker.__send__(:update_status, :
|
185
|
+
broker.__send__(:update_status, :connected)
|
185
186
|
broker.subscribe({:name => "queue"}) {|b, p| p.should == nil}
|
186
187
|
end
|
187
188
|
|
@@ -215,7 +216,7 @@ describe RightScale::BrokerClient do
|
|
215
216
|
@info.should_receive(:ack).once
|
216
217
|
@bind.should_receive(:subscribe).and_yield(@info, @message).once
|
217
218
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
218
|
-
broker.__send__(:update_status, :
|
219
|
+
broker.__send__(:update_status, :connected)
|
219
220
|
result = broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"},
|
220
221
|
:ack => true, RightScale::Request => true) {|b, p| p.should == @packet}
|
221
222
|
result.should be_true
|
@@ -230,64 +231,64 @@ describe RightScale::BrokerClient do
|
|
230
231
|
end
|
231
232
|
|
232
233
|
it "should receive message causing it to be unserialized and logged" do
|
233
|
-
|
234
|
-
|
235
|
-
|
234
|
+
@log.should_receive(:info).with(/Connecting/).once
|
235
|
+
@log.should_receive(:info).with(/Subscribing/).once
|
236
|
+
@log.should_receive(:info).with(/RECV/).once
|
236
237
|
@serializer.should_receive(:load).with(@message).and_return(@packet).once
|
237
238
|
@bind.should_receive(:subscribe).and_yield(@message).once
|
238
239
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
239
|
-
broker.__send__(:update_status, :
|
240
|
+
broker.__send__(:update_status, :connected)
|
240
241
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"},
|
241
242
|
RightScale::Request => nil) {|b, p| p.class.should == RightScale::Request}
|
242
243
|
end
|
243
244
|
|
244
245
|
it "should receive message and log exception if subscribe block fails" do
|
245
|
-
|
246
|
-
|
247
|
-
|
246
|
+
@log.should_receive(:info).with(/Connecting/).once
|
247
|
+
@log.should_receive(:info).with(/Subscribing/).once
|
248
|
+
@log.should_receive(:error).with(/Failed executing block/, Exception, :trace).once
|
248
249
|
@exceptions.should_receive(:track).once
|
249
250
|
@serializer.should_receive(:load).with(@message).and_return(@packet).once
|
250
251
|
@bind.should_receive(:subscribe).and_yield(@message).once
|
251
252
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
252
|
-
broker.__send__(:update_status, :
|
253
|
+
broker.__send__(:update_status, :connected)
|
253
254
|
result = broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"},
|
254
255
|
RightScale::Request => nil) {|b, p| raise Exception}
|
255
256
|
result.should be_false
|
256
257
|
end
|
257
258
|
|
258
259
|
it "should ignore 'nil' message when using ack" do
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
260
|
+
@log.should_receive(:level).and_return(:debug)
|
261
|
+
@log.should_receive(:info).with(/Connecting/).once
|
262
|
+
@log.should_receive(:info).with(/Subscribing/).once
|
263
|
+
@log.should_receive(:debug).with(/nil message ignored/).once
|
263
264
|
@bind.should_receive(:subscribe).and_yield(@info, "nil").once
|
264
265
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
265
|
-
broker.__send__(:update_status, :
|
266
|
+
broker.__send__(:update_status, :connected)
|
266
267
|
called = 0
|
267
268
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}, :ack => true) { |b, m| called += 1 }
|
268
269
|
called.should == 0
|
269
270
|
end
|
270
271
|
|
271
272
|
it "should ignore 'nil' message when not using ack" do
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
273
|
+
@log.should_receive(:level).and_return(:debug)
|
274
|
+
@log.should_receive(:info).with(/Connecting/).once
|
275
|
+
@log.should_receive(:info).with(/Subscribing/).once
|
276
|
+
@log.should_receive(:debug).with(/nil message ignored/).once
|
276
277
|
@bind.should_receive(:subscribe).and_yield("nil").once
|
277
278
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
278
|
-
broker.__send__(:update_status, :
|
279
|
+
broker.__send__(:update_status, :connected)
|
279
280
|
called = 0
|
280
281
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}) { |b, m| called += 1 }
|
281
282
|
called.should == 0
|
282
283
|
end
|
283
284
|
|
284
285
|
it "should not unserialize the message if requested" do
|
285
|
-
|
286
|
-
|
287
|
-
|
286
|
+
@log.should_receive(:info).with(/Connecting/).once
|
287
|
+
@log.should_receive(:info).with(/Subscribing/).once
|
288
|
+
@log.should_receive(:info).with(/^RECV/).never
|
288
289
|
@bind.should_receive(:subscribe).and_yield(@message).once
|
289
290
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
290
|
-
broker.__send__(:update_status, :
|
291
|
+
broker.__send__(:update_status, :connected)
|
291
292
|
broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}, :no_unserialize => true) do |b, m|
|
292
293
|
b.should == "rs-broker-localhost-5672"
|
293
294
|
m.should == @message
|
@@ -295,13 +296,13 @@ describe RightScale::BrokerClient do
|
|
295
296
|
end
|
296
297
|
|
297
298
|
it "should log an error if a subscribe fails" do
|
298
|
-
|
299
|
-
|
300
|
-
|
299
|
+
@log.should_receive(:info).with(/Connecting/).once
|
300
|
+
@log.should_receive(:info).with(/RECV/).never
|
301
|
+
@log.should_receive(:error).with(/Failed subscribing/, Exception, :trace).once
|
301
302
|
@exceptions.should_receive(:track).once
|
302
303
|
@bind.should_receive(:subscribe).and_raise(Exception)
|
303
304
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
304
|
-
broker.__send__(:update_status, :
|
305
|
+
broker.__send__(:update_status, :connected)
|
305
306
|
result = broker.subscribe({:name => "queue"}, {:type => :direct, :name => "exchange"}) {|b, p|}
|
306
307
|
result.should be_false
|
307
308
|
end
|
@@ -317,74 +318,74 @@ describe RightScale::BrokerClient do
|
|
317
318
|
end
|
318
319
|
|
319
320
|
it "should unserialize the message, log it, and return it" do
|
320
|
-
|
321
|
-
|
321
|
+
@log.should_receive(:info).with(/Connecting/).once
|
322
|
+
@log.should_receive(:info).with(/^RECV/).once
|
322
323
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
323
324
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil).should == @packet
|
324
325
|
end
|
325
326
|
|
326
327
|
it "should log a warning if the message is not of the right type and return nil" do
|
327
|
-
|
328
|
+
@log.should_receive(:warning).with(/Received invalid.*packet type/).once
|
328
329
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
329
330
|
broker.__send__(:receive, "queue", @message).should be_nil
|
330
331
|
end
|
331
332
|
|
332
333
|
it "should show the category in the warning message if specified" do
|
333
|
-
|
334
|
+
@log.should_receive(:warning).with(/Received invalid xxxx packet type/).once
|
334
335
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
335
336
|
broker.__send__(:receive, "queue", @message, RightScale::Result => nil, :category => "xxxx")
|
336
337
|
end
|
337
338
|
|
338
339
|
it "should display broker alias in the log" do
|
339
|
-
|
340
|
-
|
340
|
+
@log.should_receive(:info).with(/Connecting/).once
|
341
|
+
@log.should_receive(:info).with(/^RECV b0 /).once
|
341
342
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
342
343
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil)
|
343
344
|
end
|
344
345
|
|
345
346
|
it "should filter the packet display for :info level" do
|
346
|
-
|
347
|
-
|
348
|
-
|
347
|
+
@log.should_receive(:info).with(/Connecting/).once
|
348
|
+
@log.should_receive(:info).with(/^RECV.*TO YOU/).once
|
349
|
+
@log.should_receive(:debug).with(/^RECV.*TO YOU/).never
|
349
350
|
@packet.should_receive(:to_s).with([:to], :recv_version).and_return("TO YOU").once
|
350
351
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
351
352
|
broker.__send__(:receive, "queue", @message, RightScale::Request => [:to])
|
352
353
|
end
|
353
354
|
|
354
355
|
it "should not filter the packet display for :debug level" do
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
356
|
+
@log.should_receive(:level).and_return(:debug)
|
357
|
+
@log.should_receive(:info).with(/Connecting/).once
|
358
|
+
@log.should_receive(:info).with(/^RECV.*ALL/).never
|
359
|
+
@log.should_receive(:info).with(/^RECV.*ALL/).once
|
359
360
|
@packet.should_receive(:to_s).with(nil, :recv_version).and_return("ALL").once
|
360
361
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
361
362
|
broker.__send__(:receive, "queue", @message, RightScale::Request => [:to])
|
362
363
|
end
|
363
364
|
|
364
365
|
it "should display additional data in log" do
|
365
|
-
|
366
|
-
|
366
|
+
@log.should_receive(:info).with(/Connecting/).once
|
367
|
+
@log.should_receive(:info).with(/^RECV.*More data/).once
|
367
368
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
368
369
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil, :log_data => "More data")
|
369
370
|
end
|
370
371
|
|
371
372
|
it "should not log a message if requested not to" do
|
372
|
-
|
373
|
-
|
373
|
+
@log.should_receive(:info).with(/Connecting/).once
|
374
|
+
@log.should_receive(:info).with(/^RECV/).never
|
374
375
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
375
376
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil, :no_log => true)
|
376
377
|
end
|
377
378
|
|
378
379
|
it "should not log a message if requested not to unless debug level" do
|
379
|
-
|
380
|
-
|
381
|
-
|
380
|
+
@log.should_receive(:level).and_return(:debug)
|
381
|
+
@log.should_receive(:info).with(/Connecting/).once
|
382
|
+
@log.should_receive(:info).with(/^RECV/).once
|
382
383
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
383
384
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil, :no_log => true)
|
384
385
|
end
|
385
386
|
|
386
387
|
it "should log an error if exception prevents normal logging and should then return nil" do
|
387
|
-
|
388
|
+
@log.should_receive(:error).with(/Failed receiving from queue/, Exception, :trace).once
|
388
389
|
@serializer.should_receive(:load).with(@message).and_raise(Exception).once
|
389
390
|
@exceptions.should_receive(:track).once
|
390
391
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
@@ -392,7 +393,7 @@ describe RightScale::BrokerClient do
|
|
392
393
|
end
|
393
394
|
|
394
395
|
it "should make callback when there is a receive failure" do
|
395
|
-
|
396
|
+
@log.should_receive(:error).with(/Failed receiving from queue/, Exception, :trace).once
|
396
397
|
@serializer.should_receive(:load).with(@message).and_raise(Exception).once
|
397
398
|
@exceptions.should_receive(:track).once
|
398
399
|
called = 0
|
@@ -404,8 +405,8 @@ describe RightScale::BrokerClient do
|
|
404
405
|
end
|
405
406
|
|
406
407
|
it "should display RE-RECV if the message being received is a retry" do
|
407
|
-
|
408
|
-
|
408
|
+
@log.should_receive(:info).with(/Connecting/).once
|
409
|
+
@log.should_receive(:info).with(/^RE-RECV/).once
|
409
410
|
@packet.should_receive(:tries).and_return(["try1"]).once
|
410
411
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
411
412
|
broker.__send__(:receive, "queue", @message, RightScale::Request => nil).should == @packet
|
@@ -419,9 +420,9 @@ describe RightScale::BrokerClient do
|
|
419
420
|
@direct = flexmock("direct")
|
420
421
|
@bind = flexmock("bind", :subscribe => true)
|
421
422
|
@queue = flexmock("queue", :bind => @bind, :name => "queue1")
|
422
|
-
@
|
423
|
-
@
|
424
|
-
flexmock(
|
423
|
+
@channel.should_receive(:queue).and_return(@queue).by_default
|
424
|
+
@channel.should_receive(:direct).and_return(@direct).by_default
|
425
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
425
426
|
end
|
426
427
|
|
427
428
|
it "should unsubscribe a queue by name" do
|
@@ -456,7 +457,7 @@ describe RightScale::BrokerClient do
|
|
456
457
|
end
|
457
458
|
|
458
459
|
it "should log an error if unsubscribe raises an exception and activate block if provided" do
|
459
|
-
|
460
|
+
@log.should_receive(:error).with(/Failed unsubscribing/, Exception, :trace).once
|
460
461
|
@queue.should_receive(:unsubscribe).and_raise(Exception).once
|
461
462
|
@exceptions.should_receive(:track).once
|
462
463
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
@@ -471,34 +472,34 @@ describe RightScale::BrokerClient do
|
|
471
472
|
context "when declaring" do
|
472
473
|
|
473
474
|
before(:each) do
|
474
|
-
flexmock(
|
475
|
-
@
|
476
|
-
@
|
475
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
476
|
+
@channel.should_receive(:queues).and_return({}).by_default
|
477
|
+
@channel.should_receive(:exchanges).and_return({}).by_default
|
477
478
|
end
|
478
479
|
|
479
480
|
it "should declare exchange and return true" do
|
480
|
-
@
|
481
|
+
@channel.should_receive(:exchange).once
|
481
482
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
482
483
|
broker.declare(:exchange, "x", :durable => true).should be_true
|
483
484
|
end
|
484
485
|
|
485
486
|
it "should delete the exchange or queue from the AMQP cache before declaring" do
|
486
|
-
@
|
487
|
+
@channel.should_receive(:queue).once
|
487
488
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
488
|
-
flexmock(broker).should_receive(:
|
489
|
+
flexmock(broker).should_receive(:delete_amqp_resources).with(:queue, "queue").once
|
489
490
|
broker.declare(:queue, "queue", :durable => true).should be_true
|
490
491
|
end
|
491
492
|
|
492
493
|
it "should log declaration" do
|
493
|
-
|
494
|
-
|
495
|
-
@
|
494
|
+
@log.should_receive(:info).with(/Connecting/).once
|
495
|
+
@log.should_receive(:info).with(/Declaring/).once
|
496
|
+
@channel.should_receive(:queue).once
|
496
497
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
497
498
|
broker.declare(:queue, "q").should be_true
|
498
499
|
end
|
499
500
|
|
500
501
|
it "should return false if client not usable" do
|
501
|
-
@
|
502
|
+
@channel.should_receive(:exchange).never
|
502
503
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
503
504
|
broker.__send__(:update_status, :disconnected)
|
504
505
|
broker.declare(:exchange, "x", :durable => true).should be_false
|
@@ -506,11 +507,11 @@ describe RightScale::BrokerClient do
|
|
506
507
|
end
|
507
508
|
|
508
509
|
it "should log an error if the declare fails and return false" do
|
509
|
-
|
510
|
-
|
511
|
-
|
510
|
+
@log.should_receive(:info).with(/Connecting/).once
|
511
|
+
@log.should_receive(:info).with(/Declaring/).once
|
512
|
+
@log.should_receive(:error).with(/Failed declaring/, Exception, :trace).once
|
512
513
|
@exceptions.should_receive(:track).once
|
513
|
-
@
|
514
|
+
@channel.should_receive(:queue).and_raise(Exception).once
|
514
515
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
515
516
|
broker.declare(:queue, "q").should be_false
|
516
517
|
end
|
@@ -523,30 +524,30 @@ describe RightScale::BrokerClient do
|
|
523
524
|
@message = flexmock("message")
|
524
525
|
@packet = flexmock("packet", :class => RightScale::Request, :to_s => true, :version => [12, 12]).by_default
|
525
526
|
@direct = flexmock("direct")
|
526
|
-
flexmock(
|
527
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
527
528
|
end
|
528
529
|
|
529
530
|
it "should serialize message, publish it, and return true" do
|
530
|
-
@
|
531
|
+
@channel.should_receive(:direct).with("exchange", :durable => true).and_return(@direct).once
|
531
532
|
@direct.should_receive(:publish).with(@message, :persistent => true).once
|
532
533
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
533
|
-
broker.__send__(:update_status, :
|
534
|
+
broker.__send__(:update_status, :connected)
|
534
535
|
broker.publish({:type => :direct, :name => "exchange", :options => {:durable => true}},
|
535
536
|
@packet, @message, :persistent => true).should be_true
|
536
537
|
end
|
537
538
|
|
538
539
|
it "should delete the exchange or queue from the AMQP cache if :declare specified" do
|
539
|
-
@
|
540
|
+
@channel.should_receive(:direct).with("exchange", {:declare => true}).and_return(@direct)
|
540
541
|
@direct.should_receive(:publish).with(@message, {})
|
541
542
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
542
|
-
broker.__send__(:update_status, :
|
543
|
+
broker.__send__(:update_status, :connected)
|
543
544
|
exchange = {:type => :direct, :name => "exchange", :options => {:declare => true}}
|
544
|
-
flexmock(broker).should_receive(:
|
545
|
+
flexmock(broker).should_receive(:delete_amqp_resources).with(:direct, "exchange").once
|
545
546
|
broker.publish(exchange, @packet, @message).should be_true
|
546
547
|
end
|
547
548
|
|
548
549
|
it "should return false if client not connected" do
|
549
|
-
@
|
550
|
+
@channel.should_receive(:direct).never
|
550
551
|
@direct.should_receive(:publish).with(@message, :persistent => true).never
|
551
552
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
552
553
|
broker.publish({:type => :direct, :name => "exchange", :options => {:durable => true}},
|
@@ -554,111 +555,111 @@ describe RightScale::BrokerClient do
|
|
554
555
|
end
|
555
556
|
|
556
557
|
it "should log an error if the publish fails" do
|
557
|
-
|
558
|
+
@log.should_receive(:error).with(/Failed publishing/, Exception, :trace).once
|
558
559
|
@exceptions.should_receive(:track).once
|
559
|
-
@
|
560
|
+
@channel.should_receive(:direct).and_raise(Exception)
|
560
561
|
@direct.should_receive(:publish).with(@message, {}).never
|
561
562
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
562
|
-
broker.__send__(:update_status, :
|
563
|
+
broker.__send__(:update_status, :connected)
|
563
564
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message).should be_false
|
564
565
|
end
|
565
566
|
|
566
567
|
it "should log that message is being sent with info about which broker used" do
|
567
|
-
|
568
|
-
|
569
|
-
@
|
568
|
+
@log.should_receive(:info).with(/Connecting/).once
|
569
|
+
@log.should_receive(:info).with(/^SEND b0/).once
|
570
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
570
571
|
@direct.should_receive(:publish).with(@message, {}).once
|
571
572
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
572
|
-
broker.__send__(:update_status, :
|
573
|
+
broker.__send__(:update_status, :connected)
|
573
574
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message).should be_true
|
574
575
|
end
|
575
576
|
|
576
577
|
it "should log broker choices for :debug level" do
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
@
|
578
|
+
@log.should_receive(:level).and_return(:debug)
|
579
|
+
@log.should_receive(:debug).with(/... publish options/).once
|
580
|
+
@log.should_receive(:info).with(/Connecting/).once
|
581
|
+
@log.should_receive(:info).with(/^SEND b0/).once
|
582
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
582
583
|
@direct.should_receive(:publish).with(@message, {}).once
|
583
584
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
584
|
-
broker.__send__(:update_status, :
|
585
|
+
broker.__send__(:update_status, :connected)
|
585
586
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message).should be_true
|
586
587
|
end
|
587
588
|
|
588
589
|
it "should not log a message if requested not to" do
|
589
|
-
|
590
|
-
|
591
|
-
@
|
590
|
+
@log.should_receive(:info).with(/Connecting/).once
|
591
|
+
@log.should_receive(:info).with(/^SEND/).never
|
592
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
592
593
|
@direct.should_receive(:publish).with(@message, :no_log => true).once
|
593
594
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
594
|
-
broker.__send__(:update_status, :
|
595
|
+
broker.__send__(:update_status, :connected)
|
595
596
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message, :no_log => true).should be_true
|
596
597
|
end
|
597
598
|
|
598
599
|
it "should not log a message if requested not to unless debug level" do
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
@
|
600
|
+
@log.should_receive(:level).and_return(:debug)
|
601
|
+
@log.should_receive(:info).with(/Connecting/).once
|
602
|
+
@log.should_receive(:info).with(/^SEND/).once
|
603
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
603
604
|
@direct.should_receive(:publish).with(@message, :no_log => true).once
|
604
605
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
605
|
-
broker.__send__(:update_status, :
|
606
|
+
broker.__send__(:update_status, :connected)
|
606
607
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message, :no_log => true).should be_true
|
607
608
|
end
|
608
609
|
|
609
610
|
it "should display broker alias in the log" do
|
610
|
-
|
611
|
-
|
612
|
-
@
|
611
|
+
@log.should_receive(:info).with(/Connecting/).once
|
612
|
+
@log.should_receive(:info).with(/^SEND b0 /).once
|
613
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
613
614
|
@direct.should_receive(:publish).with(@message, {}).once
|
614
615
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
615
|
-
broker.__send__(:update_status, :
|
616
|
+
broker.__send__(:update_status, :connected)
|
616
617
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message).should be_true
|
617
618
|
end
|
618
619
|
|
619
620
|
it "should filter the packet display for :info level" do
|
620
|
-
|
621
|
-
|
622
|
-
|
621
|
+
@log.should_receive(:info).with(/Connecting/).once
|
622
|
+
@log.should_receive(:info).with(/^SEND.*TO YOU/).once
|
623
|
+
@log.should_receive(:info).with(/^SEND.*TO YOU/).never
|
623
624
|
@packet.should_receive(:to_s).with([:to], :send_version).and_return("TO YOU").once
|
624
|
-
@
|
625
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
625
626
|
@direct.should_receive(:publish).with(@message, :log_filter => [:to]).once
|
626
627
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
627
|
-
broker.__send__(:update_status, :
|
628
|
+
broker.__send__(:update_status, :connected)
|
628
629
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message, :log_filter => [:to]).should be_true
|
629
630
|
end
|
630
631
|
|
631
632
|
it "should not filter the packet display for :debug level" do
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
633
|
+
@log.should_receive(:level).and_return(:debug)
|
634
|
+
@log.should_receive(:info).with(/Connecting/).once
|
635
|
+
@log.should_receive(:info).with(/^SEND.*ALL/).never
|
636
|
+
@log.should_receive(:info).with(/^SEND.*ALL/).once
|
636
637
|
@packet.should_receive(:to_s).with(nil, :send_version).and_return("ALL").once
|
637
|
-
@
|
638
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
638
639
|
@direct.should_receive(:publish).with(@message, :log_filter => [:to]).once
|
639
640
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
640
|
-
broker.__send__(:update_status, :
|
641
|
+
broker.__send__(:update_status, :connected)
|
641
642
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message, :log_filter => [:to]).should be_true
|
642
643
|
end
|
643
644
|
|
644
645
|
it "should display additional data in log" do
|
645
|
-
|
646
|
-
|
647
|
-
@
|
646
|
+
@log.should_receive(:info).with(/Connecting/).once
|
647
|
+
@log.should_receive(:info).with(/^SEND.*More data/).once
|
648
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
648
649
|
@direct.should_receive(:publish).with(@message, :log_data => "More data").once
|
649
650
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
650
|
-
broker.__send__(:update_status, :
|
651
|
+
broker.__send__(:update_status, :connected)
|
651
652
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message, :log_data => "More data").should be_true
|
652
653
|
end
|
653
654
|
|
654
655
|
it "should display RE-SEND if the message being sent is a retry" do
|
655
|
-
|
656
|
-
|
656
|
+
@log.should_receive(:info).with(/Connecting/).once
|
657
|
+
@log.should_receive(:info).with(/^RE-SEND/).once
|
657
658
|
@packet = flexmock("packet", :class => RightScale::Request, :to_s => true, :tries => ["try1"], :version => [12, 12])
|
658
|
-
@
|
659
|
+
@channel.should_receive(:direct).with("exchange", {}).and_return(@direct).once
|
659
660
|
@direct.should_receive(:publish).with(@message, {}).once
|
660
661
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
661
|
-
broker.__send__(:update_status, :
|
662
|
+
broker.__send__(:update_status, :connected)
|
662
663
|
broker.publish({:type => :direct, :name => "exchange"}, @packet, @message).should be_true
|
663
664
|
end
|
664
665
|
|
@@ -686,8 +687,8 @@ describe RightScale::BrokerClient do
|
|
686
687
|
end
|
687
688
|
|
688
689
|
it "should invoke block and log the return" do
|
689
|
-
|
690
|
-
|
690
|
+
@log.should_receive(:info).with(/Connecting to broker/).once
|
691
|
+
@log.should_receive(:debug).with(/RETURN b0/).once
|
691
692
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
692
693
|
called = 0
|
693
694
|
broker.return_message do |to, reason, message|
|
@@ -696,7 +697,7 @@ describe RightScale::BrokerClient do
|
|
696
697
|
reason.should == "NO_CONSUMERS"
|
697
698
|
message.should == @message
|
698
699
|
end
|
699
|
-
broker.instance_variable_get(:@
|
700
|
+
broker.instance_variable_get(:@channel).on_return_message.call(@info, @message)
|
700
701
|
called.should == 1
|
701
702
|
end
|
702
703
|
|
@@ -710,12 +711,12 @@ describe RightScale::BrokerClient do
|
|
710
711
|
message.should == @message
|
711
712
|
end
|
712
713
|
@info.should_receive(:exchange).and_return("")
|
713
|
-
broker.instance_variable_get(:@
|
714
|
+
broker.instance_variable_get(:@channel).on_return_message.call(@info, @message)
|
714
715
|
called.should == 1
|
715
716
|
end
|
716
717
|
|
717
718
|
it "should log an error if there is a failure while processing the return" do
|
718
|
-
|
719
|
+
@log.should_receive(:error).with(/Failed return/, Exception, :trace).once
|
719
720
|
@exceptions.should_receive(:track).once
|
720
721
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
721
722
|
called = 0
|
@@ -723,7 +724,7 @@ describe RightScale::BrokerClient do
|
|
723
724
|
called += 1
|
724
725
|
raise Exception
|
725
726
|
end
|
726
|
-
broker.instance_variable_get(:@
|
727
|
+
broker.instance_variable_get(:@channel).on_return_message.call(@info, @message)
|
727
728
|
called.should == 1
|
728
729
|
end
|
729
730
|
|
@@ -735,9 +736,9 @@ describe RightScale::BrokerClient do
|
|
735
736
|
@direct = flexmock("direct")
|
736
737
|
@bind = flexmock("bind", :subscribe => true)
|
737
738
|
@queue = flexmock("queue", :bind => @bind, :name => "queue1")
|
738
|
-
@
|
739
|
-
@
|
740
|
-
flexmock(
|
739
|
+
@channel.should_receive(:queue).and_return(@queue).by_default
|
740
|
+
@channel.should_receive(:direct).and_return(@direct).by_default
|
741
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
741
742
|
end
|
742
743
|
|
743
744
|
it "should delete the named queue and return true" do
|
@@ -760,7 +761,7 @@ describe RightScale::BrokerClient do
|
|
760
761
|
end
|
761
762
|
|
762
763
|
it "should log an error and return false if the delete fails" do
|
763
|
-
|
764
|
+
@log.should_receive(:error).with(/Failed deleting queue/, Exception, :trace).once
|
764
765
|
@exceptions.should_receive(:track).once
|
765
766
|
@queue.should_receive(:delete).and_raise(Exception)
|
766
767
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
@@ -776,17 +777,17 @@ describe RightScale::BrokerClient do
|
|
776
777
|
include RightScale::StatsHelper
|
777
778
|
|
778
779
|
before(:each) do
|
779
|
-
flexmock(
|
780
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
780
781
|
end
|
781
782
|
|
782
783
|
it "should distinguish whether the client is usable based on whether connecting or connected" do
|
783
784
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
784
785
|
broker.usable?.should be_true
|
785
|
-
broker.__send__(:update_status, :
|
786
|
+
broker.__send__(:update_status, :connected)
|
786
787
|
broker.usable?.should be_true
|
787
788
|
broker.__send__(:update_status, :disconnected)
|
788
789
|
broker.usable?.should be_false
|
789
|
-
|
790
|
+
@log.should_receive(:error).with(/Failed to connect to broker b0/).once
|
790
791
|
broker.__send__(:update_status, :failed)
|
791
792
|
broker.usable?.should be_false
|
792
793
|
end
|
@@ -794,11 +795,11 @@ describe RightScale::BrokerClient do
|
|
794
795
|
it "should distinguish whether the client is connected" do
|
795
796
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
796
797
|
broker.connected?.should be_false
|
797
|
-
broker.__send__(:update_status, :
|
798
|
+
broker.__send__(:update_status, :connected)
|
798
799
|
broker.connected?.should be_true
|
799
800
|
broker.__send__(:update_status, :disconnected)
|
800
801
|
broker.connected?.should be_false
|
801
|
-
|
802
|
+
@log.should_receive(:error).with(/Failed to connect to broker b0/).once
|
802
803
|
broker.__send__(:update_status, :failed)
|
803
804
|
broker.connected?.should be_false
|
804
805
|
end
|
@@ -806,11 +807,11 @@ describe RightScale::BrokerClient do
|
|
806
807
|
it "should distinguish whether the client has failed" do
|
807
808
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
808
809
|
broker.failed?.should be_false
|
809
|
-
broker.__send__(:update_status, :
|
810
|
+
broker.__send__(:update_status, :connected)
|
810
811
|
broker.failed?.should be_false
|
811
812
|
broker.__send__(:update_status, :disconnected)
|
812
813
|
broker.failed?.should be_false
|
813
|
-
|
814
|
+
@log.should_receive(:error).with(/Failed to connect to broker b0/).once
|
814
815
|
broker.__send__(:update_status, :failed)
|
815
816
|
broker.failed?.should be_true
|
816
817
|
end
|
@@ -819,10 +820,10 @@ describe RightScale::BrokerClient do
|
|
819
820
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
820
821
|
broker.summary.should == {:alias => "b0", :identity => @identity, :status => :connecting,
|
821
822
|
:disconnects => 0, :failures => 0, :retries => 0}
|
822
|
-
broker.__send__(:update_status, :
|
823
|
+
broker.__send__(:update_status, :connected)
|
823
824
|
broker.summary.should == {:alias => "b0", :identity => @identity, :status => :connected,
|
824
825
|
:disconnects => 0, :failures => 0, :retries => 0}
|
825
|
-
|
826
|
+
@log.should_receive(:error).with(/Failed to connect to broker/).once
|
826
827
|
broker.__send__(:update_status, :failed)
|
827
828
|
broker.summary.should == {:alias => "b0", :identity => @identity, :status => :failed,
|
828
829
|
:disconnects => 0, :failures => 1, :retries => 0}
|
@@ -833,11 +834,11 @@ describe RightScale::BrokerClient do
|
|
833
834
|
broker.stats.should == {"alias" => "b0", "identity" => "rs-broker-localhost-5672",
|
834
835
|
"status" => "connecting", "disconnects" => nil, "disconnect last" => nil,
|
835
836
|
"failures" => nil, "failure last" => nil, "retries" => nil}
|
836
|
-
broker.__send__(:update_status, :
|
837
|
+
broker.__send__(:update_status, :connected)
|
837
838
|
broker.stats.should == {"alias" => "b0", "identity" => "rs-broker-localhost-5672",
|
838
839
|
"status" => "connected", "disconnects" => nil, "disconnect last" => nil,
|
839
840
|
"failures" => nil, "failure last" => nil, "retries" => nil}
|
840
|
-
|
841
|
+
@log.should_receive(:error).with(/Failed to connect to broker/).once
|
841
842
|
broker.__send__(:update_status, :failed)
|
842
843
|
broker.stats.should == {"alias" => "b0", "identity" => "rs-broker-localhost-5672",
|
843
844
|
"status" => "failed", "disconnects" => nil, "disconnect last" => nil,
|
@@ -851,7 +852,7 @@ describe RightScale::BrokerClient do
|
|
851
852
|
callback = lambda { |b, c| called += 1; b.should == broker; c.should == connected_before }
|
852
853
|
options = {:update_status_callback => callback}
|
853
854
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, options)
|
854
|
-
broker.__send__(:update_status, :
|
855
|
+
broker.__send__(:update_status, :connected)
|
855
856
|
broker.last_failed.should be_false
|
856
857
|
called.should == 1
|
857
858
|
connected_before = true
|
@@ -862,7 +863,7 @@ describe RightScale::BrokerClient do
|
|
862
863
|
broker.__send__(:update_status, :disconnected)
|
863
864
|
broker.disconnects.total.should == 1
|
864
865
|
called.should == 2
|
865
|
-
|
866
|
+
@log.should_receive(:error).with(/Failed to connect to broker b0/).once
|
866
867
|
connected_before = false
|
867
868
|
broker.__send__(:update_status, :failed)
|
868
869
|
broker.last_failed.should be_true
|
@@ -874,7 +875,7 @@ describe RightScale::BrokerClient do
|
|
874
875
|
context "when closing" do
|
875
876
|
|
876
877
|
before(:each) do
|
877
|
-
flexmock(
|
878
|
+
flexmock(AMQP::Channel).should_receive(:new).with(@connection).and_return(@channel).by_default
|
878
879
|
end
|
879
880
|
|
880
881
|
it "should close broker connection and send status update" do
|
@@ -900,16 +901,16 @@ describe RightScale::BrokerClient do
|
|
900
901
|
end
|
901
902
|
|
902
903
|
it "should log that closing connection" do
|
903
|
-
|
904
|
-
|
904
|
+
@log.should_receive(:info).with(/Connecting/).once
|
905
|
+
@log.should_receive(:info).with(/Closed connection to broker b0/).once
|
905
906
|
@connection.should_receive(:close).and_yield.once
|
906
907
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
907
908
|
broker.close
|
908
909
|
end
|
909
910
|
|
910
911
|
it "should not log if requested not to" do
|
911
|
-
|
912
|
-
|
912
|
+
@log.should_receive(:info).with(/Connecting/).once
|
913
|
+
@log.should_receive(:info).with(/Closed connection to broker b0/).never
|
913
914
|
@connection.should_receive(:close).and_yield.once
|
914
915
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
915
916
|
broker.close(propagate = true, normal = true, log = false)
|
@@ -938,7 +939,7 @@ describe RightScale::BrokerClient do
|
|
938
939
|
end
|
939
940
|
|
940
941
|
it "should change failed status to closed" do
|
941
|
-
|
942
|
+
@log.should_receive(:error).with(/Failed to connect to broker/).once
|
942
943
|
@connection.should_receive(:close).never
|
943
944
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|
944
945
|
broker.__send__(:update_status, :failed)
|
@@ -948,7 +949,7 @@ describe RightScale::BrokerClient do
|
|
948
949
|
end
|
949
950
|
|
950
951
|
it "should log an error if closing connection fails but still set status to :closed" do
|
951
|
-
|
952
|
+
@log.should_receive(:error).with(/Failed to close broker b0/, Exception, :trace).once
|
952
953
|
@exceptions.should_receive(:track).once
|
953
954
|
@connection.should_receive(:close).and_raise(Exception)
|
954
955
|
broker = RightScale::BrokerClient.new(@identity, @address, @serializer, @exceptions, @options)
|