diff options
Diffstat (limited to 'test/test_mogilefs.rb')
-rw-r--r-- | test/test_mogilefs.rb | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/test/test_mogilefs.rb b/test/test_mogilefs.rb index 249c2d6..439a045 100644 --- a/test/test_mogilefs.rb +++ b/test/test_mogilefs.rb @@ -609,30 +609,48 @@ class TestMogileFS__MogileFS < TestMogileFS ip = "127.0.0.1" a = TCPServer.new(ip, 0) hosts = [ "#{ip}:#{a.addr[1]}" ] + q = Queue.new timeout = 1 args = { :hosts => hosts, :domain => "foo", :timeout => timeout } c = MogileFS::MogileFS.new(args) received = [] secs = timeout + 1 th = Thread.new do - loop { - x = a.accept - 2.times do |i| - line = x.gets - %r{key=(\w+)} =~ line - sleep secs - secs = 0 - x.write("OK paths=1&path1=http://0/#{$1}\r\n") - end + x = a.accept + line = x.gets + %r{key=(\w+)} =~ line + sleep(secs) + begin + x.write("OK paths=1&path1=http://0/#{$1}\r\n") + rescue Errno::EPIPE + # EPIPE may or may not get raised due to timing issue, + # we don't care either way + rescue => e + flunk("#{e.message} (#{e.class})") + ensure + x.close + end + q << :continue_test + + x = a.accept + line = x.gets + %r{key=(\w+)} =~ line + begin + x.write("OK paths=1&path1=http://0/#{$1}\r\n") + rescue => e + flunk("#{e.message} (#{e.class})") + ensure x.close - } + end + end + assert_raises(MogileFS::UnreadableSocketError) do + c.get_paths("a") end - expect1 = %w(http://0/a) - assert_equal expect1, c.get_paths("a") + assert_equal :continue_test, q.pop, "avoid race during test" expect2 = %w(http://0/b) assert_equal expect2, c.get_paths("b") a.close - th.kill + th.join end def test_idempotent_command_response_truncated |