summaryrefslogtreecommitdiffstats
path: root/net/dns/dns_hosts_unittest.cc
blob: f9ee2941d80c9c4348f93168cea970444fa2ab6f (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
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/dns/dns_hosts.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace net {

namespace {

TEST(DnsHostsTest, ParseHosts) {
  std::string contents =
      "127.0.0.1       localhost\tlocalhost.localdomain # standard\n"
      "\n"
      "1.0.0.1 localhost # ignored, first hit above\n"
      "fe00::x example company # ignored, malformed IPv6\n"
      "1.0.0.300 company # ignored, malformed IPv4\n"
      "1.0.0.1 # ignored, missing hostname\n"
      "1.0.0.1\t CoMpANy # normalized to 'company' \n"
      "::1\tlocalhost ip6-localhost ip6-loopback # comment # within a comment\n"
      "\t fe00::0 ip6-localnet\r\n"
      "2048::2 example\n"
      "2048::1 company example # ignored for 'example' \n"
      "gibberish";

  const struct {
    const char* host;
    AddressFamily family;
    const char* ip;
  } entries[] = {
    { "localhost", ADDRESS_FAMILY_IPV4, "127.0.0.1" },
    { "localhost.localdomain", ADDRESS_FAMILY_IPV4, "127.0.0.1" },
    { "company", ADDRESS_FAMILY_IPV4, "1.0.0.1" },
    { "localhost", ADDRESS_FAMILY_IPV6, "::1" },
    { "ip6-localhost", ADDRESS_FAMILY_IPV6, "::1" },
    { "ip6-loopback", ADDRESS_FAMILY_IPV6, "::1" },
    { "ip6-localnet", ADDRESS_FAMILY_IPV6, "fe00::0" },
    { "company", ADDRESS_FAMILY_IPV6, "2048::1" },
    { "example", ADDRESS_FAMILY_IPV6, "2048::2" },
  };

  DnsHosts expected;
  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(entries); ++i) {
    DnsHostsKey key(entries[i].host, entries[i].family);
    IPAddressNumber& ip = expected[key];
    ASSERT_TRUE(ip.empty());
    ASSERT_TRUE(ParseIPLiteralToNumber(entries[i].ip, &ip));
    ASSERT_EQ(ip.size(), (entries[i].family == ADDRESS_FAMILY_IPV4) ? 4u : 16u);
  }

  DnsHosts hosts;
  ParseHosts(contents, &hosts);
  ASSERT_EQ(expected, hosts);
}

}  // namespace

}  // namespace net