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