about summary refs log tree commit homepage
path: root/test/test_middleware_unicorn_ipv6.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-02-16 01:31:41 +0000
committerEric Wong <normalperson@yhbt.net>2011-02-15 17:35:40 -0800
commite10e520d47fa96cf549c7d544d6575baa8ed748a (patch)
treef05d6128cf2ea7173d70e1ad0205580a7df8c28a /test/test_middleware_unicorn_ipv6.rb
parente5faa4da78af196ee5abbccf197671fd8e77adad (diff)
downloadraindrops-e10e520d47fa96cf549c7d544d6575baa8ed748a.tar.gz
Since Unicorn and Rainbows! support IPv6 now, it makes sense to
support the rfc2732-style addresses it returns.
Diffstat (limited to 'test/test_middleware_unicorn_ipv6.rb')
-rw-r--r--test/test_middleware_unicorn_ipv6.rb55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/test_middleware_unicorn_ipv6.rb b/test/test_middleware_unicorn_ipv6.rb
new file mode 100644
index 0000000..6f00cb1
--- /dev/null
+++ b/test/test_middleware_unicorn_ipv6.rb
@@ -0,0 +1,55 @@
+# -*- encoding: binary -*-
+require "test/unit"
+require "raindrops"
+require "rack"
+require "rack/lobster"
+require "open-uri"
+begin
+  require "unicorn"
+rescue => e
+  warn "W: #{e} skipping test since Unicorn was not found"
+end
+
+begin
+  tmp = TCPServer.new(ENV["TEST_HOST6"] || '::1', 0)
+  ipv6_enabled = true
+rescue => e
+  warn "skipping IPv6 tests, host does not seem to be IPv6 enabled:"
+  warn "  #{e.class}: #{e}"
+  ipv6_enabled = false
+end
+$stderr.sync = $stdout.sync = true
+
+class TestMiddlewareUnicornIPv6 < Test::Unit::TestCase
+
+  def setup
+    @host = ENV["TEST_HOST6"] || "::1"
+    sock = TCPServer.new @host, 0
+    @port = sock.addr[1]
+    ENV["UNICORN_FD"] = sock.fileno.to_s
+    @host_with_port = "[#@host]:#@port"
+    @opts = { :listeners => [ @host_with_port ] }
+    @addr_regexp = Regexp.escape @host_with_port
+  end
+
+  def test_auto_listener
+    @app = Rack::Builder.new do
+      use Raindrops::Middleware
+      run Rack::Lobster.new
+    end
+    @srv = fork { Unicorn.run(@app, @opts) }
+    s = TCPSocket.new @host, @port
+    s.write "GET /_raindrops HTTP/1.0\r\n\r\n"
+    resp = s.read
+    head, body = resp.split /\r\n\r\n/, 2
+    assert_match %r{^#@addr_regexp active: 1$}, body
+    assert_match %r{^#@addr_regexp queued: 0$}, body
+  end
+
+  def teardown
+    Process.kill :QUIT, @srv
+    _, status = Process.waitpid2 @srv
+    assert status.success?
+  end
+end if defined?(Unicorn) && RUBY_PLATFORM =~ /linux/ && ipv6_enabled
+