1 /*
2  * Copyright (C) 2024 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 #include <gtest/gtest.h>
16 #include "dhcp_logger.h"
17 #include "dhcp_arp_checker.h"
18 #include "mock_system_func.h"
19 #include "securec.h"
20 
21 DEFINE_DHCPLOG_DHCP_LABEL("DhcpArpCheckerTest");
22 using namespace testing::ext;
23 using namespace OHOS::DHCP;
24 
25 constexpr int32_t MAC_ADDR_LEN = 6;
26 constexpr int32_t TIMEOUT = 50;
27 
28 namespace OHOS {
29 class DhcpArpCheckerTest : public testing::Test {
30 public:
SetUpTestCase()31     static void SetUpTestCase()
32     {}
TearDownTestCase()33     static void TearDownTestCase()
34     {}
SetUp()35     virtual void SetUp()
36     {}
TearDown()37     virtual void TearDown()
38     {}
39 };
40 /**
41  * @tc.name: DoArpTest_SUCCESS
42  * @tc.desc: DoArpTest
43  * @tc.type: FUNC
44  * @tc.require: issue
45 */
HWTEST_F(DhcpArpCheckerTest, DoArpTest_SUCCESS, TestSize.Level1)46 HWTEST_F(DhcpArpCheckerTest, DoArpTest_SUCCESS, TestSize.Level1)
47 {
48     DHCP_LOGE("enter DoArpTest_SUCCESS");
49     DhcpArpChecker dhcpArpChecker;
50     std::string ifName = "wlantest";
51     std::string ifaceMac = "11:22:33:44:55:66";
52     std::string ipAddr = "0.0.0.1";
53     int32_t timeoutMillis = TIMEOUT;
54     uint64_t timeCost = 0;
55     std::string senderIp =  "0.0.0.2";
56     EXPECT_FALSE(dhcpArpChecker.Start(ifName, ifaceMac, senderIp, ipAddr));
57     EXPECT_FALSE(dhcpArpChecker.DoArpCheck(timeoutMillis, false, timeCost));
58     ifName = "wlan0";
59     dhcpArpChecker.Start(ifName, ifaceMac, senderIp, ipAddr);
60     dhcpArpChecker.DoArpCheck(timeoutMillis, false, timeCost);
61 }
62 
63 /**
64  * @tc.name: CreateSocketTest_001
65  * @tc.desc: CreateSocketTest
66  * @tc.type: FUNC
67  * @tc.require: issue
68 */
HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_001, TestSize.Level1)69 HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_001, TestSize.Level1)
70 {
71     DHCP_LOGE("enter CreateSocketTest_001");
72     DhcpArpChecker dhcpArpChecker;
73     std::string ifName = "";
74     uint16_t protocol = ETH_P_ARP;
75     MockSystemFunc::SetMockFlag(true);
76     EXPECT_TRUE(dhcpArpChecker.CreateSocket(ifName.c_str(), protocol) == -1);
77     ifName = "wlantest";
78     EXPECT_TRUE(dhcpArpChecker.CreateSocket(ifName.c_str(), protocol) == -1);
79     ifName = "wlan0";
80     EXPECT_CALL(MockSystemFunc::GetInstance(), socket(_, _, _)).WillOnce(Return(-1)).WillRepeatedly(Return(-1));
81     EXPECT_TRUE(dhcpArpChecker.CreateSocket(ifName.c_str(), protocol) == -1);
82     MockSystemFunc::SetMockFlag(false);
83 }
84 
85 /**
86  * @tc.name: CreateSocketTest_002
87  * @tc.desc: CreateSocketTest
88  * @tc.type: FUNC
89  * @tc.require: issue
90 */
HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_002, TestSize.Level1)91 HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_002, TestSize.Level1)
92 {
93     DHCP_LOGE("enter CreateSocketTest_002");
94     DhcpArpChecker dhcpArpChecker;
95     std::string ifName = "wlan0";
96     uint16_t protocol = ETH_P_ARP;
97     MockSystemFunc::SetMockFlag(true);
98     EXPECT_CALL(MockSystemFunc::GetInstance(), socket(_, _, _)).WillOnce(Return(1));
99     EXPECT_CALL(MockSystemFunc::GetInstance(), bind(_, _, _)).WillRepeatedly(Return(0));
100     EXPECT_TRUE(dhcpArpChecker.CreateSocket(ifName.c_str(), protocol) == 0);
101     MockSystemFunc::SetMockFlag(false);
102 }
103 
HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_003, TestSize.Level1)104 HWTEST_F(DhcpArpCheckerTest, CreateSocketTest_003, TestSize.Level1)
105 {
106     DHCP_LOGE("enter CreateSocketTest_003");
107     DhcpArpChecker dhcpArpChecker;
108     uint16_t protocol = ETH_P_ARP;
109     EXPECT_EQ(dhcpArpChecker.CreateSocket(nullptr, protocol), -1);
110 }
111 
112 /**
113  * @tc.name: StopTest_001
114  * @tc.desc: StopTest
115  * @tc.type: FUNC
116  * @tc.require: issue
117 */
HWTEST_F(DhcpArpCheckerTest, StopTest_001, TestSize.Level1)118 HWTEST_F(DhcpArpCheckerTest, StopTest_001, TestSize.Level1)
119 {
120     DHCP_LOGE("enter StopTest_001");
121     DhcpArpChecker dhcpArpChecker;
122     dhcpArpChecker.m_isSocketCreated = false;
123     dhcpArpChecker.Stop();
124     dhcpArpChecker.m_isSocketCreated = true;
125     dhcpArpChecker.Stop();
126 }
127 
128 /**
129  * @tc.name: SendDataTest_001
130  * @tc.desc: SendDataTest
131  * @tc.type: FUNC
132  * @tc.require: issue
133 */
HWTEST_F(DhcpArpCheckerTest, SendDataTest_001, TestSize.Level1)134 HWTEST_F(DhcpArpCheckerTest, SendDataTest_001, TestSize.Level1)
135 {
136     DHCP_LOGE("enter SendDataTest_001");
137     DhcpArpChecker dhcpArpChecker;
138     uint8_t *buff = nullptr;
139     int32_t count = 1;
140     uint8_t *destHwaddr = nullptr;
141     dhcpArpChecker.m_socketFd = -1;
142     dhcpArpChecker.m_ifaceIndex = 0;
143     EXPECT_TRUE(dhcpArpChecker.SendData(buff, count, destHwaddr) == -1);
144     uint8_t bufferTest = 1;
145     buff = &bufferTest;
146     EXPECT_TRUE(dhcpArpChecker.SendData(buff, count, destHwaddr) == -1);
147     destHwaddr = &bufferTest;
148     EXPECT_TRUE(dhcpArpChecker.SendData(buff, count, destHwaddr) == -1);
149     dhcpArpChecker.m_socketFd = 1;
150     EXPECT_TRUE(dhcpArpChecker.SendData(buff, count, destHwaddr) == -1);
151     dhcpArpChecker.m_ifaceIndex = 1;
152     dhcpArpChecker.SendData(buff, count, destHwaddr);
153 }
154 
155 /**
156  * @tc.name: RecvDataTest_001
157  * @tc.desc: RecvDataTest
158  * @tc.type: FUNC
159  * @tc.require: issue
160 */
HWTEST_F(DhcpArpCheckerTest, RecvDataTest_001, TestSize.Level1)161 HWTEST_F(DhcpArpCheckerTest, RecvDataTest_001, TestSize.Level1)
162 {
163     DHCP_LOGE("enter RecvDataTest_001");
164     DhcpArpChecker dhcpArpChecker;
165 
166     uint8_t buff[MAC_ADDR_LEN] = {0};
167     dhcpArpChecker.m_socketFd = -1;
168     EXPECT_TRUE(dhcpArpChecker.RecvData(buff, 1, 1) == -1);
169     dhcpArpChecker.m_socketFd = 1;
170     dhcpArpChecker.RecvData(buff, 1, 1);
171 }
172 
HWTEST_F(DhcpArpCheckerTest, GetGwMacAddrList_Success, TestSize.Level0)173 HWTEST_F(DhcpArpCheckerTest, GetGwMacAddrList_Success, TestSize.Level0)
174 {
175     DHCP_LOGE("enter GetGwMacAddrList_Success");
176     DhcpArpChecker dhcpArpChecker;
177     int32_t timeoutMillis = 1000;
178     bool isFillSenderIp = true;
179     std::vector<std::string> gwMacLists;
180 
181     dhcpArpChecker.m_isSocketCreated = false;
182     dhcpArpChecker.GetGwMacAddrList(timeoutMillis, isFillSenderIp, gwMacLists);
183 
184     dhcpArpChecker.m_isSocketCreated = true;
185     dhcpArpChecker.GetGwMacAddrList(timeoutMillis, isFillSenderIp, gwMacLists);
186 }
187 }  // namespace OHOS