OSDN Git Service

Replaced mongrel with thin
[redminele/redminele.git] / ruby / lib / ruby / gems / 1.8 / gems / eventmachine-0.12.10-x86-mswin32-60 / tests / test_pause.rb
diff --git a/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.10-x86-mswin32-60/tests/test_pause.rb b/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.10-x86-mswin32-60/tests/test_pause.rb
new file mode 100644 (file)
index 0000000..ac5def8
--- /dev/null
@@ -0,0 +1,70 @@
+$:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
+require 'eventmachine'
+require 'socket'
+require 'test/unit'
+
+class TestPause < Test::Unit::TestCase
+  TestHost = "127.0.0.1"
+  TestPort = 9070
+
+  def setup
+    assert(!EM.reactor_running?)
+  end
+
+  def teardown
+    assert(!EM.reactor_running?)
+  end
+
+  #-------------------------------------
+
+  def test_pause_resume
+    test = self
+    server = nil
+
+    s_rx = c_rx = 0
+
+    EM.run do
+      EM.start_server TestHost, TestPort, Module.new {
+        define_method :post_init do
+          server = self
+        end
+
+        define_method :receive_data do |data|
+          s_rx += 1
+
+          EM.add_periodic_timer(0.01) { send_data 'hi' }
+          send_data 'hi'
+
+          # pause server, now no outgoing data will actually
+          # be sent and no more incoming data will be received
+          pause
+        end
+      }
+
+      c = EM.connect TestHost, TestPort, Module.new {
+        define_method :receive_data do |data|
+          c_rx += 1
+        end
+      }
+      EM.add_periodic_timer(0.01) { c.send_data 'hi' }
+
+      EM.add_timer(1) do
+        test.assert_equal 1, s_rx
+        test.assert_equal 0, c_rx
+        test.assert server.paused?
+
+        # resume server, queued outgoing and incoming data will be flushed
+        server.resume
+
+        test.assert ! server.paused?
+
+        EM.add_timer(1) do
+          test.assert server.paused?
+          test.assert s_rx >= 2
+          test.assert c_rx >= 1
+          EM.stop_event_loop
+        end
+      end
+    end
+  end
+end