Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/tests/test_net_address_private.h" | 5 #include "ppapi/tests/test_net_address_private.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | |
| 10 | |
| 9 #include "ppapi/cpp/private/net_address_private.h" | 11 #include "ppapi/cpp/private/net_address_private.h" |
| 10 #include "ppapi/c/private/ppb_net_address_private.h" | 12 #include "ppapi/c/private/ppb_net_address_private.h" |
| 11 #include "ppapi/tests/test_utils.h" | 13 #include "ppapi/tests/test_utils.h" |
| 12 #include "ppapi/tests/testing_instance.h" | 14 #include "ppapi/tests/testing_instance.h" |
| 13 | 15 |
| 14 // Other than |GetAnyAddress()|, there's no way to actually get | |
| 15 // |PP_NetAddress_Private| structs from just this interface. We'll cheat and | |
| 16 // synthesize some. | |
| 17 | |
| 18 #if defined(PPAPI_POSIX) | |
| 19 #include <arpa/inet.h> | |
| 20 #include <netdb.h> | |
| 21 #include <netinet/in.h> | |
| 22 #include <sys/socket.h> | |
| 23 #endif | |
| 24 | |
| 25 #if defined(PPAPI_OS_MACOSX) | |
| 26 // This is a bit evil, but it's standard operating procedure for |s6_addr|.... | |
| 27 #define s6_addr16 __u6_addr.__u6_addr16 | |
| 28 #endif | |
| 29 | |
| 30 #if defined(PPAPI_OS_WIN) | |
| 31 #include <ws2tcpip.h> | |
| 32 | |
| 33 #define s6_addr16 u.Word | |
| 34 #endif | |
| 35 | |
| 36 using pp::NetAddressPrivate; | 16 using pp::NetAddressPrivate; |
| 37 | 17 |
| 38 namespace { | 18 namespace { |
| 39 | 19 |
| 40 // |host| should be an IP address represented as text, e.g., "192.168.0.1". | 20 PP_NetAddress_Private MakeIPv4NetAddress(const uint8_t host[4], int port) { |
| 41 PP_NetAddress_Private MakeIPv4NetAddress(const char* host, int port) { | 21 PP_NetAddress_Private addr; |
| 42 PP_NetAddress_Private addr = PP_NetAddress_Private(); | 22 NetAddressPrivate::CreateFromIPv4Address( |
| 43 addr.size = sizeof(sockaddr_in); | 23 reinterpret_cast<const uint8_t*>(host), port, &addr); |
|
viettrungluu
2012/03/22 04:54:34
Eh? Is this cast really needed?
Sergey Ulanov
2012/03/22 17:43:48
No. Removed.
| |
| 44 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr.data); | |
| 45 a->sin_family = AF_INET; | |
| 46 a->sin_port = htons(port); | |
| 47 a->sin_addr.s_addr = inet_addr(host); | |
| 48 return addr; | 24 return addr; |
| 49 } | 25 } |
| 50 | 26 |
| 51 // |host| should be an array of eight 16-bit numbers. | 27 PP_NetAddress_Private MakeIPv6NetAddress(const uint16_t host[8], uint16_t port, |
| 52 PP_NetAddress_Private MakeIPv6NetAddress(const uint16_t host[], uint16_t port, | |
| 53 uint32_t scope_id) { | 28 uint32_t scope_id) { |
| 54 PP_NetAddress_Private addr = PP_NetAddress_Private(); | 29 PP_NetAddress_Private addr = PP_NetAddress_Private(); |
| 55 addr.size = sizeof(sockaddr_in6); | 30 uint8_t ip[16]; |
| 56 sockaddr_in6* a = reinterpret_cast<sockaddr_in6*>(addr.data); | 31 for(int i = 0; i < 8; ++i) { |
| 57 a->sin6_family = AF_INET6; | 32 ip[i * 2] = host[i] >> 8; |
| 58 a->sin6_port = htons(port); | 33 ip[i * 2 + 1] = host[i] & 0xFF; |
|
viettrungluu
2012/03/22 04:54:34
Nit (here and elsewhere): apparently, all the othe
Sergey Ulanov
2012/03/22 17:43:48
Done.
| |
| 59 a->sin6_flowinfo = 0; | 34 } |
| 60 for (int i = 0; i < 8; i++) | 35 NetAddressPrivate::CreateFromIPv6Address(ip, scope_id, port, &addr); |
| 61 a->sin6_addr.s6_addr16[i] = htons(host[i]); | |
| 62 a->sin6_scope_id = scope_id; | |
| 63 return addr; | 36 return addr; |
| 64 } | 37 } |
| 65 | 38 |
| 66 } // namespace | 39 } // namespace |
| 67 | 40 |
| 68 REGISTER_TEST_CASE(NetAddressPrivate); | 41 REGISTER_TEST_CASE(NetAddressPrivate); |
| 69 | 42 |
| 70 TestNetAddressPrivate::TestNetAddressPrivate(TestingInstance* instance) | 43 TestNetAddressPrivate::TestNetAddressPrivate(TestingInstance* instance) |
| 71 : TestCase(instance) { | 44 : TestCase(instance) { |
| 72 } | 45 } |
| 73 | 46 |
| 74 bool TestNetAddressPrivate::Init() { | 47 bool TestNetAddressPrivate::Init() { |
| 75 return NetAddressPrivate::IsAvailable(); | 48 return NetAddressPrivate::IsAvailable(); |
| 76 } | 49 } |
| 77 | 50 |
| 78 void TestNetAddressPrivate::RunTests(const std::string& filter) { | 51 void TestNetAddressPrivate::RunTests(const std::string& filter) { |
| 79 RUN_TEST(AreEqual, filter); | 52 RUN_TEST(AreEqual, filter); |
| 80 RUN_TEST(AreHostsEqual, filter); | 53 RUN_TEST(AreHostsEqual, filter); |
| 81 RUN_TEST(Describe, filter); | 54 RUN_TEST(Describe, filter); |
| 82 RUN_TEST(ReplacePort, filter); | 55 RUN_TEST(ReplacePort, filter); |
| 83 RUN_TEST(GetAnyAddress, filter); | 56 RUN_TEST(GetAnyAddress, filter); |
| 84 RUN_TEST(DescribeIPv6, filter); | 57 RUN_TEST(DescribeIPv6, filter); |
| 85 RUN_TEST(GetFamily, filter); | 58 RUN_TEST(GetFamily, filter); |
| 86 RUN_TEST(GetPort, filter); | 59 RUN_TEST(GetPort, filter); |
| 87 RUN_TEST(GetAddress, filter); | 60 RUN_TEST(GetAddress, filter); |
| 61 RUN_TEST(GetScopeID, filter); | |
| 88 } | 62 } |
| 89 | 63 |
| 90 std::string TestNetAddressPrivate::TestAreEqual() { | 64 std::string TestNetAddressPrivate::TestAreEqual() { |
| 91 // No comparisons should ever be done with invalid addresses. | 65 // No comparisons should ever be done with invalid addresses. |
| 92 PP_NetAddress_Private invalid = PP_NetAddress_Private(); | 66 PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
| 93 ASSERT_FALSE(NetAddressPrivate::AreEqual(invalid, invalid)); | 67 ASSERT_FALSE(NetAddressPrivate::AreEqual(invalid, invalid)); |
| 94 | 68 |
| 95 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); | 69 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
|
viettrungluu
2012/03/22 04:54:34
Nit (here and elsewhere): I think we usually want
Sergey Ulanov
2012/03/22 17:43:48
Done.
| |
| 70 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 96 ASSERT_TRUE(NetAddressPrivate::AreEqual(localhost_80, localhost_80)); | 71 ASSERT_TRUE(NetAddressPrivate::AreEqual(localhost_80, localhost_80)); |
| 97 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, invalid)); | 72 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, invalid)); |
| 98 | 73 |
| 99 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); | 74 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress(localhost_ip, 1234); |
| 100 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, localhost_1234)); | 75 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, localhost_1234)); |
| 101 | 76 |
| 102 PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); | 77 uint8_t other_ip[4] = {192, 168, 0, 1}; |
| 78 PP_NetAddress_Private other_80 = MakeIPv4NetAddress(other_ip, 80); | |
| 103 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, other_80)); | 79 ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, other_80)); |
| 104 | 80 |
| 105 PASS(); | 81 PASS(); |
| 106 } | 82 } |
| 107 | 83 |
| 108 std::string TestNetAddressPrivate::TestAreHostsEqual() { | 84 std::string TestNetAddressPrivate::TestAreHostsEqual() { |
| 109 // No comparisons should ever be done with invalid addresses. | 85 // No comparisons should ever be done with invalid addresses. |
| 110 PP_NetAddress_Private invalid = PP_NetAddress_Private(); | 86 PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
| 111 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(invalid, invalid)); | 87 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(invalid, invalid)); |
| 112 | 88 |
| 113 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); | 89 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
| 90 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 114 ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_80)); | 91 ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_80)); |
| 115 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, invalid)); | 92 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, invalid)); |
| 116 | 93 |
| 117 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); | 94 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress(localhost_ip, 1234); |
| 118 ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_1234)); | 95 ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_1234)); |
| 119 | 96 |
| 120 PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); | 97 uint8_t other_ip[4] = {192, 168, 0, 1}; |
| 98 PP_NetAddress_Private other_80 = MakeIPv4NetAddress(other_ip, 80); | |
| 121 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, other_80)); | 99 ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, other_80)); |
| 122 | 100 |
| 123 PASS(); | 101 PASS(); |
| 124 } | 102 } |
| 125 | 103 |
| 126 std::string TestNetAddressPrivate::TestDescribe() { | 104 std::string TestNetAddressPrivate::TestDescribe() { |
| 127 PP_NetAddress_Private invalid = PP_NetAddress_Private(); | 105 PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
| 128 ASSERT_EQ("", NetAddressPrivate::Describe(invalid, false)); | 106 ASSERT_EQ("", NetAddressPrivate::Describe(invalid, false)); |
| 129 ASSERT_EQ("", NetAddressPrivate::Describe(invalid, true)); | 107 ASSERT_EQ("", NetAddressPrivate::Describe(invalid, true)); |
| 130 | 108 |
| 131 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); | 109 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
| 110 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 132 ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_80, false)); | 111 ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_80, false)); |
| 133 ASSERT_EQ("127.0.0.1:80", NetAddressPrivate::Describe(localhost_80, true)); | 112 ASSERT_EQ("127.0.0.1:80", NetAddressPrivate::Describe(localhost_80, true)); |
| 134 | 113 |
| 135 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); | 114 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress(localhost_ip, 1234); |
| 136 ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_1234, false)); | 115 ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_1234, false)); |
| 137 ASSERT_EQ("127.0.0.1:1234", NetAddressPrivate::Describe(localhost_1234, | 116 ASSERT_EQ("127.0.0.1:1234", NetAddressPrivate::Describe(localhost_1234, |
| 138 true)); | 117 true)); |
| 139 | 118 |
| 140 PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); | 119 uint8_t other_ip[4] = {192, 168, 0, 1}; |
| 120 PP_NetAddress_Private other_80 = MakeIPv4NetAddress(other_ip, 80); | |
| 141 ASSERT_EQ("192.168.0.1", NetAddressPrivate::Describe(other_80, false)); | 121 ASSERT_EQ("192.168.0.1", NetAddressPrivate::Describe(other_80, false)); |
| 142 ASSERT_EQ("192.168.0.1:80", NetAddressPrivate::Describe(other_80, true)); | 122 ASSERT_EQ("192.168.0.1:80", NetAddressPrivate::Describe(other_80, true)); |
| 143 | 123 |
| 144 PASS(); | 124 PASS(); |
| 145 } | 125 } |
| 146 | 126 |
| 147 std::string TestNetAddressPrivate::TestReplacePort() { | 127 std::string TestNetAddressPrivate::TestReplacePort() { |
| 148 // Assume that |AreEqual()| works correctly. | 128 // Assume that |AreEqual()| works correctly. |
| 149 PP_NetAddress_Private result = PP_NetAddress_Private(); | 129 PP_NetAddress_Private result = PP_NetAddress_Private(); |
| 150 | 130 |
| 151 PP_NetAddress_Private invalid = PP_NetAddress_Private(); | 131 PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
| 152 ASSERT_FALSE(NetAddressPrivate::ReplacePort(invalid, 1234, &result)); | 132 ASSERT_FALSE(NetAddressPrivate::ReplacePort(invalid, 1234, &result)); |
| 153 | 133 |
| 154 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); | 134 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
| 135 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 155 ASSERT_TRUE(NetAddressPrivate::ReplacePort(localhost_80, 1234, &result)); | 136 ASSERT_TRUE(NetAddressPrivate::ReplacePort(localhost_80, 1234, &result)); |
| 156 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); | 137 PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress(localhost_ip, 1234); |
| 157 ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_1234)); | 138 ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_1234)); |
| 158 | 139 |
| 159 // Test that having the out param being the same as the in param works | 140 // Test that having the out param being the same as the in param works |
| 160 // properly. | 141 // properly. |
| 161 ASSERT_TRUE(NetAddressPrivate::ReplacePort(result, 80, &result)); | 142 ASSERT_TRUE(NetAddressPrivate::ReplacePort(result, 80, &result)); |
| 162 ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_80)); | 143 ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_80)); |
| 163 | 144 |
| 164 PASS(); | 145 PASS(); |
| 165 } | 146 } |
| 166 | 147 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 244 ASSERT_EQ(test_cases[i].expected_without_port, | 225 ASSERT_EQ(test_cases[i].expected_without_port, |
| 245 NetAddressPrivate::Describe(addr, false)); | 226 NetAddressPrivate::Describe(addr, false)); |
| 246 ASSERT_EQ(test_cases[i].expected_with_port, | 227 ASSERT_EQ(test_cases[i].expected_with_port, |
| 247 NetAddressPrivate::Describe(addr, true)); | 228 NetAddressPrivate::Describe(addr, true)); |
| 248 } | 229 } |
| 249 | 230 |
| 250 PASS(); | 231 PASS(); |
| 251 } | 232 } |
| 252 | 233 |
| 253 std::string TestNetAddressPrivate::TestGetFamily() { | 234 std::string TestNetAddressPrivate::TestGetFamily() { |
| 254 PP_NetAddress_Private ipv4 = MakeIPv4NetAddress("127.0.0.1", 80); | 235 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
| 236 PP_NetAddress_Private ipv4 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 255 ASSERT_EQ(NetAddressPrivate::GetFamily(ipv4), PP_NETADDRESSFAMILY_IPV4); | 237 ASSERT_EQ(NetAddressPrivate::GetFamily(ipv4), PP_NETADDRESSFAMILY_IPV4); |
| 256 | 238 |
| 257 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; | 239 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; |
| 258 PP_NetAddress_Private ipv6 = MakeIPv6NetAddress(ipv6_address, | 240 PP_NetAddress_Private ipv6 = MakeIPv6NetAddress(ipv6_address, 123, 0); |
| 259 123, | |
| 260 0); | |
| 261 ASSERT_EQ(NetAddressPrivate::GetFamily(ipv6), PP_NETADDRESSFAMILY_IPV6); | 241 ASSERT_EQ(NetAddressPrivate::GetFamily(ipv6), PP_NETADDRESSFAMILY_IPV6); |
| 262 | 242 |
| 263 PASS(); | 243 PASS(); |
| 264 } | 244 } |
| 265 | 245 |
| 266 std::string TestNetAddressPrivate::TestGetPort() { | 246 std::string TestNetAddressPrivate::TestGetPort() { |
| 267 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); | 247 uint8_t localhost_ip[4] = {127, 0, 0, 1}; |
| 248 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 268 ASSERT_EQ(NetAddressPrivate::GetPort(localhost_80), 80); | 249 ASSERT_EQ(NetAddressPrivate::GetPort(localhost_80), 80); |
| 269 | 250 |
| 270 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; | 251 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; |
| 271 | 252 |
| 272 PP_NetAddress_Private port_123 = MakeIPv6NetAddress(ipv6_address, 123, 0); | 253 PP_NetAddress_Private port_123 = MakeIPv6NetAddress(ipv6_address, 123, 0); |
| 273 ASSERT_EQ(NetAddressPrivate::GetPort(port_123), 123); | 254 ASSERT_EQ(NetAddressPrivate::GetPort(port_123), 123); |
| 274 | 255 |
| 275 PP_NetAddress_Private port_FFFF = MakeIPv6NetAddress(ipv6_address, | 256 PP_NetAddress_Private port_FFFF = MakeIPv6NetAddress(ipv6_address, |
| 276 0xFFFF, | 257 0xFFFF, |
| 277 0); | 258 0); |
| 278 ASSERT_EQ(NetAddressPrivate::GetPort(port_FFFF), 0xFFFF); | 259 ASSERT_EQ(NetAddressPrivate::GetPort(port_FFFF), 0xFFFF); |
| 279 | 260 |
| 280 PASS(); | 261 PASS(); |
| 281 } | 262 } |
| 282 | 263 |
| 283 std::string TestNetAddressPrivate::TestGetAddress() { | 264 std::string TestNetAddressPrivate::TestGetAddress() { |
| 284 const int addr_storage_len = 16; | 265 const int addr_storage_len = 16; |
| 285 unsigned char addr_storage[addr_storage_len]; | 266 unsigned char addr_storage[addr_storage_len]; |
| 286 | 267 |
| 287 const char* ipv4_addr = "127.0.0.1"; | 268 const uint8_t ipv4_addr[4] = {127, 0, 0, 1}; |
| 288 uint32_t ipv4_addr_long = inet_addr(ipv4_addr); | |
| 289 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(ipv4_addr, 80); | 269 PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress(ipv4_addr, 80); |
| 290 memset(addr_storage, 0, addr_storage_len); | 270 memset(addr_storage, 0, addr_storage_len); |
| 291 ASSERT_TRUE(NetAddressPrivate::GetAddress(localhost_80, | 271 ASSERT_TRUE(NetAddressPrivate::GetAddress(localhost_80, |
| 292 addr_storage, | 272 addr_storage, |
| 293 addr_storage_len)); | 273 addr_storage_len)); |
| 294 ASSERT_EQ(memcmp(addr_storage, &ipv4_addr_long, 4), 0); | 274 ASSERT_EQ(memcmp(addr_storage, &ipv4_addr, 4), 0); |
| 295 | 275 |
| 296 // Insufficient storage for address. | 276 // Insufficient storage for address. |
| 297 ASSERT_FALSE(NetAddressPrivate::GetAddress(localhost_80, | 277 ASSERT_FALSE(NetAddressPrivate::GetAddress(localhost_80, |
| 298 addr_storage, | 278 addr_storage, |
| 299 1)); | 279 1)); |
| 300 | 280 |
| 301 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; | 281 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; |
| 302 PP_NetAddress_Private ipv6_addr = MakeIPv6NetAddress(ipv6_address, | 282 PP_NetAddress_Private ipv6_addr = MakeIPv6NetAddress(ipv6_address, |
| 303 123, | 283 123, |
| 304 0); | 284 0); |
| 305 | 285 |
| 306 // Ensure the ipv6 address is transformed properly into network order. | 286 // Ensure the ipv6 address is transformed properly into network order. |
| 307 for (int i = 0; i < 8; i++) | 287 uint8_t ipv6_bytes[16]; |
| 308 ipv6_address[i] = htons(ipv6_address[i]); | 288 for(int i = 0; i < 8; ++i) { |
| 289 ipv6_bytes[i * 2] = ipv6_address[i] >> 8; | |
| 290 ipv6_bytes[i * 2 + 1] = ipv6_address[i] & 0xFF; | |
| 291 } | |
| 309 | 292 |
| 310 memset(addr_storage, 0, addr_storage_len); | 293 memset(addr_storage, 0, addr_storage_len); |
| 311 ASSERT_TRUE(NetAddressPrivate::GetAddress(ipv6_addr, | 294 ASSERT_TRUE(NetAddressPrivate::GetAddress(ipv6_addr, |
| 312 addr_storage, | 295 addr_storage, |
| 313 addr_storage_len)); | 296 addr_storage_len)); |
| 314 ASSERT_EQ(memcmp(addr_storage, ipv6_address, 16), 0); | 297 ASSERT_EQ(memcmp(addr_storage, ipv6_bytes, 16), 0); |
| 315 | 298 |
| 316 // Insufficient storage for address. | 299 // Insufficient storage for address. |
| 317 ASSERT_FALSE(NetAddressPrivate::GetAddress(ipv6_addr, | 300 ASSERT_FALSE(NetAddressPrivate::GetAddress(ipv6_addr, |
| 318 addr_storage, | 301 addr_storage, |
| 319 1)); | 302 1)); |
| 320 | 303 |
| 321 PASS(); | 304 PASS(); |
| 322 } | 305 } |
| 306 | |
| 307 std::string TestNetAddressPrivate::TestGetScopeID() { | |
| 308 uint8_t localhost_ip[4] = {127, 0, 0, 1}; | |
| 309 PP_NetAddress_Private ipv4 = MakeIPv4NetAddress(localhost_ip, 80); | |
| 310 ASSERT_EQ(NetAddressPrivate::GetScopeID(ipv4), 0); | |
| 311 | |
| 312 uint16_t ipv6_address[8] = { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }; | |
| 313 | |
| 314 PP_NetAddress_Private ipv6_123 = MakeIPv6NetAddress(ipv6_address, 0, 123); | |
| 315 ASSERT_EQ(NetAddressPrivate::GetScopeID(ipv6_123), 123); | |
| 316 | |
| 317 PP_NetAddress_Private ipv6_max = | |
| 318 MakeIPv6NetAddress(ipv6_address, 0, 0xFFFFFFFF); | |
| 319 ASSERT_EQ(NetAddressPrivate::GetScopeID(ipv6_max), 0xFFFFFFFF); | |
| 320 | |
| 321 PASS(); | |
| 322 } | |
| OLD | NEW |