summaryrefslogtreecommitdiff
path: root/test/webrick/test_do_not_reverse_lookup.rb
blob: efcb5a92990194b30334ae4c52d1a18397f2b95e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# frozen_string_literal: false
require "test/unit"
require "webrick"
require_relative "utils"

class TestDoNotReverseLookup < Test::Unit::TestCase
  class DNRL < WEBrick::GenericServer
    def run(sock)
      sock << sock.do_not_reverse_lookup.to_s
    end
  end

  @@original_do_not_reverse_lookup_value = Socket.do_not_reverse_lookup

  def teardown
    Socket.do_not_reverse_lookup = @@original_do_not_reverse_lookup_value
  end

  def do_not_reverse_lookup?(config)
    result = nil
    TestWEBrick.start_server(DNRL, config) do |server, addr, port, log|
      TCPSocket.open(addr, port) do |sock|
        result = {'true' => true, 'false' => false}[sock.gets]
      end
    end
    result
  end

  # +--------------------------------------------------------------------------+
  # |        Expected interaction between Socket.do_not_reverse_lookup         |
  # |            and WEBrick::Config::General[:DoNotReverseLookup]             |
  # +----------------------------+---------------------------------------------+
  # |                            |WEBrick::Config::General[:DoNotReverseLookup]|
  # +----------------------------+--------------+---------------+--------------+
  # |Socket.do_not_reverse_lookup|     TRUE     |     FALSE     |     NIL      |
  # +----------------------------+--------------+---------------+--------------+
  # |            TRUE            |     true     |     false     |     true     |
  # +----------------------------+--------------+---------------+--------------+
  # |            FALSE           |     true     |     false     |     false    |
  # +----------------------------+--------------+---------------+--------------+

  def test_socket_dnrl_true_server_dnrl_true
    Socket.do_not_reverse_lookup = true
    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
  end

  def test_socket_dnrl_true_server_dnrl_false
    Socket.do_not_reverse_lookup = true
    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
  end

  def test_socket_dnrl_true_server_dnrl_nil
    Socket.do_not_reverse_lookup = true
    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
  end

  def test_socket_dnrl_false_server_dnrl_true
    Socket.do_not_reverse_lookup = false
    assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
  end

  def test_socket_dnrl_false_server_dnrl_false
    Socket.do_not_reverse_lookup = false
    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
  end

  def test_socket_dnrl_false_server_dnrl_nil
    Socket.do_not_reverse_lookup = false
    assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
  end
end