[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 1 | // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "net/base/address_list.h" |
| 6 | |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 7 | #include "base/string_util.h" |
[email protected] | b59ff37 | 2009-07-15 22:04:32 | [diff] [blame] | 8 | #include "net/base/host_resolver_proc.h" |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 9 | #include "net/base/net_util.h" |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 10 | #include "net/base/sys_addrinfo.h" |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 11 | #if defined(OS_WIN) |
| 12 | #include "net/base/winsock_init.h" |
| 13 | #endif |
| 14 | #include "testing/gtest/include/gtest/gtest.h" |
| 15 | |
| 16 | namespace { |
| 17 | |
| 18 | // Use getaddrinfo() to allocate an addrinfo structure. |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 19 | void CreateAddressList(const std::string& hostname, |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 20 | net::AddressList* addrlist, int port) { |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 21 | #if defined(OS_WIN) |
| 22 | net::EnsureWinsockInit(); |
| 23 | #endif |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 24 | int rv = SystemHostResolverProc(hostname, |
[email protected] | 123ab1e3 | 2009-10-21 19:12:57 | [diff] [blame] | 25 | net::ADDRESS_FAMILY_UNSPECIFIED, |
| 26 | addrlist); |
[email protected] | b59ff37 | 2009-07-15 22:04:32 | [diff] [blame] | 27 | EXPECT_EQ(0, rv); |
| 28 | addrlist->SetPort(port); |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 29 | } |
| 30 | |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 31 | void CreateLongAddressList(net::AddressList* addrlist, int port) { |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 32 | CreateAddressList("192.168.1.1", addrlist, port); |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 33 | net::AddressList second_list; |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 34 | CreateAddressList("192.168.1.2", &second_list, port); |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 35 | addrlist->Append(second_list.head()); |
| 36 | } |
| 37 | |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 38 | TEST(AddressListTest, GetPort) { |
| 39 | net::AddressList addrlist; |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 40 | CreateAddressList("192.168.1.1", &addrlist, 81); |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 41 | EXPECT_EQ(81, addrlist.GetPort()); |
| 42 | |
| 43 | addrlist.SetPort(83); |
| 44 | EXPECT_EQ(83, addrlist.GetPort()); |
| 45 | } |
| 46 | |
| 47 | TEST(AddressListTest, Assignment) { |
| 48 | net::AddressList addrlist1; |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 49 | CreateAddressList("192.168.1.1", &addrlist1, 85); |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 50 | EXPECT_EQ(85, addrlist1.GetPort()); |
| 51 | |
| 52 | // Should reference the same data as addrlist1 -- so when we change addrlist1 |
| 53 | // both are changed. |
| 54 | net::AddressList addrlist2 = addrlist1; |
| 55 | EXPECT_EQ(85, addrlist2.GetPort()); |
| 56 | |
| 57 | addrlist1.SetPort(80); |
| 58 | EXPECT_EQ(80, addrlist1.GetPort()); |
| 59 | EXPECT_EQ(80, addrlist2.GetPort()); |
| 60 | } |
| 61 | |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 62 | TEST(AddressListTest, CopyRecursive) { |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 63 | net::AddressList addrlist1; |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 64 | CreateLongAddressList(&addrlist1, 85); |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 65 | EXPECT_EQ(85, addrlist1.GetPort()); |
| 66 | |
| 67 | net::AddressList addrlist2; |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 68 | addrlist2.Copy(addrlist1.head(), true); |
| 69 | |
| 70 | ASSERT_TRUE(addrlist2.head()->ai_next != NULL); |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 71 | |
| 72 | // addrlist1 is the same as addrlist2 at this point. |
| 73 | EXPECT_EQ(85, addrlist1.GetPort()); |
| 74 | EXPECT_EQ(85, addrlist2.GetPort()); |
| 75 | |
| 76 | // Changes to addrlist1 are not reflected in addrlist2. |
| 77 | addrlist1.SetPort(70); |
| 78 | addrlist2.SetPort(90); |
| 79 | |
| 80 | EXPECT_EQ(70, addrlist1.GetPort()); |
| 81 | EXPECT_EQ(90, addrlist2.GetPort()); |
| 82 | } |
| 83 | |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 84 | TEST(AddressListTest, CopyNonRecursive) { |
| 85 | net::AddressList addrlist1; |
| 86 | CreateLongAddressList(&addrlist1, 85); |
| 87 | EXPECT_EQ(85, addrlist1.GetPort()); |
| 88 | |
| 89 | net::AddressList addrlist2; |
| 90 | addrlist2.Copy(addrlist1.head(), false); |
| 91 | |
| 92 | ASSERT_TRUE(addrlist2.head()->ai_next == NULL); |
| 93 | |
| 94 | // addrlist1 is the same as addrlist2 at this point. |
| 95 | EXPECT_EQ(85, addrlist1.GetPort()); |
| 96 | EXPECT_EQ(85, addrlist2.GetPort()); |
| 97 | |
| 98 | // Changes to addrlist1 are not reflected in addrlist2. |
| 99 | addrlist1.SetPort(70); |
| 100 | addrlist2.SetPort(90); |
| 101 | |
| 102 | EXPECT_EQ(70, addrlist1.GetPort()); |
| 103 | EXPECT_EQ(90, addrlist2.GetPort()); |
| 104 | } |
| 105 | |
| 106 | TEST(AddressListTest, Append) { |
| 107 | net::AddressList addrlist1; |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 108 | CreateAddressList("192.168.1.1", &addrlist1, 11); |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 109 | EXPECT_EQ(11, addrlist1.GetPort()); |
| 110 | net::AddressList addrlist2; |
[email protected] | 69e6633 | 2010-04-07 14:41:40 | [diff] [blame] | 111 | CreateAddressList("192.168.1.2", &addrlist2, 12); |
[email protected] | ac9eec6 | 2010-02-20 18:50:38 | [diff] [blame] | 112 | EXPECT_EQ(12, addrlist2.GetPort()); |
| 113 | |
| 114 | ASSERT_TRUE(addrlist1.head()->ai_next == NULL); |
| 115 | addrlist1.Append(addrlist2.head()); |
| 116 | ASSERT_TRUE(addrlist1.head()->ai_next != NULL); |
| 117 | |
| 118 | net::AddressList addrlist3; |
| 119 | addrlist3.Copy(addrlist1.head()->ai_next, false); |
| 120 | EXPECT_EQ(12, addrlist3.GetPort()); |
| 121 | } |
| 122 | |
[email protected] | 8a00f00a | 2009-06-12 00:49:38 | [diff] [blame] | 123 | } // namespace |