test/test_kqueue.rb in sleepy_penguin-3.4.1 vs test/test_kqueue.rb in sleepy_penguin-3.5.0
- old
+ new
@@ -1,11 +1,8 @@
-require './test/helper'
-$-w = true
-Thread.abort_on_exception = true
-require 'sleepy_penguin'
+require_relative 'helper'
-class TestKqueue < Testcase
+class TestKqueue < Test::Unit::TestCase
include SleepyPenguin
def test_kqueue
kq = Kqueue.new
assert_kind_of IO, kq.to_io
@@ -69,7 +66,38 @@
_, status = Process.waitpid2(pid)
assert status.success?, status.inspect
ensure
kq.close
end
-end if defined?(SleepyPenguin::Kqueue) &&
- IO.instance_methods.include?(:autoclose=)
+
+ def test_epoll_nest
+ kq1 = Kqueue.new
+ kq2 = Kqueue.new
+ r1, w1 = IO.pipe
+ r2, w2 = IO.pipe
+ w1.write '.'
+ w2.write '.'
+ kq1.kevent([
+ Kevent[r1.fileno, EvFilt::READ, Ev::ADD, 0, 0, r1],
+ Kevent[w1.fileno, EvFilt::WRITE, Ev::ADD, 0, 0, w1]
+ ])
+ kq2.kevent([
+ Kevent[r2.fileno, EvFilt::READ, Ev::ADD, 0, 0, r2],
+ Kevent[w2.fileno, EvFilt::WRITE, Ev::ADD, 0, 0, w2]
+ ])
+ outer = []
+ inner = []
+ nr = 0
+ kq1.kevent(nil, 2) do |kev1|
+ outer << kev1.udata
+ kq2.kevent(nil, 2) do |kev2|
+ (inner[nr] ||= []) << kev2.udata
+ end
+ nr += 1
+ end
+ assert_equal [ r1, w1 ].sort_by(&:fileno), outer.sort_by(&:fileno)
+ exp = [ r2, w2 ].sort_by(&:fileno)
+ assert_equal [ exp, exp ], inner.map { |x| x.sort_by(&:fileno) }
+ ensure
+ [ r1, w1, r2, w2, kq1, kq2 ].compact.each(&:close)
+ end
+end if defined?(SleepyPenguin::Kqueue)