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