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 #include <gtest/gtest.h>
16 
17 #include "dhcp_logger.h"
18 #include "dhcp_options.h"
19 #include "dhcp_client_def.h"
20 #include "dhcp_s_define.h"
21 #include "securec.h"
22 
23 #include <cstdio>
24 #include <cstdlib>
25 #include <cstring>
26 
27 DEFINE_DHCPLOG_DHCP_LABEL("DhcpOptionsTest");
28 
29 using namespace testing::ext;
30 
31 namespace OHOS {
32 class DhcpOptionsTest : public testing::Test {
33 public:
SetUpTestCase()34     static void SetUpTestCase()
35     {}
TearDownTestCase()36     static void TearDownTestCase()
37     {}
SetUp()38     virtual void SetUp()
39     {}
TearDown()40     virtual void TearDown()
41     {}
42 };
43 
44 HWTEST_F(DhcpOptionsTest, GetDhcpOptionDataLen_SUCCESS, TestSize.Level1)
45 {
46     DHCP_LOGE("enter GetDhcpOptionDataLen_SUCCESS");
47     EXPECT_GT(GetDhcpOptionDataLen(DHCP_MESSAGE_TYPE_OPTION), 0);
48 }
49 
50 HWTEST_F(DhcpOptionsTest, GetDhcpOptionDataLen_FAILED, TestSize.Level1)
51 {
52     EXPECT_EQ(GetDhcpOptionDataLen(PAD_OPTION), 0);
53     EXPECT_EQ(GetDhcpOptionDataLen(CLIENT_IDENTIFIER_OPTION), 0);
54     EXPECT_EQ(GetDhcpOptionDataLen(DOMAIN_NAME_SERVER_OPTION), 0);
55     EXPECT_EQ(GetDhcpOptionDataLen(DOMAIN_NAME_OPTION), 0);
56 }
57 
58 HWTEST_F(DhcpOptionsTest, GetDhcpOption_SUCCESS, TestSize.Level1)
59 {
60     struct DhcpPacket packet;
61     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
62 
63     int endIndex = 0;
64     uint8_t *pOption = packet.options;
65     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
66     endIndex += DHCP_OPT_CODE_BYTES;
67 
68     pOption[endIndex + DHCP_OPT_CODE_INDEX] = SUBNET_MASK_OPTION;
69     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
70     uint32_t u32Data = 3226272231;
71     ASSERT_TRUE(
72         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data, DHCP_UINT32_BYTES) == EOK);
73     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
74 
75     pOption[endIndex + DHCP_OPT_CODE_INDEX] = DHCP_MESSAGE_TYPE_OPTION;
76     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
77     uint8_t uData = DHCP_DISCOVER;
78     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
79     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
80 
81     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
82 
83     size_t len = 0;
84     EXPECT_NE(GetDhcpOption(&packet, DHCP_MESSAGE_TYPE_OPTION, &len), nullptr);
85 }
86 
87 HWTEST_F(DhcpOptionsTest, GetDhcpOption_FAILED, TestSize.Level1)
88 {
89     size_t len = 0;
90     EXPECT_EQ(GetDhcpOption(nullptr, DHCP_MESSAGE_TYPE_OPTION, &len), nullptr);
91 
92     struct DhcpPacket packet;
93     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
94 
95     int endIndex = 0;
96     uint8_t *pOption = packet.options;
97     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
98     endIndex += DHCP_OPT_CODE_BYTES;
99 
100     pOption[endIndex + DHCP_OPT_CODE_INDEX] = SUBNET_MASK_OPTION;
101     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
102     uint32_t u32Data = 3226272231;
103     ASSERT_TRUE(
104         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data, DHCP_UINT32_BYTES) == EOK);
105     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
106 
107     pOption[endIndex + DHCP_OPT_CODE_INDEX] = OPTION_OVERLOAD_OPTION;
108     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
109     uint8_t uData = FILE_FIELD | SNAME_FIELD;
110     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
111     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
112 
113     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
114 
115     len = 0;
116     EXPECT_EQ(GetDhcpOption(&packet, DHCP_MESSAGE_TYPE_OPTION, &len), nullptr);
117 }
118 
119 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint8_SUCCESS, TestSize.Level1)
120 {
121     struct DhcpPacket packet;
122     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
123 
124     uint8_t *pOption = packet.options;
125     pOption[DHCP_OPT_CODE_INDEX] = DHCP_MESSAGE_TYPE_OPTION;
126     pOption[DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
127     uint8_t uData = DHCP_DISCOVER;
128     ASSERT_TRUE(memcpy_s(pOption + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
129 
130     int endIndex = DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[DHCP_OPT_LEN_INDEX];
131     pOption[endIndex] = END_OPTION;
132 
133     uint8_t u8Message = 0;
134     EXPECT_EQ(true, GetDhcpOptionUint8(&packet, DHCP_MESSAGE_TYPE_OPTION, &u8Message));
135 }
136 
137 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint8_FAILED, TestSize.Level1)
138 {
139     uint8_t u8Message = 0;
140     EXPECT_EQ(false, GetDhcpOptionUint8(nullptr, DHCP_MESSAGE_TYPE_OPTION, &u8Message));
141 }
142 
143 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint32_SUCCESS, TestSize.Level1)
144 {
145     struct DhcpPacket packet;
146     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
147 
148     int endIndex = 0;
149     uint8_t *pOption = packet.options;
150     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
151     endIndex += DHCP_OPT_CODE_BYTES;
152 
153     pOption[endIndex + DHCP_OPT_CODE_INDEX] = DHCP_MESSAGE_TYPE_OPTION;
154     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
155     uint8_t uData = DHCP_DISCOVER;
156     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
157     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
158 
159     pOption[endIndex + DHCP_OPT_CODE_INDEX] = IP_ADDRESS_LEASE_TIME_OPTION;
160     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
161     uint32_t u32Data = ONE_HOURS_SEC;
162     ASSERT_TRUE(
163         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data, DHCP_UINT32_BYTES) == EOK);
164     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
165 
166     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
167 
168     u32Data = 0;
169     EXPECT_EQ(true, GetDhcpOptionUint32(&packet, IP_ADDRESS_LEASE_TIME_OPTION, &u32Data));
170 }
171 
172 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint32_FAILED, TestSize.Level1)
173 {
174     uint32_t u32Data = 0;
175     EXPECT_EQ(false, GetDhcpOptionUint32(nullptr, IP_ADDRESS_LEASE_TIME_OPTION, &u32Data));
176 
177     struct DhcpPacket packet;
178     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
179 
180     int endIndex = 0;
181     uint8_t *pOption = packet.options;
182     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
183     endIndex += DHCP_OPT_CODE_BYTES;
184 
185     pOption[endIndex + DHCP_OPT_CODE_INDEX] = DHCP_MESSAGE_TYPE_OPTION;
186     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
187     uint8_t uData = DHCP_DISCOVER;
188     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
189     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
190 
191     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
192 
193     u32Data = 0;
194     EXPECT_EQ(false, GetDhcpOptionUint32(&packet, DHCP_MESSAGE_TYPE_OPTION, &u32Data));
195 
196     pOption[endIndex + DHCP_OPT_CODE_INDEX] = OPTION_OVERLOAD_OPTION;
197     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
198     uData = FILE_FIELD | SNAME_FIELD;
199     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
200     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
201 
202     pOption[endIndex + DHCP_OPT_CODE_INDEX] = IP_ADDRESS_LEASE_TIME_OPTION;
203     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
204     u32Data = ONE_HOURS_SEC;
205     ASSERT_TRUE(
206         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data, DHCP_UINT32_BYTES) == EOK);
207     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
208 
209     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
210 
211     u32Data = 0;
212     EXPECT_EQ(false, GetDhcpOptionUint32(&packet, IP_ADDRESS_LEASE_TIME_OPTION, &u32Data));
213 }
214 
215 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint32n_SUCCESS, TestSize.Level1)
216 {
217     struct DhcpPacket packet;
218     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
219 
220     int endIndex = 0;
221     uint8_t *pOption = packet.options;
222     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
223     endIndex += DHCP_OPT_CODE_BYTES;
224 
225     pOption[endIndex + DHCP_OPT_CODE_INDEX] = ROUTER_OPTION;
226     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES + DHCP_UINT32_BYTES;
227     uint32_t u32Data1 = 3226272231;
228     uint32_t u32Data2 = 3226272232;
229     ASSERT_TRUE(
230         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data1, DHCP_UINT32_BYTES) == EOK);
231     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX + DHCP_UINT32_BYTES,
232                     DHCP_UINT32_BYTES,
233                     &u32Data2,
234                     DHCP_UINT32_BYTES) == EOK);
235     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
236 
237     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
238 
239     uint32_t uData1 = 0;
240     uint32_t uData2 = 0;
241     EXPECT_EQ(true, GetDhcpOptionUint32n(&packet, ROUTER_OPTION, &uData1, &uData2));
242 }
243 
244 HWTEST_F(DhcpOptionsTest, GetDhcpOptionUint32n_FAILED, TestSize.Level1)
245 {
246     uint32_t uData1 = 0;
247     uint32_t uData2 = 0;
248     EXPECT_EQ(false, GetDhcpOptionUint32n(nullptr, ROUTER_OPTION, &uData1, &uData2));
249 
250     struct DhcpPacket packet;
251     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
252 
253     int endIndex = 0;
254     uint8_t *pOption = packet.options;
255     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
256     endIndex += DHCP_OPT_CODE_BYTES;
257 
258     pOption[endIndex + DHCP_OPT_CODE_INDEX] = DHCP_MESSAGE_TYPE_OPTION;
259     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT8_BYTES;
260     uint8_t uData = DHCP_DISCOVER;
261     ASSERT_TRUE(memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT8_BYTES, &uData, DHCP_UINT8_BYTES) == EOK);
262     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
263 
264     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
265 
266     EXPECT_EQ(false, GetDhcpOptionUint32n(nullptr, DHCP_MESSAGE_TYPE_OPTION, &uData1, &uData2));
267 }
268 
269 HWTEST_F(DhcpOptionsTest, GetDhcpOptionString_SUCCESS, TestSize.Level1)
270 {
271     char buf[VENDOR_MAX_LEN - DHCP_OPT_CODE_BYTES - DHCP_OPT_LEN_BYTES] = {0};
272     ASSERT_TRUE(snprintf_s(buf,
273                     VENDOR_MAX_LEN - DHCP_OPT_DATA_INDEX,
274                     VENDOR_MAX_LEN - DHCP_OPT_DATA_INDEX - 1,
275                     "%s-%s",
276                     DHCPC_NAME,
277                     DHCPC_VERSION) >= 0);
278 
279     struct DhcpPacket packet;
280     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
281 
282     uint8_t *pOption = packet.options;
283     pOption[DHCP_OPT_CODE_INDEX] = VENDOR_SPECIFIC_INFO_OPTION;
284     pOption[DHCP_OPT_LEN_INDEX] = strlen(buf);
285     ASSERT_TRUE(memcpy_s(pOption + DHCP_OPT_DATA_INDEX,
286                     VENDOR_MAX_LEN - DHCP_OPT_CODE_BYTES - DHCP_OPT_LEN_BYTES,
287                     buf,
288                     strlen(buf)) == EOK);
289 
290     int endIndex = DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[DHCP_OPT_LEN_INDEX];
291     pOption[endIndex] = END_OPTION;
292 
293     char *pVendor = GetDhcpOptionString(&packet, VENDOR_SPECIFIC_INFO_OPTION);
294     ASSERT_TRUE(pVendor != NULL);
295     free(pVendor);
296 }
297 
298 HWTEST_F(DhcpOptionsTest, GetDhcpOptionString_FAILED, TestSize.Level1)
299 {
300     EXPECT_EQ(nullptr, GetDhcpOptionString(nullptr, VENDOR_SPECIFIC_INFO_OPTION));
301 }
302 
303 HWTEST_F(DhcpOptionsTest, GetEndOptionIndex_SUCCESS, TestSize.Level1)
304 {
305     struct DhcpPacket packet;
306     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
307 
308     int endIndex = 0;
309     uint8_t *pOption = packet.options;
310     pOption[endIndex + DHCP_OPT_CODE_INDEX] = PAD_OPTION;
311     endIndex += DHCP_OPT_CODE_BYTES;
312 
313     pOption[endIndex + DHCP_OPT_CODE_INDEX] = SUBNET_MASK_OPTION;
314     pOption[endIndex + DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
315     uint32_t u32Data = 3226272231;
316     ASSERT_TRUE(
317         memcpy_s(pOption + endIndex + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &u32Data, DHCP_UINT32_BYTES) == EOK);
318     endIndex += DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + pOption[endIndex + DHCP_OPT_LEN_INDEX];
319 
320     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
321 
322     EXPECT_GE(GetEndOptionIndex(packet.options), 0);
323 }
324 
325 HWTEST_F(DhcpOptionsTest, AddOptStrToOpts_SUCCESS, TestSize.Level1)
326 {
327     struct DhcpPacket packet;
328     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
329     packet.options[DHCP_OPT_CODE_INDEX] = END_OPTION;
330 
331     uint8_t option[DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + DHCP_UINT32_BYTES];
332     option[DHCP_OPT_CODE_INDEX] = IP_ADDRESS_LEASE_TIME_OPTION;
333     option[DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
334     uint32_t uData = ONE_HOURS_SEC;
335     ASSERT_TRUE(memcpy_s(option + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &uData, DHCP_UINT32_BYTES) == EOK);
336     int nLen = DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + option[DHCP_OPT_LEN_INDEX];
337 
338     EXPECT_GT(AddOptStrToOpts(packet.options, option, nLen), 0);
339 }
340 
341 HWTEST_F(DhcpOptionsTest, AddOptStrToOpts_FAILED, TestSize.Level1)
342 {
343     struct DhcpPacket packet;
344     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
345 
346     int endIndex = 0;
347     uint8_t *pOption = packet.options;
348     pOption[endIndex + DHCP_OPT_CODE_INDEX] = END_OPTION;
349 
350     uint8_t option[DHCP_OPT_CODE_BYTES + DHCP_OPT_LEN_BYTES + DHCP_UINT32_BYTES];
351     option[DHCP_OPT_CODE_INDEX] = IP_ADDRESS_LEASE_TIME_OPTION;
352     option[DHCP_OPT_LEN_INDEX] = DHCP_UINT32_BYTES;
353     uint32_t uData = ONE_HOURS_SEC;
354     ASSERT_TRUE(memcpy_s(option + DHCP_OPT_DATA_INDEX, DHCP_UINT32_BYTES, &uData, DHCP_UINT32_BYTES) == EOK);
355     EXPECT_EQ(AddOptStrToOpts(pOption, option, DHCP_OPT_CODE_BYTES), 0);
356 
357     option[DHCP_OPT_LEN_INDEX] = (uint8_t)(DHCP_OPTIONS_SIZE - DHCP_OPT_CODE_BYTES - DHCP_OPT_LEN_BYTES);
358     EXPECT_EQ(AddOptStrToOpts(pOption, option, DHCP_OPTIONS_SIZE), 0);
359 }
360 
361 HWTEST_F(DhcpOptionsTest, AddOptValueToOpts_SUCCESS, TestSize.Level1)
362 {
363     struct DhcpPacket packet;
364     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
365     packet.options[DHCP_OPT_CODE_INDEX] = END_OPTION;
366 
367     uint8_t data1 = DHCP_REQUEST;
368     uint16_t data2 = 1;
369     uint32_t data3 = ONE_HOURS_SEC;
370     EXPECT_GT(AddOptValueToOpts(packet.options, DHCP_MESSAGE_TYPE_OPTION, data1), 0);
371     EXPECT_GT(AddOptValueToOpts(packet.options, INTERFACE_MTU_OPTION, data2), 0);
372     EXPECT_GT(AddOptValueToOpts(packet.options, IP_ADDRESS_LEASE_TIME_OPTION, data3), 0);
373 }
374 
375 HWTEST_F(DhcpOptionsTest, AddOptValueToOpts_FAILED, TestSize.Level1)
376 {
377     struct DhcpPacket packet;
378     ASSERT_TRUE(memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket)) == EOK);
379     packet.options[DHCP_OPT_CODE_INDEX] = END_OPTION;
380 
381     EXPECT_EQ(AddOptValueToOpts(packet.options, PAD_OPTION, 0), 0);
382 }
383 }  // namespace OHOS