1 require "#{File.expand_path(File.dirname(__FILE__))}/../test_helper"
3 class TestListener < Test::Unit::TestCase
5 @options = LISTENER_DEFAULTS.dup
6 @listener = @emitter = nil
10 assert_nil(@listener.close) if @listener
11 assert_nil(@emitter.close) if @emitter
12 LWES::Event::CLASSES.clear
15 def test_listen_and_close
16 listener = LWES::Listener.new @options.merge(:iface => nil)
17 assert_nil listener.close
18 assert_raises(IOError) { listener.close }
21 def test_listen_and_close_with_iface
22 listener = LWES::Listener.new @options
23 assert_nil listener.close
24 assert_raises(IOError) { listener.close }
27 def test_listen_emit_recv_and_close
28 @listener = LWES::Listener.new @options
29 @emitter = LWES::Emitter.new @options
30 @emitter.emit("E1", { :hello => "WORLD"})
31 event = @listener.recv.to_hash
32 assert_equal "E1", event[:name]
33 assert event[:SenderPort] > 0
34 assert event[:ReceiptTime] > (Time.now.to_i * 1000)
35 assert_equal "WORLD", event[:hello]
36 assert_equal @options[:address], event[:SenderIP]
39 def test_listen_emit_custom_event_recv_and_close
40 @listener = LWES::Listener.new @options
41 tdb = LWES::TypeDB.new("#{File.dirname(__FILE__)}/test1.esf")
42 tmp = LWES::Event.subclass :name => "Event1", :db => tdb, :parent => nil
43 @emitter = LWES::Emitter.new @options
44 @emitter << tmp.new(:t_string => "HI")
45 event = @listener.recv
46 assert_instance_of tmp, event
47 assert_equal "HI", event.t_string
48 assert event.SenderPort > 0
49 assert event.ReceiptTime > (Time.now.to_i * 1000)
50 assert_equal @options[:address], event.SenderIP
53 def test_listen_recv_timeout
54 @listener = LWES::Listener.new @options
56 event = @listener.recv 10
58 delta = Time.now.to_f - t0
59 assert(delta >= 0.01, "delta=#{delta}")
62 def test_listen_each_signal
64 handler = trap(:USR1) { pipe[1].syswrite('.') }
65 @listener = LWES::Listener.new @options
66 @emitter = LWES::Emitter.new @options
70 Process.kill :USR1, $$
71 assert_equal '.', pipe[0].read(1)
72 @emitter.emit("E1", :hello => "WORLD")
75 @listener.each { |event| tmp << event and break }
77 assert_equal :OK, thr.value
78 assert_equal 1, tmp.size
79 assert_equal "WORLD", tmp[0].to_hash[:hello], tmp
82 pipe.each { |io| io.close }
84 end if LWES::Listener.method_defined?(:recv)