about summary refs log tree commit homepage
path: root/test/test_kqueue.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_kqueue.rb')
-rw-r--r--test/test_kqueue.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/test_kqueue.rb b/test/test_kqueue.rb
index fc59d60..6de75f3 100644
--- a/test/test_kqueue.rb
+++ b/test/test_kqueue.rb
@@ -68,5 +68,37 @@ class TestKqueue < Test::Unit::TestCase
   ensure
     kq.close
   end
+
+  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) &&
        IO.instance_methods.include?(:autoclose=)