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