#!/usr/bin/env ruby

$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))

require 'test/unit'
require 'msf/core'
require 'msf/core/handler/reverse_tcp'

module Msf

class Handler::ReverseTcp::UnitTest < Test::Unit::TestCase

	class Stub < Msf::Payload
		include Msf::Handler::ReverseTcp
	end

	module Foo
		def handle_connection(client, opts={})
			self.success = 1
		end

		attr_accessor :success, :session
	end

	def test_handler
		c = Class.new(Stub)
		c.include(Foo)

		h = c.new({})

		begin
			h.datastore['LPORT'] = 4444

			h.setup_handler
			h.start_handler

			5.times {
				t = Rex::Socket::Tcp.create(
					'PeerHost' => "127.0.0.1",
					'PeerPort' => 4444)

				assert_not_nil(t)

				begin
					Rex::ThreadSafe.sleep(1)

					assert_equal(1, h.success)

					h.success = 0
				ensure
					t.close
				end
			}
		ensure
			h.stop_handler if (h)
			h.cleanup_handler if (h)
		end
	end

end

end

