Add verify_uris utility method
[ruby-mogilefs-client.git] / test / test_utils.rb
blob3f8819c29133da767375e61674cb143f518eb4bf
1 require 'test/unit'
2 require 'pp'
3 require 'socket'
4 $TESTING = true
5 require 'mogilefs'
6 require 'mogilefs/util'
8 class TestUtils < Test::Unit::TestCase
9   include MogileFS::Util
11   def test_verify_uris
12     good_serv, good_port = server_start
13     good_acceptor = Thread.new do
14       good_client, good_client_addr = good_serv.accept
15       good_client.readpartial(4096)
16       good_client.syswrite("HTTP/1.0 200 OK\r\nContent-Length: 0\r\n\r\n")
17     end
18     bad_serv, bad_port = server_start
19     bad_acceptor = Thread.new do
20       bad_client, bad_client_addr = bad_serv.accept
21       bad_client.close rescue nil
22     end
24     good_uri = URI.parse("http://127.0.0.1:#{good_port}/")
25     bad_uri = URI.parse("http://127.0.0.1:#{bad_port}/")
26     ok = verify_uris([ good_uri, bad_uri ])
27     assert_equal [ good_uri ], ok
28     ensure
29       Thread.kill(good_acceptor) rescue nil
30       Thread.kill(bad_acceptor) rescue nil
31       good_serv.close rescue nil
32       bad_serv.close rescue nil
33   end
35   private
37     def server_start
38       port = nil
39       sock = nil
40       retries = 0
41       begin
42         port = 5000 + $$ % 1000 + rand(60000)
43         sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
44         sock.bind(Socket.pack_sockaddr_in(port, '127.0.0.1'))
45         sock.listen(5)
46       rescue Errno::EADDRINUSE
47         sock.close rescue nil
48         retry if (retries += 1) < 10
49       end
50       [ sock, port ]
51     end
53 end