mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.0 KiB
98 lines
2.0 KiB
#!/usr/bin/env ruby
|
|
require 'socket'
|
|
|
|
def test(description)
|
|
pid = fork do
|
|
exec(File.dirname(__FILE__) + "/echo")
|
|
end
|
|
|
|
puts "#{description}: "
|
|
begin
|
|
sleep 0.5 # give time for the server to start
|
|
yield(pid)
|
|
rescue
|
|
puts "\033[1;31mFAIL\033[m"
|
|
raise $!
|
|
ensure
|
|
`kill -9 #{pid}`
|
|
end
|
|
puts "\033[1;32mPASS\033[m"
|
|
end
|
|
|
|
test("make sure echo server works") do
|
|
socket = TCPSocket.open("localhost", 5000)
|
|
w = socket.write("hello");
|
|
raise "error" unless w == 5
|
|
|
|
got = socket.recv(5);
|
|
raise "error" unless got == "hello"
|
|
|
|
socket.close
|
|
end
|
|
|
|
test("doing nothing should not timeout the server") do |pid|
|
|
10.times do
|
|
print "."
|
|
STDOUT.flush
|
|
if Process.waitpid(pid, Process::WNOHANG)
|
|
raise "server died when it shouldn't have"
|
|
end
|
|
sleep 1
|
|
end
|
|
puts ""
|
|
end
|
|
|
|
test("connecting and doing nothing to should timeout in 5 seconds") do |pid|
|
|
socket = TCPSocket.open("localhost", 5000)
|
|
i = 0
|
|
10.times do
|
|
print "."
|
|
STDOUT.flush
|
|
break if Process.waitpid(pid, Process::WNOHANG)
|
|
sleep 1
|
|
i+=1
|
|
end
|
|
puts ""
|
|
raise "died too soon (after #{i} seconds)" if i < 5
|
|
raise "died too late (after #{i} seconds)" if i > 6
|
|
end
|
|
|
|
|
|
test("connecting and writing once to should timeout in 5 seconds") do |pid|
|
|
socket = TCPSocket.open("localhost", 5000)
|
|
w = socket.write("hello");
|
|
raise "error" unless w == 5
|
|
|
|
i = 0
|
|
10.times do
|
|
print "."
|
|
STDOUT.flush
|
|
break if Process.waitpid(pid, Process::WNOHANG)
|
|
sleep 1
|
|
i+=1
|
|
end
|
|
puts ""
|
|
raise "died too soon (after #{i} seconds)" if i < 5
|
|
raise "died too late (after #{i} seconds)" if i > 6
|
|
end
|
|
|
|
test("connecting waiting 3, writing once to should timeout in 8 seconds") do |pid|
|
|
socket = TCPSocket.open("localhost", 5000)
|
|
|
|
sleep 3
|
|
|
|
w = socket.write("hello");
|
|
raise "error" unless w == 5
|
|
|
|
i = 0
|
|
10.times do
|
|
print "."
|
|
STDOUT.flush
|
|
break if Process.waitpid(pid, Process::WNOHANG)
|
|
sleep 1
|
|
i+=1
|
|
end
|
|
puts ""
|
|
raise "died too soon (after #{i} seconds)" if i < 5
|
|
raise "died too late (after #{i} seconds)" if i > 6
|
|
end
|
|
|