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 "wifi_ip_tools_test.h"
17 #include <net/if.h>
18 #include "securec.h"
19 #include "ip_tools.h"
20 #include "network_interface.h"
21 
22 using namespace testing::ext;
23 
24 namespace OHOS {
25 namespace Wifi {
26 HWTEST_F(WifiIpToolsTest, ConvertIpv4AddressTest, TestSize.Level1)
27 {
28     EXPECT_TRUE(IpTools::ConvertIpv4Address(0) == "");
29     EXPECT_TRUE(IpTools::ConvertIpv4Address(0xc0a80001) == "192.168.0.1");
30     EXPECT_TRUE(IpTools::ConvertIpv4Address("") == 0);
31     EXPECT_TRUE(IpTools::ConvertIpv4Address("192:168:0:1") == 0);
32     EXPECT_TRUE(IpTools::ConvertIpv4Address("192.168:0.1") == 0);
33     EXPECT_TRUE(IpTools::ConvertIpv4Address("289.168.0.1") == 0);
34     EXPECT_TRUE(IpTools::ConvertIpv4Address("-1.168.0.1") == 0);
35     EXPECT_TRUE(IpTools::ConvertIpv4Address("192.168.0.289") == 0);
36     EXPECT_TRUE(IpTools::ConvertIpv4Address("192.168.0.-1") == 0);
37     EXPECT_TRUE(IpTools::ConvertIpv4Address("192.168.0.1") == 0xc0a80001);
38 }
39 
40 HWTEST_F(WifiIpToolsTest, ConvertIpv6AddressTest, TestSize.Level1)
41 {
42     std::vector<unsigned char> tmp;
43     EXPECT_TRUE(IpTools::ConvertIpv6Address(tmp) == "");
44     // 2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b
45     tmp.push_back(0x20);
46     tmp.push_back(0x01);
47     tmp.push_back(0x0d);
48     tmp.push_back(0xb8);
49     tmp.push_back(0x3c);
50     tmp.push_back(0x4d);
51     tmp.push_back(0x00);
52     tmp.push_back(0x15);
53     tmp.push_back(0x00);
54     tmp.push_back(0x00);
55     tmp.push_back(0x00);
56     tmp.push_back(0x00);
57     tmp.push_back(0x1a);
58     tmp.push_back(0x2f);
59     tmp.push_back(0x1a);
60     EXPECT_TRUE(IpTools::ConvertIpv6Address(tmp) == "");
61     tmp.push_back(0x2b);
62     EXPECT_TRUE(IpTools::ConvertIpv6Address(tmp) == "2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b");
63 
64     std::vector<unsigned char> addr;
65     IpTools::ConvertIpv6Address("", addr);
66     EXPECT_TRUE(addr.size() == 0);
67     std::string ipv6Str = "2001:0db8:3c4d:15:0000:0000:1a2f:1a2b";
68     IpTools::ConvertIpv6Address(ipv6Str, addr);
69     EXPECT_TRUE(addr.size() == 0);
70     ipv6Str = "2001:0db8:3c4d:0000:0000:1a2f:1a2b";
71     IpTools::ConvertIpv6Address(ipv6Str, addr);
72     EXPECT_TRUE(addr.size() == 0);
73     ipv6Str = "2001:0db8:3c4d:0015:0000:0000:1a2f:1";
74     IpTools::ConvertIpv6Address(ipv6Str, addr);
75     ipv6Str = "2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b";
76     IpTools::ConvertIpv6Address(ipv6Str, addr);
77     EXPECT_TRUE(addr == tmp);
78 }
79 
80 HWTEST_F(WifiIpToolsTest, ConvertIpv4MaskTest, TestSize.Level1)
81 {
82     EXPECT_TRUE(IpTools::ConvertIpv4Mask(-1) == "255.255.255.0");
83     EXPECT_TRUE(IpTools::ConvertIpv4Mask(33) == "255.255.255.0");
84     EXPECT_TRUE(IpTools::ConvertIpv4Mask(0) == "255.255.255.0");
85     EXPECT_TRUE(IpTools::ConvertIpv4Mask(32) == "255.255.255.255");
86     EXPECT_TRUE(IpTools::ConvertIpv4Mask(11) == "255.224.0.0");
87 }
88 
89 HWTEST_F(WifiIpToolsTest, ConvertIpv6MaskTest, TestSize.Level1)
90 {
91     EXPECT_TRUE(IpTools::ConvertIpv6Mask(-1) == "");
92     EXPECT_TRUE(IpTools::ConvertIpv6Mask(129) == "");
93     EXPECT_TRUE(IpTools::ConvertIpv6Mask(0) == "0");
94     EXPECT_TRUE(IpTools::ConvertIpv6Mask(128) == "128");
95 }
96 
97 HWTEST_F(WifiIpToolsTest, GetMaskLengthTest, TestSize.Level1)
98 {
99     EXPECT_EQ(IpTools::GetMaskLength("255.0.0.0"), 8);
100 }
101 
102 HWTEST_F(WifiIpToolsTest, GetIPV6MaskLengthTest, TestSize.Level1)
103 {
104     EXPECT_EQ(IpTools::GetIPV6MaskLength(""), 0);
105     EXPECT_EQ(IpTools::GetIPV6MaskLength("ff00:0000:0000:0000:0000:0000:0000:0000"), 8);
106     EXPECT_EQ(IpTools::GetIPV6MaskLength("fe00:0000:0000:0000:0000:0000:0000:0000"), 7);
107     EXPECT_EQ(IpTools::GetIPV6MaskLength("fc00:0000:0000:0000:0000:0000:0000:0000"), 6);
108     EXPECT_EQ(IpTools::GetIPV6MaskLength("f800:0000:0000:0000:0000:0000:0000:0000"), 5);
109     EXPECT_EQ(IpTools::GetIPV6MaskLength("f000:0000:0000:0000:0000:0000:0000:0000"), 4);
110     EXPECT_EQ(IpTools::GetIPV6MaskLength("e000:0000:0000:0000:0000:0000:0000:0000"), 3);
111     EXPECT_EQ(IpTools::GetIPV6MaskLength("c000:0000:0000:0000:0000:0000:0000:0000"), 2);
112     EXPECT_EQ(IpTools::GetIPV6MaskLength("8000:0000:0000:0000:0000:0000:0000:0000"), 1);
113     EXPECT_EQ(IpTools::GetIPV6MaskLength("0000:0000:0000:0000:0000:0000:0000:0000"), 0);
114 }
115 
116 HWTEST_F(WifiIpToolsTest, GetExclusionObjectListTest, TestSize.Level1)
117 {
118     std::string str = "a,b,c";
119     std::vector<std::string> vec;
120     IpTools::GetExclusionObjectList(str, vec);
121     EXPECT_TRUE(vec.size() == 3);
122     str = "abc";
123     vec.clear();
124     IpTools::GetExclusionObjectList(str, vec);
125     EXPECT_TRUE(vec.size() == 1);
126 }
127 }  // namespace Wifi
128 }  // namespace OHOS