// 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/address_sorter.h" #if defined(OS_WIN) #include #endif #include "base/bind.h" #include "base/logging.h" #include "net/base/address_list.h" #include "net/base/net_util.h" #include "net/base/test_completion_callback.h" #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_WIN) #include "net/base/winsock_init.h" #endif namespace net { namespace { IPEndPoint MakeEndPoint(const std::string& str) { IPAddressNumber addr; CHECK(ParseIPLiteralToNumber(str, &addr)); return IPEndPoint(addr, 0); } void OnSortComplete(AddressList* result_buf, const CompletionCallback& callback, bool success, const AddressList& result) { if (success) *result_buf = result; callback.Run(success ? OK : ERR_FAILED); } TEST(AddressSorterTest, Sort) { int expected_result = OK; #if defined(OS_WIN) EnsureWinsockInit(); SOCKET sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); if (sock == INVALID_SOCKET) { expected_result = ERR_FAILED; } else { closesocket(sock); } #endif scoped_ptr sorter(AddressSorter::CreateAddressSorter()); AddressList list; list.push_back(MakeEndPoint("10.0.0.1")); list.push_back(MakeEndPoint("8.8.8.8")); list.push_back(MakeEndPoint("::1")); list.push_back(MakeEndPoint("2001:4860:4860::8888")); AddressList result; TestCompletionCallback callback; sorter->Sort(list, base::Bind(&OnSortComplete, &result, callback.callback())); EXPECT_EQ(expected_result, callback.WaitForResult()); } } // namespace } // namespace net