xref: /aosp_15_r20/system/libbase/parsenetaddress_test.cpp (revision 8f0ba417480079999ba552f1087ae592091b9d02)
1*8f0ba417SAndroid Build Coastguard Worker /*
2*8f0ba417SAndroid Build Coastguard Worker  * Copyright (C) 2016 The Android Open Source Project
3*8f0ba417SAndroid Build Coastguard Worker  *
4*8f0ba417SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*8f0ba417SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*8f0ba417SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*8f0ba417SAndroid Build Coastguard Worker  *
8*8f0ba417SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*8f0ba417SAndroid Build Coastguard Worker  *
10*8f0ba417SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*8f0ba417SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*8f0ba417SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8f0ba417SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*8f0ba417SAndroid Build Coastguard Worker  * limitations under the License.
15*8f0ba417SAndroid Build Coastguard Worker  */
16*8f0ba417SAndroid Build Coastguard Worker 
17*8f0ba417SAndroid Build Coastguard Worker #include "android-base/parsenetaddress.h"
18*8f0ba417SAndroid Build Coastguard Worker 
19*8f0ba417SAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*8f0ba417SAndroid Build Coastguard Worker 
21*8f0ba417SAndroid Build Coastguard Worker using android::base::ParseNetAddress;
22*8f0ba417SAndroid Build Coastguard Worker 
TEST(ParseNetAddressTest,TestUrl)23*8f0ba417SAndroid Build Coastguard Worker TEST(ParseNetAddressTest, TestUrl) {
24*8f0ba417SAndroid Build Coastguard Worker   std::string canonical, host, error;
25*8f0ba417SAndroid Build Coastguard Worker   int port = 123;
26*8f0ba417SAndroid Build Coastguard Worker 
27*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(
28*8f0ba417SAndroid Build Coastguard Worker       ParseNetAddress("www.google.com", &host, &port, &canonical, &error));
29*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("www.google.com:123", canonical);
30*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("www.google.com", host);
31*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(123, port);
32*8f0ba417SAndroid Build Coastguard Worker 
33*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(
34*8f0ba417SAndroid Build Coastguard Worker       ParseNetAddress("www.google.com:666", &host, &port, &canonical, &error));
35*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("www.google.com:666", canonical);
36*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("www.google.com", host);
37*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(666, port);
38*8f0ba417SAndroid Build Coastguard Worker }
39*8f0ba417SAndroid Build Coastguard Worker 
TEST(ParseNetAddressTest,TestIpv4)40*8f0ba417SAndroid Build Coastguard Worker TEST(ParseNetAddressTest, TestIpv4) {
41*8f0ba417SAndroid Build Coastguard Worker   std::string canonical, host, error;
42*8f0ba417SAndroid Build Coastguard Worker   int port = 123;
43*8f0ba417SAndroid Build Coastguard Worker 
44*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("1.2.3.4", &host, &port, &canonical, &error));
45*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:123", canonical);
46*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", host);
47*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(123, port);
48*8f0ba417SAndroid Build Coastguard Worker 
49*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("1.2.3.4:666", &host, &port, &canonical, &error));
50*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4:666", canonical);
51*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", host);
52*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(666, port);
53*8f0ba417SAndroid Build Coastguard Worker }
54*8f0ba417SAndroid Build Coastguard Worker 
TEST(ParseNetAddressTest,TestIpv6)55*8f0ba417SAndroid Build Coastguard Worker TEST(ParseNetAddressTest, TestIpv6) {
56*8f0ba417SAndroid Build Coastguard Worker   std::string canonical, host, error;
57*8f0ba417SAndroid Build Coastguard Worker   int port = 123;
58*8f0ba417SAndroid Build Coastguard Worker 
59*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("::1", &host, &port, &canonical, &error));
60*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("[::1]:123", canonical);
61*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("::1", host);
62*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(123, port);
63*8f0ba417SAndroid Build Coastguard Worker 
64*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("fe80::200:5aee:feaa:20a2", &host, &port,
65*8f0ba417SAndroid Build Coastguard Worker                               &canonical, &error));
66*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("[fe80::200:5aee:feaa:20a2]:123", canonical);
67*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("fe80::200:5aee:feaa:20a2", host);
68*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(123, port);
69*8f0ba417SAndroid Build Coastguard Worker 
70*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("[::1]:666", &host, &port, &canonical, &error));
71*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("[::1]:666", canonical);
72*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("::1", host);
73*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(666, port);
74*8f0ba417SAndroid Build Coastguard Worker 
75*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("[fe80::200:5aee:feaa:20a2]:666", &host, &port,
76*8f0ba417SAndroid Build Coastguard Worker                               &canonical, &error));
77*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("[fe80::200:5aee:feaa:20a2]:666", canonical);
78*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ("fe80::200:5aee:feaa:20a2", host);
79*8f0ba417SAndroid Build Coastguard Worker   EXPECT_EQ(666, port);
80*8f0ba417SAndroid Build Coastguard Worker }
81*8f0ba417SAndroid Build Coastguard Worker 
TEST(ParseNetAddressTest,TestInvalidAddress)82*8f0ba417SAndroid Build Coastguard Worker TEST(ParseNetAddressTest, TestInvalidAddress) {
83*8f0ba417SAndroid Build Coastguard Worker   std::string canonical, host;
84*8f0ba417SAndroid Build Coastguard Worker   int port;
85*8f0ba417SAndroid Build Coastguard Worker 
86*8f0ba417SAndroid Build Coastguard Worker   std::string failure_cases[] = {
87*8f0ba417SAndroid Build Coastguard Worker       // Invalid IPv4.
88*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4:",
89*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4::",
90*8f0ba417SAndroid Build Coastguard Worker       ":123",
91*8f0ba417SAndroid Build Coastguard Worker 
92*8f0ba417SAndroid Build Coastguard Worker       // Invalid IPv6.
93*8f0ba417SAndroid Build Coastguard Worker       ":1",
94*8f0ba417SAndroid Build Coastguard Worker       "::::::::1",
95*8f0ba417SAndroid Build Coastguard Worker       "[::1",
96*8f0ba417SAndroid Build Coastguard Worker       "[::1]",
97*8f0ba417SAndroid Build Coastguard Worker       "[::1]:",
98*8f0ba417SAndroid Build Coastguard Worker       "[::1]::",
99*8f0ba417SAndroid Build Coastguard Worker 
100*8f0ba417SAndroid Build Coastguard Worker       // Invalid port.
101*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4:-1",
102*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4:0",
103*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4:65536"
104*8f0ba417SAndroid Build Coastguard Worker       "1.2.3.4:hello",
105*8f0ba417SAndroid Build Coastguard Worker       "[::1]:-1",
106*8f0ba417SAndroid Build Coastguard Worker       "[::1]:0",
107*8f0ba417SAndroid Build Coastguard Worker       "[::1]:65536",
108*8f0ba417SAndroid Build Coastguard Worker       "[::1]:hello",
109*8f0ba417SAndroid Build Coastguard Worker   };
110*8f0ba417SAndroid Build Coastguard Worker 
111*8f0ba417SAndroid Build Coastguard Worker   for (const auto& address : failure_cases) {
112*8f0ba417SAndroid Build Coastguard Worker     // Failure should give some non-empty error string.
113*8f0ba417SAndroid Build Coastguard Worker     std::string error;
114*8f0ba417SAndroid Build Coastguard Worker     EXPECT_FALSE(ParseNetAddress(address, &host, &port, &canonical, &error));
115*8f0ba417SAndroid Build Coastguard Worker     EXPECT_NE("", error);
116*8f0ba417SAndroid Build Coastguard Worker   }
117*8f0ba417SAndroid Build Coastguard Worker }
118*8f0ba417SAndroid Build Coastguard Worker 
119*8f0ba417SAndroid Build Coastguard Worker // Null canonical address argument.
TEST(ParseNetAddressTest,TestNullCanonicalAddress)120*8f0ba417SAndroid Build Coastguard Worker TEST(ParseNetAddressTest, TestNullCanonicalAddress) {
121*8f0ba417SAndroid Build Coastguard Worker   std::string host, error;
122*8f0ba417SAndroid Build Coastguard Worker   int port = 42;
123*8f0ba417SAndroid Build Coastguard Worker 
124*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("www.google.com", &host, &port, nullptr, &error));
125*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("1.2.3.4", &host, &port, nullptr, &error));
126*8f0ba417SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseNetAddress("::1", &host, &port, nullptr, &error));
127*8f0ba417SAndroid Build Coastguard Worker }
128