1 require 'test/test_helper'
4 class TestSocketHelper < Test::Unit::TestCase
5 include Unicorn::SocketHelper
7 GET_SLASH = "GET / HTTP/1.0\r\n\r\n".freeze
10 @log_tmp = Tempfile.new 'logger'
11 @logger = Logger.new(@log_tmp.path)
12 @test_addr = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1'
15 def test_bind_listen_tcp
16 port = unused_port @test_addr
17 @tcp_listener_name = "#@test_addr:#{port}"
18 @tcp_listener = bind_listen(@tcp_listener_name)
19 assert TCPServer === @tcp_listener
20 assert_equal @tcp_listener_name, sock_name(@tcp_listener)
23 def test_bind_listen_options
24 port = unused_port @test_addr
25 tcp_listener_name = "#@test_addr:#{port}"
26 tmp = Tempfile.new 'unix.sock'
27 unix_listener_name = tmp.path
29 [ { :backlog => 5 }, { :sndbuf => 4096 }, { :rcvbuf => 4096 },
30 { :backlog => 16, :rcvbuf => 4096, :sndbuf => 4096 }
32 assert_nothing_raised do
33 tcp_listener = bind_listen(tcp_listener_name, opts)
34 assert TCPServer === tcp_listener
36 unix_listener = bind_listen(unix_listener_name, opts)
37 assert UNIXServer === unix_listener
41 #system('cat', @log_tmp.path)
44 def test_bind_listen_unix
45 old_umask = File.umask(0777)
46 tmp = Tempfile.new 'unix.sock'
47 @unix_listener_path = tmp.path
48 File.unlink(@unix_listener_path)
49 @unix_listener = bind_listen(@unix_listener_path)
50 assert UNIXServer === @unix_listener
51 assert_equal @unix_listener_path, sock_name(@unix_listener)
52 assert File.readable?(@unix_listener_path), "not readable"
53 assert File.writable?(@unix_listener_path), "not writable"
54 assert_equal 0777, File.umask
59 def test_bind_listen_unix_idempotent
61 a = bind_listen(@unix_listener)
62 assert_equal a.fileno, @unix_listener.fileno
63 unix_server = server_cast(@unix_listener)
64 assert UNIXServer === unix_server
65 a = bind_listen(unix_server)
66 assert_equal a.fileno, unix_server.fileno
67 assert_equal a.fileno, @unix_listener.fileno
70 def test_bind_listen_tcp_idempotent
72 a = bind_listen(@tcp_listener)
73 assert_equal a.fileno, @tcp_listener.fileno
74 tcp_server = server_cast(@tcp_listener)
75 assert TCPServer === tcp_server
76 a = bind_listen(tcp_server)
77 assert_equal a.fileno, tcp_server.fileno
78 assert_equal a.fileno, @tcp_listener.fileno
81 def test_bind_listen_unix_rebind
83 new_listener = bind_listen(@unix_listener_path)
84 assert UNIXServer === new_listener
85 assert new_listener.fileno != @unix_listener.fileno
86 assert_equal sock_name(new_listener), sock_name(@unix_listener)
87 assert_equal @unix_listener_path, sock_name(new_listener)
89 client = server_cast(new_listener).accept
90 client.syswrite('abcde')
93 s = UNIXSocket.new(@unix_listener_path)
95 assert_equal 'abcde', s.sysread(5)
96 pid, status = Process.waitpid2(pid)
97 assert status.success?
101 assert_nothing_raised do
102 test_bind_listen_unix
105 unix_listener_socket = Socket.for_fd(@unix_listener.fileno)
106 assert Socket === unix_listener_socket
107 @unix_server = server_cast(unix_listener_socket)
108 assert_equal @unix_listener.fileno, @unix_server.fileno
109 assert UNIXServer === @unix_server
110 assert File.socket?(@unix_server.path)
111 assert_equal @unix_listener_path, sock_name(@unix_server)
113 tcp_listener_socket = Socket.for_fd(@tcp_listener.fileno)
114 assert Socket === tcp_listener_socket
115 @tcp_server = server_cast(tcp_listener_socket)
116 assert_equal @tcp_listener.fileno, @tcp_server.fileno
117 assert TCPServer === @tcp_server
118 assert_equal @tcp_listener_name, sock_name(@tcp_server)
123 sock_name(@unix_server)