Hobo.busy added, and tested
This commit is contained in:
parent
cb89290b62
commit
3ccdaf9182
|
@ -8,6 +8,7 @@ require 'logger'
|
|||
require 'virtualbox'
|
||||
require 'net/ssh'
|
||||
require 'ping'
|
||||
require 'hobo/busy'
|
||||
require 'hobo/util'
|
||||
require 'hobo/config'
|
||||
require 'hobo/env'
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
module Hobo
|
||||
def self.busy?
|
||||
Busy.busy?
|
||||
end
|
||||
|
||||
def self.busy(&block)
|
||||
Mutex.new.synchronize do
|
||||
Busy.busy = true
|
||||
yield
|
||||
Busy.busy = false
|
||||
end
|
||||
|
||||
# In the case were an exception is thrown by the wrapped code
|
||||
# make sure to set busy to sane state and reraise the error
|
||||
rescue Exception => e
|
||||
Busy.busy = false
|
||||
raise
|
||||
end
|
||||
|
||||
class Busy
|
||||
@@busy = false
|
||||
class << self
|
||||
def busy?
|
||||
@@busy
|
||||
end
|
||||
|
||||
def busy=(val)
|
||||
@@busy = val
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
||||
|
||||
class BusyTest < Test::Unit::TestCase
|
||||
context "during an action in a busy block" do
|
||||
should "hobo should report as busy" do
|
||||
Hobo.busy do
|
||||
# Inside the block Hobo.busy? should be true
|
||||
assert Hobo.busy?
|
||||
end
|
||||
|
||||
#After the block finishes Hobo.busy? should be false
|
||||
assert !Hobo.busy?
|
||||
end
|
||||
|
||||
should "set busy to false upon exception and reraise the error" do
|
||||
assert_raise Exception do
|
||||
Hobo.busy do
|
||||
assert Hobo.busy?
|
||||
raise Exception
|
||||
end
|
||||
end
|
||||
|
||||
assert !Hobo.busy?
|
||||
end
|
||||
|
||||
should "report busy to the outside world regardless of thread" do
|
||||
Thread.new do
|
||||
Hobo.busy do
|
||||
sleep(10)
|
||||
end
|
||||
end
|
||||
|
||||
# While the above thread is executing hobo should be busy
|
||||
assert Hobo.busy?
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue