1 /* 2 * Copyright (C) 2021-2022 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 <string> 18 #include <securec.h> 19 #include "dhcp_binding.h" 20 #include "dhcp_define.h" 21 #include "common_util.h" 22 23 using namespace testing::ext; 24 namespace OHOS { 25 namespace Wifi { 26 HWTEST(DhcpBindingTest, NextPendingIntervalTest, TestSize.Level1) 27 { 28 uint64_t pendingInterval = 0; 29 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 1); 30 pendingInterval = 2; 31 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 1); 32 pendingInterval = 3; 33 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 2); 34 pendingInterval = 9; 35 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 2); 36 pendingInterval = 10; 37 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 5); 38 pendingInterval = 11; 39 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 5); 40 pendingInterval = 29; 41 EXPECT_TRUE(NextPendingInterval(pendingInterval) == pendingInterval + 5); 42 pendingInterval = 30; 43 EXPECT_TRUE(NextPendingInterval(pendingInterval) == 1200); 44 pendingInterval = 31; 45 EXPECT_TRUE(NextPendingInterval(pendingInterval) == 1200); 46 pendingInterval = (uint64_t)-1; 47 EXPECT_TRUE(NextPendingInterval(pendingInterval) == 1200); 48 } 49 50 HWTEST(DhcpBindingTest, IsExpireTest, TestSize.Level1) 51 { 52 EXPECT_EQ(IsExpire(nullptr), DHCP_FALSE); 53 AddressBinding binding; 54 ASSERT_TRUE(memset_s(&binding, sizeof(binding), 0, sizeof(binding)) == EOK); 55 EXPECT_EQ(IsExpire(&binding), DHCP_TRUE); 56 uint64_t curr = Tmspsec(); 57 binding.leaseTime = 60; 58 binding.bindingStatus = BIND_PENDING; 59 binding.pendingTime = curr - binding.leaseTime + 5; 60 EXPECT_EQ(IsExpire(&binding), DHCP_FALSE); 61 binding.bindingStatus = BIND_PENDING; 62 binding.pendingTime = curr - binding.leaseTime - 1; 63 EXPECT_EQ(IsExpire(&binding), DHCP_TRUE); 64 binding.bindingStatus = BIND_ASSOCIATED; 65 binding.bindingTime = curr - binding.leaseTime + 5; 66 EXPECT_EQ(IsExpire(&binding), DHCP_FALSE); 67 binding.bindingStatus = BIND_ASSOCIATED; 68 binding.bindingTime = curr - binding.leaseTime - 1; 69 EXPECT_EQ(IsExpire(&binding), DHCP_TRUE); 70 } 71 72 HWTEST(DhcpBindingTest, WriteAddressBindingTest, TestSize.Level1) 73 { 74 EXPECT_TRUE(WriteAddressBinding(nullptr, nullptr, 0) == RET_FAILED); 75 AddressBinding binding; 76 ASSERT_TRUE(memset_s(&binding, sizeof(binding), 0, sizeof(binding)) == EOK); 77 for (int i = 0; i <= NUM_FIVE; ++i) { 78 binding.chaddr[i] = (uint8_t)i; 79 } 80 binding.leaseTime = 60; 81 binding.bindingTime = 10; 82 binding.pendingTime = 11; 83 binding.pendingInterval = 2; 84 binding.bindingMode = 1; 85 binding.bindingStatus = 0; 86 char outBinding[1024] = {0}; 87 EXPECT_TRUE(WriteAddressBinding(&binding, outBinding, sizeof(outBinding)) == RET_SUCCESS); 88 std::string expectMsg = "00:01:02:03:04:05 0.0.0.0 60 10 11 2 1 0"; 89 EXPECT_TRUE(expectMsg == std::string(outBinding)); 90 } 91 92 HWTEST(DhcpBindingTest, ParseAddressBindingTest, TestSize.Level1) 93 { 94 std::string msg; 95 AddressBinding binding; 96 ASSERT_TRUE(memset_s(&binding, sizeof(binding), 0, sizeof(binding)) == EOK); 97 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == -1); 98 msg = "00:01:02:03:04:05 127.0.0.1 60 10 11 2 1"; 99 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == -1); 100 msg = "00:01:02:03:04:05 127.0.0.1 60 10 11 2 1 0"; 101 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == -1); 102 msg = "00:01:02:03:04:05 127.0.0.1 60 10 5 2 1 0"; 103 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == 0); 104 msg = "00:01:02:03:04:05 127.0.0.1 60 10 5 2 1 2"; 105 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == 0); 106 uint64_t curr = Tmspsec(); 107 msg = "00:01:02:03:04:05 127.0.0.1 60 " + std::to_string(curr + 60) + " " + std::to_string(curr + 10) + " 5 2 1 2"; 108 EXPECT_TRUE(ParseAddressBinding(&binding, msg.c_str()) == 0); 109 } 110 } 111 } 112