fix Ruby 2.0.0 compatibility
[lwes-ruby.git] / test / unit / test_listener.rb
blob3d24a57eb46ee62d4577ad1e68ab732fe7bf615a
1 require "#{File.expand_path(File.dirname(__FILE__))}/../test_helper"
3 class TestListener < Test::Unit::TestCase
4   def setup
5     @options = LISTENER_DEFAULTS.dup
6     @listener = @emitter = nil
7   end
9   def teardown
10     assert_nil(@listener.close) if @listener
11     assert_nil(@emitter.close) if @emitter
12     LWES::Event::CLASSES.clear
13   end
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 }
19   end
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 }
25   end
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]
37   end
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
51   end
53   def test_listen_recv_timeout
54     @listener = LWES::Listener.new @options
55     t0 = Time.now.to_f
56     event = @listener.recv 10
57     assert_nil event
58     delta = Time.now.to_f - t0
59     assert(delta >= 0.01, "delta=#{delta}")
60   end
62   def test_listen_each_signal
63     pipe = IO.pipe
64     handler = trap(:USR1) { pipe[1].syswrite('.') }
65     @listener = LWES::Listener.new @options
66     @emitter = LWES::Emitter.new @options
67     tmp = []
68     thr = Thread.new do
69       sleep 0.1
70       Process.kill :USR1, $$
71       assert_equal '.', pipe[0].read(1)
72       @emitter.emit("E1", :hello => "WORLD")
73       :OK
74     end
75     @listener.each { |event| tmp << event and break }
76     assert thr.join
77     assert_equal :OK, thr.value
78     assert_equal 1, tmp.size
79     assert_equal "WORLD", tmp[0].to_hash[:hello], tmp
80     ensure
81       trap(:USR1, handler)
82       pipe.each { |io| io.close }
83   end
84 end if LWES::Listener.method_defined?(:recv)