// 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

