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