Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Side by Side Diff: ppapi/tests/test_net_address.cc

Issue 16331007: Introduce PPB_NetAddress_Dev. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
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 "ppapi/tests/test_net_address.h"
6
7 #include <cstring>
8
9 #include "ppapi/cpp/dev/net_address_dev.h"
10 #include "ppapi/tests/test_utils.h"
11 #include "ppapi/tests/testing_instance.h"
12
13 using pp::NetAddress_Dev;
14
15 REGISTER_TEST_CASE(NetAddress);
16
17 namespace {
18
19 bool EqualIPv4Address(const PP_NetAddress_IPv4_Dev& addr1,
20 const PP_NetAddress_IPv4_Dev& addr2) {
21 return addr1.port == addr2.port &&
22 !memcmp(addr1.addr, addr2.addr, sizeof(addr1.addr));
23 }
24
25 bool EqualIPv6Address(const PP_NetAddress_IPv6_Dev& addr1,
26 const PP_NetAddress_IPv6_Dev& addr2) {
27 return addr1.port == addr2.port &&
28 !memcmp(addr1.addr, addr2.addr, sizeof(addr1.addr));
29 }
30
31 NetAddress_Dev CreateFromHostOrderIPv6Address(
32 const pp::InstanceHandle& instance,
33 const uint16_t host_order_addr[8],
34 uint16_t host_order_port) {
35 PP_NetAddress_IPv6_Dev ipv6_addr;
36 ipv6_addr.port = ConvertToNetEndian16(host_order_port);
37 for (size_t i = 0; i < 8; ++i) {
38 uint16_t net_order_addr = ConvertToNetEndian16(host_order_addr[i]);
39 memcpy(&ipv6_addr.addr[2 * i], &net_order_addr, 2);
40 }
41
42 return NetAddress_Dev(instance, ipv6_addr);
43 }
44
45 } // namespace
46
47 TestNetAddress::TestNetAddress(TestingInstance* instance) : TestCase(instance) {
48 }
49
50 bool TestNetAddress::Init() {
51 return NetAddress_Dev::IsAvailable();
bbudge 2013/06/06 19:01:10 Nice! We should probably start adding these IsAvai
52 }
53
54 void TestNetAddress::RunTests(const std::string& filter) {
55 RUN_TEST(IPv4Address, filter);
56 RUN_TEST(IPv6Address, filter);
57 RUN_TEST(DescribeAsString, filter);
58 }
59
60 std::string TestNetAddress::TestIPv4Address() {
61 PP_NetAddress_IPv4_Dev ipv4_addr = { ConvertToNetEndian16(80), 0,
62 { 127, 0, 0, 1 } };
63 NetAddress_Dev net_addr(instance_, ipv4_addr);
64 ASSERT_NE(0, net_addr.pp_resource());
65
66 ASSERT_EQ(PP_NETADDRESS_FAMILY_IPV4, net_addr.GetFamily());
67
68 PP_NetAddress_IPv4_Dev out_ipv4_addr;
69 ASSERT_TRUE(net_addr.DescribeAsIPv4Address(&out_ipv4_addr));
70 ASSERT_TRUE(EqualIPv4Address(ipv4_addr, out_ipv4_addr));
71
72 PP_NetAddress_IPv6_Dev out_ipv6_addr;
73 ASSERT_FALSE(net_addr.DescribeAsIPv6Address(&out_ipv6_addr));
74
75 PASS();
76 }
77
78 std::string TestNetAddress::TestIPv6Address() {
79 PP_NetAddress_IPv6_Dev ipv6_addr = {
80 ConvertToNetEndian16(1024), 0,
81 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }
82 };
83
84 NetAddress_Dev net_addr(instance_, ipv6_addr);
85 ASSERT_NE(0, net_addr.pp_resource());
86
87 ASSERT_EQ(PP_NETADDRESS_FAMILY_IPV6, net_addr.GetFamily());
88
89 PP_NetAddress_IPv6_Dev out_ipv6_addr;
90 ASSERT_TRUE(net_addr.DescribeAsIPv6Address(&out_ipv6_addr));
91 ASSERT_TRUE(EqualIPv6Address(ipv6_addr, out_ipv6_addr));
92
93 PP_NetAddress_IPv4_Dev out_ipv4_addr;
94 ASSERT_FALSE(net_addr.DescribeAsIPv4Address(&out_ipv4_addr));
95
96 PASS();
97 }
98
99 std::string TestNetAddress::TestDescribeAsString() {
100 {
101 // Test describing IPv4 addresses.
102 PP_NetAddress_IPv4_Dev ipv4_addr1 = { ConvertToNetEndian16(1234), 0,
103 { 127, 0, 0, 1 } };
104 NetAddress_Dev addr1(instance_, ipv4_addr1);
105 ASSERT_EQ("127.0.0.1", addr1.DescribeAsString(PP_FALSE).AsString());
106 ASSERT_EQ("127.0.0.1:1234", addr1.DescribeAsString(PP_TRUE).AsString());
107
108 PP_NetAddress_IPv4_Dev ipv4_addr2 = { ConvertToNetEndian16(80), 0,
109 { 192, 168, 0, 2 } };
110 NetAddress_Dev addr2(instance_, ipv4_addr2);
111 ASSERT_EQ("192.168.0.2", addr2.DescribeAsString(PP_FALSE).AsString());
112 ASSERT_EQ("192.168.0.2:80", addr2.DescribeAsString(PP_TRUE).AsString());
113 }
114 {
115 // Test describing IPv6 addresses.
116 static const struct {
117 uint16_t host_order_addr[8];
118 uint16_t host_order_port;
119 const char* expected_without_port;
120 const char* expected_with_port;
121 } ipv6_test_cases[] = {
122 { // Generic test case (unique longest run of zeros to collapse).
123 { 0x12, 0xabcd, 0, 0x0001, 0, 0, 0, 0xcdef }, 12,
124 "12:abcd:0:1::cdef", "[12:abcd:0:1::cdef]:12"
125 },
126 { // Ignore the first (non-longest) run of zeros.
127 { 0, 0, 0, 0x0123, 0, 0, 0, 0 }, 123,
128 "0:0:0:123::", "[0:0:0:123::]:123"
129 },
130 { // Collapse the first (equally-longest) run of zeros.
131 { 0x1234, 0xabcd, 0, 0, 0xff, 0, 0, 0xcdef }, 123,
132 "1234:abcd::ff:0:0:cdef", "[1234:abcd::ff:0:0:cdef]:123"
133 },
134 { // Don't collapse "runs" of zeros of length 1.
135 { 0, 0xa, 1, 2, 3, 0, 5, 0 }, 123,
136 "0:a:1:2:3:0:5:0", "[0:a:1:2:3:0:5:0]:123"
137 },
138 { // Collapse a run of zeros at the beginning.
139 { 0, 0, 0, 2, 3, 0, 0, 0 }, 123,
140 "::2:3:0:0:0", "[::2:3:0:0:0]:123"
141 },
142 { // Collapse a run of zeros at the end.
143 { 0, 0xa, 1, 2, 3, 0, 0, 0 }, 123,
144 "0:a:1:2:3::", "[0:a:1:2:3::]:123"
145 },
146 { // IPv4 192.168.1.2 embedded in IPv6 in the deprecated way.
147 { 0, 0, 0, 0, 0, 0, 0xc0a8, 0x102 }, 123,
148 "::192.168.1.2", "[::192.168.1.2]:123"
149 },
150 { // IPv4 192.168.1.2 embedded in IPv6.
151 { 0, 0, 0, 0, 0, 0xffff, 0xc0a8, 0x102 }, 123,
152 "::ffff:192.168.1.2", "[::ffff:192.168.1.2]:123"
153 },
154 { // *Not* IPv4 embedded in IPv6.
155 { 0, 0, 0, 0, 0, 0x1234, 0xc0a8, 0x102 }, 123,
156 "::1234:c0a8:102", "[::1234:c0a8:102]:123"
157 }
158 };
159
160 for (size_t i = 0;
161 i < sizeof(ipv6_test_cases) / sizeof(ipv6_test_cases[0]);
162 ++i) {
163 NetAddress_Dev addr = CreateFromHostOrderIPv6Address(
164 instance_, ipv6_test_cases[i].host_order_addr,
165 ipv6_test_cases[i].host_order_port);
166 ASSERT_EQ(ipv6_test_cases[i].expected_without_port,
167 addr.DescribeAsString(PP_FALSE).AsString());
168 ASSERT_EQ(ipv6_test_cases[i].expected_with_port,
169 addr.DescribeAsString(PP_TRUE).AsString());
170 }
171 }
172
173 PASS();
174 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698