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