1# frozen_string_literal: false
2require "test/unit"
3require "webrick"
4require_relative "utils"
5
6class TestDoNotReverseLookup < Test::Unit::TestCase
7  class DNRL < WEBrick::GenericServer
8    def run(sock)
9      sock << sock.do_not_reverse_lookup.to_s
10    end
11  end
12
13  @@original_do_not_reverse_lookup_value = Socket.do_not_reverse_lookup
14
15  def teardown
16    Socket.do_not_reverse_lookup = @@original_do_not_reverse_lookup_value
17  end
18
19  def do_not_reverse_lookup?(config)
20    result = nil
21    TestWEBrick.start_server(DNRL, config) do |server, addr, port, log|
22      TCPSocket.open(addr, port) do |sock|
23        result = {'true' => true, 'false' => false}[sock.gets]
24      end
25    end
26    result
27  end
28
29  # +--------------------------------------------------------------------------+
30  # |        Expected interaction between Socket.do_not_reverse_lookup         |
31  # |            and WEBrick::Config::General[:DoNotReverseLookup]             |
32  # +----------------------------+---------------------------------------------+
33  # |                            |WEBrick::Config::General[:DoNotReverseLookup]|
34  # +----------------------------+--------------+---------------+--------------+
35  # |Socket.do_not_reverse_lookup|     TRUE     |     FALSE     |     NIL      |
36  # +----------------------------+--------------+---------------+--------------+
37  # |            TRUE            |     true     |     false     |     true     |
38  # +----------------------------+--------------+---------------+--------------+
39  # |            FALSE           |     true     |     false     |     false    |
40  # +----------------------------+--------------+---------------+--------------+
41
42  def test_socket_dnrl_true_server_dnrl_true
43    Socket.do_not_reverse_lookup = true
44    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
45  end
46
47  def test_socket_dnrl_true_server_dnrl_false
48    Socket.do_not_reverse_lookup = true
49    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
50  end
51
52  def test_socket_dnrl_true_server_dnrl_nil
53    Socket.do_not_reverse_lookup = true
54    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
55  end
56
57  def test_socket_dnrl_false_server_dnrl_true
58    Socket.do_not_reverse_lookup = false
59    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
60  end
61
62  def test_socket_dnrl_false_server_dnrl_false
63    Socket.do_not_reverse_lookup = false
64    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
65  end
66
67  def test_socket_dnrl_false_server_dnrl_nil
68    Socket.do_not_reverse_lookup = false
69    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
70  end
71end
72