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