metasploit-framework/test/tests/04_task_manager_test.rb

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