• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 <stdint.h>
18 #include <stdbool.h>
19 #include "dhcp_define.h"
20 #include "dhcp_ipv4.h"
21 #include "dhcp_message.h"
22 #include "dhcp_option.h"
23 #include "address_utils.h"
24 
25 using namespace testing::ext;
26 
27 class DhcpOptionTest : public testing::Test {
28 public:
SetUpTestCase()29     static void SetUpTestCase()
30     {}
TearDownTestCase()31     static void TearDownTestCase()
32     {}
SetUp()33     virtual void SetUp()
34     {
35         if (InitOptionList(&options)) {
36             printf("failed to initialized hash table.\n");
37         }
38     }
TearDown()39     virtual void TearDown()
40     {
41         FreeOptionList(&options);
42     }
43 public:
44     DhcpOptionList options = {0};
45 };
46 
47 HWTEST_F(DhcpOptionTest, InitOptionListTest, TestSize.Level1)
48 {
49     DhcpOptionList testOpts = {0};
50     EXPECT_EQ(RET_SUCCESS, InitOptionList(&testOpts));
51     FreeOptionList(&testOpts);
52     EXPECT_EQ(RET_SUCCESS, InitOptionList(&options));
53 }
54 
55 HWTEST_F(DhcpOptionTest, HasInitializedTest, TestSize.Level1)
56 {
57     DhcpOptionList testOpts = {0};
58     EXPECT_EQ(0, HasInitialized(NULL));
59     EXPECT_EQ(0, HasInitialized(&testOpts));
60     ASSERT_EQ(RET_SUCCESS, InitOptionList(&testOpts));
61     EXPECT_EQ(1, HasInitialized(&testOpts));
62     FreeOptionList(&testOpts);
63 }
64 
65 HWTEST_F(DhcpOptionTest, PushBackOptionTest, TestSize.Level1)
66 {
67     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
68     EXPECT_EQ(RET_SUCCESS, PushBackOption(&options, &optRouter));
69 
70     DhcpOption optMsgType = {DHCP_MESSAGE_TYPE_OPTION, 1, {DHCPOFFER, 0}};
71     EXPECT_EQ(RET_ERROR, PushBackOption(NULL, &optMsgType));
72     EXPECT_EQ(RET_ERROR, PushBackOption(&options, NULL));
73     EXPECT_EQ(RET_SUCCESS, PushBackOption(&options, &optMsgType));
74     EXPECT_TRUE(options.size == 2);
75     ClearOptions(&options);
76     EXPECT_TRUE(options.size == 0);
77 }
78 
79 HWTEST_F(DhcpOptionTest, PushFrontOptionTest, TestSize.Level1)
80 {
81     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
82     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optRouter));
83 
84     DhcpOption optMsgType = {DHCP_MESSAGE_TYPE_OPTION, 1, {DHCPOFFER, 0}};
85     EXPECT_EQ(RET_ERROR, PushFrontOption(NULL, &optMsgType));
86     EXPECT_EQ(RET_ERROR, PushFrontOption(&options, NULL));
87     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optMsgType));
88     EXPECT_TRUE(options.size == 2);
89     ClearOptions(&options);
90     EXPECT_TRUE(options.size == 0);
91 }
92 
93 HWTEST_F(DhcpOptionTest, GetOptionNodeTest, TestSize.Level1)
94 {
95     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
96     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optRouter));
97     DhcpOption optMsgType = {DHCP_MESSAGE_TYPE_OPTION, 1, {DHCPOFFER, 0}};
98     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optMsgType));
99     EXPECT_TRUE(options.size == 2);
100 
101     DhcpOptionNode *node = GetOptionNode(&options, DHCP_MESSAGE_TYPE_OPTION);
102     EXPECT_TRUE(node!=NULL);
103     ClearOptions(&options);
104     EXPECT_TRUE(options.size == 0);
105 }
106 
107 HWTEST_F(DhcpOptionTest, GetOptionTest, TestSize.Level1)
108 {
109     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
110     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optRouter));
111     DhcpOption optMsgType = {DHCP_MESSAGE_TYPE_OPTION, 1, {DHCPOFFER, 0}};
112     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optMsgType));
113     EXPECT_TRUE(options.size == 2);
114 
115     DhcpOption *node = GetOption(&options, DHCP_MESSAGE_TYPE_OPTION);
116     EXPECT_TRUE(node!=NULL);
117     ClearOptions(&options);
118     EXPECT_TRUE(options.size == 0);
119 }
120 
121 
122 HWTEST_F(DhcpOptionTest, RemoveOptionTest, TestSize.Level1)
123 {
124     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
125     EXPECT_EQ(RET_SUCCESS, PushFrontOption(&options, &optRouter));
126     EXPECT_TRUE(options.size == 1);
127     EXPECT_EQ(RET_ERROR, RemoveOption(NULL, DOMAIN_NAME_SERVER_OPTION));
128     EXPECT_EQ(RET_FAILED, RemoveOption(&options, DOMAIN_NAME_SERVER_OPTION));
129     EXPECT_EQ(RET_SUCCESS, RemoveOption(&options, ROUTER_OPTION));
130     EXPECT_EQ(RET_FAILED, RemoveOption(&options, ROUTER_OPTION));
131     EXPECT_TRUE(options.size == 0);
132     ClearOptions(&options);
133 }
134 
135 HWTEST_F(DhcpOptionTest, FillOptionTest, TestSize.Level1)
136 {
137     const char *serverInfo = "dhcp server 1.0";
138     DhcpOption optVendorInfo = {VENDOR_SPECIFIC_INFO_OPTION, 0, {0}};
139     EXPECT_EQ(RET_FAILED, FillOption(&optVendorInfo, NULL, 0));
140     EXPECT_EQ(RET_ERROR, FillOption(NULL, serverInfo, strlen(serverInfo)));
141     EXPECT_EQ(RET_SUCCESS, FillOption(&optVendorInfo, serverInfo, strlen(serverInfo)));
142 }
143 
144 HWTEST_F(DhcpOptionTest, FillOptionDataTest, TestSize.Level1)
145 {
146     uint8_t testData[] = {192, 168, 100, 254};
147     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
148     EXPECT_EQ(RET_ERROR, FillOptionData(NULL, testData, sizeof(testData)));
149     EXPECT_EQ(RET_FAILED, FillOptionData(&optRouter, NULL, sizeof(testData)));
150     EXPECT_EQ(RET_SUCCESS, FillOptionData(&optRouter, testData, sizeof(testData)));
151 }
152 
153 HWTEST_F(DhcpOptionTest, FillU32OptionTest, TestSize.Level1)
154 {
155     uint32_t testIp = ParseIpAddr("192.168.100.254");
156     EXPECT_TRUE(testIp != 0);
157     DhcpOption optRouter = {ROUTER_OPTION, 0, {0}};
158     EXPECT_EQ(RET_SUCCESS, FillU32Option(&optRouter, testIp));
159     EXPECT_EQ(RET_ERROR, FillU32Option(NULL, testIp));
160 }
161 
162 HWTEST_F(DhcpOptionTest, AppendAddressOptionTest, TestSize.Level1)
163 {
164     uint32_t testDns1 = ParseIpAddr("192.168.100.1");
165     EXPECT_TRUE(testDns1 != 0);
166     uint32_t testDns2 = ParseIpAddr("192.168.100.2");
167     EXPECT_TRUE(testDns2 != 0);
168     uint32_t testDns3 = ParseIpAddr("192.168.100.3");
169     EXPECT_TRUE(testDns3 != 0);
170 
171     DhcpOption optDns = {DOMAIN_NAME_SERVER_OPTION, 0, {0}};
172     EXPECT_EQ(RET_ERROR, AppendAddressOption(NULL, testDns1));
173     EXPECT_EQ(RET_SUCCESS, AppendAddressOption(&optDns, testDns1));
174     EXPECT_EQ(RET_SUCCESS, AppendAddressOption(&optDns, testDns2));
175     EXPECT_EQ(RET_SUCCESS, AppendAddressOption(&optDns, testDns3));
176     EXPECT_EQ(12, optDns.length);
177 }
178