103 lines
2.2 KiB
Ruby
103 lines
2.2 KiB
Ruby
$:.push("../../lib")
|
|
|
|
require 'testbase'
|
|
require 'msf/core/task_manager'
|
|
|
|
describe Msf::TaskManager do
|
|
it "should have attributes" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
tm.should respond_to("processing")
|
|
tm.should respond_to("queue")
|
|
tm.should respond_to("thread")
|
|
tm.should respond_to("framework")
|
|
tm.should respond_to("processing=")
|
|
tm.should respond_to("queue=")
|
|
tm.should respond_to("thread=")
|
|
tm.should respond_to("framework=")
|
|
end
|
|
|
|
it "should initialize with an empty queue" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
tm.queue.length.should == 0
|
|
tm.backlog.should == 0
|
|
tm.backlog.should == tm.queue.length
|
|
end
|
|
|
|
it "should add items to the queue and process them" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 1
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 2
|
|
tm.start
|
|
sleep(0.5)
|
|
tm.backlog.should == 0
|
|
end
|
|
|
|
it "should add items to the queue and flush them" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 1
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 2
|
|
tm.flush
|
|
tm.backlog.should == 0
|
|
end
|
|
|
|
it "should start and stop" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 1
|
|
tm.start
|
|
sleep(0.5)
|
|
tm.backlog.should == 0
|
|
tm.stop
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 1
|
|
sleep(0.5)
|
|
tm.queue_proc(Proc.new{ })
|
|
tm.backlog.should == 2
|
|
tm.start
|
|
sleep(0.5)
|
|
tm.backlog.should == 0
|
|
end
|
|
|
|
it "should handle task timeouts" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
t = Msf::TaskManager::Task.new(Proc.new { sleep(30) })
|
|
t.timeout = 0.1
|
|
|
|
tm.start
|
|
tm.queue_task(t)
|
|
sleep(0.5)
|
|
|
|
t.status.should == :timeout
|
|
t.duration.should <= 1.0
|
|
end
|
|
|
|
it "should handle task exceptions" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
t = Msf::TaskManager::Task.new(Proc.new { asdf1234() })
|
|
|
|
tm.start
|
|
tm.queue_task(t)
|
|
sleep(0.5)
|
|
|
|
t.status.should == :dropped
|
|
t.exception.class.should == ::NoMethodError
|
|
end
|
|
|
|
it "should handle a bad proc return" do
|
|
tm = Msf::TaskManager.new($msf)
|
|
t = Msf::TaskManager::Task.new(Proc.new { return 12345 })
|
|
|
|
tm.start
|
|
tm.queue_task(t)
|
|
sleep(0.5)
|
|
|
|
t.status.should == :done
|
|
t.exception.should == nil
|
|
end
|
|
end
|
|
|