• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include <stdint.h>
18 #include "dhcp_define.h"
19 #include "address_utils.h"
20 
21 using namespace testing::ext;
22 
23 const uint8_t netmask24[] =  {255, 255, 255, 0};
24 const uint8_t netmask25[] =  {255, 255, 255, 128};
25 const uint8_t netmask26[] =  {255, 255, 255, 192};
26 const uint8_t netmask27[] =  {255, 255, 255, 224};
27 
28 /**
29 * @tc.name: ParseIpAddrTest
30 * @tc.desc: test address translation.
31 * @tc.type: FUNC
32 * @tc.require: AR00000000 SR00000000
33 */
34 HWTEST(AddressUtilsTest, ParseIpAddrTest, TestSize.Level1)
35 {
36     uint8_t ipData[] = {192, 168, 100, 1};
37     uint32_t testIp = ParseIp(ipData);
38     ASSERT_TRUE(testIp != 0);
39     EXPECT_EQ(testIp, ParseIpAddr("192.168.100.1"));
40 }
41 
42 HWTEST(AddressUtilsTest, ParseIpAddrFailedTest, TestSize.Level1)
43 {
44     uint32_t expectVal = 0;
45     EXPECT_EQ(expectVal, ParseIpAddr("192.168.100."));
46     EXPECT_EQ(expectVal, ParseIpAddr("0"));
47     EXPECT_EQ(expectVal, ParseIpAddr("abc.abc.abc.abc"));
48 }
49 
50 HWTEST(AddressUtilsTest, ParseStrIpAddrTest, TestSize.Level1)
51 {
52     uint8_t ipData[] = {192, 168, 100, 1};
53     uint32_t testIp = ParseIp(ipData);
54     EXPECT_TRUE(testIp != 0);
55     EXPECT_STREQ("192.168.100.1", ParseStrIp(testIp));
56 }
57 
58 /**
59 * @tc.name: NetworkAddressTest
60 * @tc.desc: test network address calculation.
61 * @tc.type: FUNC
62 * @tc.require: AR00000000 SR00000000
63 */
64 HWTEST(AddressUtilsTest, NetworkAddressTest, TestSize.Level1)
65 {
66     uint8_t srcNetData[] = {192, 168, 100, 0};
67     uint32_t srcNet = ParseIp(srcNetData);
68     ASSERT_TRUE(srcNet != 0);
69     uint32_t testIp = ParseIpAddr("192.168.100.100");
70     ASSERT_TRUE(testIp != 0);
71     uint32_t testNetmask = ParseIp(netmask24);
72     EXPECT_TRUE(testNetmask != 0);
73     EXPECT_EQ(srcNet, NetworkAddress(testIp, testNetmask));
74 }
75 
76 HWTEST(AddressUtilsTest, FirstIpAddressTest, TestSize.Level1)
77 {
78     uint8_t srcData[] = {192, 168, 100, 1};
79     uint32_t srcAddr = ParseIp(srcData);
80     ASSERT_TRUE(srcAddr != 0);
81     uint32_t testIp = ParseIpAddr("192.168.100.100");
82     ASSERT_TRUE(testIp != 0);
83     uint32_t testNetmask = ParseIp(netmask24);
84     EXPECT_TRUE(testNetmask != 0);
85     EXPECT_EQ(srcAddr, FirstIpAddress(testIp, testNetmask));
86 }
87 
88 HWTEST(AddressUtilsTest, LastIpAddressTest, TestSize.Level1)
89 {
90     uint8_t srcData[] = {192, 168, 100, 254};
91     uint32_t srcAddr = ParseIp(srcData);
92     ASSERT_TRUE(srcAddr != 0);
93     uint32_t testIp = ParseIpAddr("192.168.100.100");
94     ASSERT_TRUE(testIp != 0);
95     uint32_t testNetmask = ParseIp(netmask24);
96     EXPECT_TRUE(testNetmask != 0);
97     EXPECT_EQ(srcAddr, LastIpAddress(testIp, testNetmask));
98 }
99 
100 HWTEST(AddressUtilsTest, FirstNetIpAddressTest, TestSize.Level1)
101 {
102     uint8_t srcData[] = {192, 168, 100, 1};
103     uint32_t srcAddr = ParseIp(srcData);
104     ASSERT_TRUE(srcAddr != 0);
105     uint32_t testIp = ParseIpAddr("192.168.100.100");
106     ASSERT_TRUE(testIp != 0);
107     uint32_t testNetmask = ParseIp(netmask24);
108     EXPECT_TRUE(testNetmask != 0);
109     uint32_t network = NetworkAddress(testIp, testNetmask);
110     ASSERT_TRUE(network != 0);
111     EXPECT_EQ(srcAddr, FirstNetIpAddress(network));
112 }
113 
114 HWTEST(AddressUtilsTest, NextIpAddressTest, TestSize.Level1)
115 {
116     uint8_t srcData[] = {192, 168, 100, 100};
117     uint32_t srcAddr = ParseIp(srcData);
118     EXPECT_TRUE(srcAddr != 0);
119     uint32_t testIp1 = ParseIpAddr("192.168.100.101");
120     EXPECT_TRUE(testIp1 != 0);
121     uint32_t testIp2 = ParseIpAddr("192.168.100.102");
122     EXPECT_TRUE(testIp2 != 0);
123     uint32_t testNetmask = ParseIp(netmask24);
124     EXPECT_TRUE(testNetmask != 0);
125     EXPECT_EQ(testIp1, NextIpAddress(srcAddr, testNetmask, 0));
126     EXPECT_EQ(testIp2, NextIpAddress(srcAddr, testNetmask, 1));
127 }
128 
129 HWTEST(AddressUtilsTest, IpInNetworkTest, TestSize.Level1)
130 {
131     uint8_t srcData[] = {192, 168, 100, 0};
132     uint32_t srcAddr = ParseIp(srcData);
133     EXPECT_TRUE(srcAddr != 0);
134     uint32_t testNetmask = ParseIp(netmask25);
135     EXPECT_TRUE(testNetmask != 0);
136     uint32_t testIp1 = ParseIpAddr("192.168.100.120");
137     EXPECT_TRUE(testIp1 != 0);
138     uint32_t testIp2= ParseIpAddr("192.168.100.150");
139     EXPECT_TRUE(testIp2 != 0);
140     EXPECT_TRUE(IpInNetwork(testIp1, srcAddr, testNetmask));
141     EXPECT_FALSE(IpInNetwork(testIp2, srcAddr, testNetmask));
142 }
143 
144 HWTEST(AddressUtilsTest, IpInRangeTest, TestSize.Level1)
145 {
146     uint32_t testNetmask = ParseIp(netmask26);
147     ASSERT_TRUE(testNetmask != 0);
148     uint32_t beginIp = ParseIpAddr("192.168.100.100");
149     ASSERT_TRUE(beginIp != 0);
150     uint32_t endIp = LastIpAddress(beginIp, testNetmask);
151     ASSERT_TRUE(endIp != 0);
152 
153     uint32_t testIp1 = ParseIpAddr("192.168.100.90");
154     EXPECT_TRUE(testIp1 != 0);
155     uint32_t testIp2= ParseIpAddr("192.168.100.130");
156     EXPECT_TRUE(testIp2 != 0);
157     uint32_t testIp3= ParseIpAddr("192.168.100.120");
158     EXPECT_TRUE(testIp3 != 0);
159 
160     EXPECT_FALSE(IpInRange(testIp1, beginIp, endIp, testNetmask));
161     EXPECT_FALSE(IpInRange(testIp2, beginIp, endIp, testNetmask));
162     EXPECT_TRUE(IpInRange(testIp3, beginIp, endIp, testNetmask));
163 }
164 
165 HWTEST(AddressUtilsTest, BroadCastAddressTest, TestSize.Level1)
166 {
167     uint8_t srcData[] = {192, 168, 100, 255};
168     uint32_t srcAddr = ParseIp(srcData);
169     ASSERT_TRUE(srcAddr != 0);
170     uint32_t testNetmask = ParseIp(netmask24);
171     ASSERT_TRUE(testNetmask != 0);
172     uint32_t testIp1 = ParseIpAddr("192.168.100.120");
173     EXPECT_TRUE(testIp1 != 0);
174     EXPECT_EQ(srcAddr, BroadCastAddress(testIp1, testNetmask));
175 }
176 
177 HWTEST(AddressUtilsTest, ParseIpHtonlTest, TestSize.Level1)
178 {
179     uint8_t srcData[] = {150, 100, 168, 192};
180     uint32_t srcAddr = ParseIp(srcData);
181     ASSERT_TRUE(srcAddr != 0);
182     EXPECT_EQ(srcAddr, ParseIpHtonl("192.168.100.150"));
183 }
184 
185 HWTEST(AddressUtilsTest, NetworkBitsTest, TestSize.Level1)
186 {
187     uint32_t mask1 = ParseIp(netmask24);
188     ASSERT_TRUE(mask1 != 0);
189     uint32_t mask2 = ParseIp(netmask25);
190     ASSERT_TRUE(mask2 != 0);
191     uint32_t mask3 = ParseIp(netmask26);
192     ASSERT_TRUE(mask3 != 0);
193     uint32_t mask4 = ParseIp(netmask27);
194     ASSERT_TRUE(mask4 != 0);
195 
196     EXPECT_EQ(24, NetworkBits(mask1));
197     EXPECT_EQ(25, NetworkBits(mask2));
198     EXPECT_EQ(26, NetworkBits(mask3));
199     EXPECT_EQ(27, NetworkBits(mask4));
200 }
201 
202 HWTEST(AddressUtilsTest, HostBitsTest, TestSize.Level1)
203 {
204     uint32_t mask1 = ParseIp(netmask24);
205     ASSERT_TRUE(mask1 != 0);
206     uint32_t mask2 = ParseIp(netmask25);
207     ASSERT_TRUE(mask2 != 0);
208     uint32_t mask3 = ParseIp(netmask26);
209     ASSERT_TRUE(mask3 != 0);
210     uint32_t mask4 = ParseIp(netmask27);
211     ASSERT_TRUE(mask4 != 0);
212 
213     EXPECT_EQ(8, HostBits(mask1));
214     EXPECT_EQ(7, HostBits(mask2));
215     EXPECT_EQ(6, HostBits(mask3));
216     EXPECT_EQ(5, HostBits(mask4));
217 }
218 
219 HWTEST(AddressUtilsTest, IsEmptyHWAddrTest, TestSize.Level1)
220 {
221     uint8_t testMac1[DHCP_HWADDR_LENGTH] = {0};
222     uint8_t testMac2[DHCP_HWADDR_LENGTH] = {0, 0, 0, 0, 0, 0, 0, 0x01};
223     uint8_t testMac3[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x43, 0};
224 
225     EXPECT_TRUE(IsEmptyHWAddr(testMac1));
226     EXPECT_TRUE(IsEmptyHWAddr(testMac2));
227     EXPECT_FALSE(IsEmptyHWAddr(testMac3));
228 }
229 
230 HWTEST(AddressUtilsTest, ParseStrMacTest, TestSize.Level1)
231 {
232     uint8_t testMac[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x43, 0};
233     EXPECT_STREQ("00:ae:dc:cc:9f:43", ParseStrMac(testMac, MAC_ADDR_LENGTH));
234 }
235 
236 HWTEST(AddressUtilsTest, HostToNetworkTest, TestSize.Level1)
237 {
238     uint8_t srcData[] = {150, 100, 168, 192};
239     uint32_t srcAddr = ParseIp(srcData);
240     ASSERT_TRUE(srcAddr != 0);
241     uint32_t testIp = ParseIpAddr("192.168.100.150");
242     ASSERT_TRUE(testIp != 0);
243     EXPECT_EQ(srcAddr, HostToNetwork(testIp));
244 }
245 
246 HWTEST(AddressUtilsTest, NetworkToHostTest, TestSize.Level1)
247 {
248     uint8_t srcData[] = {192, 168, 100, 150};
249     uint32_t srcAddr = ParseIp(srcData);
250     ASSERT_TRUE(srcAddr != 0);
251     uint8_t testData[] = {150, 100, 168, 192};
252     uint32_t testAddr = ParseIp(testData);
253     ASSERT_TRUE(testAddr != 0);
254     EXPECT_EQ(srcAddr, NetworkToHost(testAddr));
255 }
256 
257 HWTEST(AddressUtilsTest, ParseLogMacTest, TestSize.Level1)
258 {
259     uint8_t testMac[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x43, 0};
260     EXPECT_STREQ("??:ae:??:??:9f:43", ParseLogMac(testMac));
261 }
262 
263 HWTEST(AddressUtilsTest, AddrEquelsTest, TestSize.Level1)
264 {
265     uint8_t testMac1[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x43, 0};
266     uint8_t testMac2[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x43, 0};
267     uint8_t testMac3[DHCP_HWADDR_LENGTH] = {0, 0xae, 0xdc, 0xcc, 0x9f, 0x45, 0};
268 
269     EXPECT_EQ(1, AddrEquels(testMac1, testMac2, MAC_ADDR_LENGTH));
270     EXPECT_EQ(0, AddrEquels(testMac1, testMac3, MAC_ADDR_LENGTH));
271     EXPECT_EQ(0, AddrEquels(testMac2, testMac3, MAC_ADDR_LENGTH));
272 }
273