1 /* 2 * Copyright (c) 2023 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 <iostream> 17 #include <cstring> 18 #include "gtest/gtest.h" 19 #include "gmock/gmock.h" 20 #include "http_client_constant.h" 21 #include "netstack_log.h" 22 #include "netstack_common_utils.h" 23 24 #define private public 25 #include "http_client_task.h" 26 #include "http_client.h" 27 #include "http_client_error.h" 28 #include <curl/curl.h> 29 #include "http_client_request.h" 30 #include "http_client_response.h" 31 #if HAS_NETMANAGER_BASE 32 #include "net_conn_client.h" 33 #include "network_security_config.h" 34 #endif 35 36 using namespace OHOS::NetStack::HttpClient; 37 using namespace testing; 38 using namespace testing::ext; 39 40 class HttpClientTaskTest : public testing::Test { 41 public: SetUpTestCase()42 static void SetUpTestCase() {} 43 TearDownTestCase()44 static void TearDownTestCase() {} 45 SetUp()46 virtual void SetUp() {} 47 TearDown()48 virtual void TearDown() {} 49 50 void ProcesslTaskCb(std::shared_ptr<HttpClientTask> task); 51 }; 52 53 namespace { 54 using namespace std; 55 using namespace testing::ext; 56 57 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest001, TestSize.Level1) 58 { 59 HttpClientRequest httpReq; 60 std::string url = "https://www.baidu.com"; 61 httpReq.SetURL(url); 62 63 HttpSession &session = HttpSession::GetInstance(); 64 auto task = session.CreateTask(httpReq); 65 66 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP_NONE); 67 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_NONE); 68 } 69 70 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest002, TestSize.Level1) 71 { 72 HttpClientRequest httpReq; 73 std::string url = "https://www.baidu.com"; 74 httpReq.SetURL(url); 75 HttpSession &session = HttpSession::GetInstance(); 76 auto task = session.CreateTask(httpReq); 77 78 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP1_1); 79 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_1_1); 80 } 81 82 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest003, TestSize.Level1) 83 { 84 HttpClientRequest httpReq; 85 std::string url = "https://www.baidu.com"; 86 httpReq.SetURL(url); 87 HttpSession &session = HttpSession::GetInstance(); 88 auto task = session.CreateTask(httpReq); 89 90 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP2); 91 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_2_0); 92 httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP3); 93 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_3); 94 } 95 96 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest001, TestSize.Level1) 97 { 98 HttpClientRequest httpReq; 99 100 std::string url = "http://www.httpbin.org/get"; 101 httpReq.SetURL(url); 102 httpReq.SetHttpProxyType(NOT_USE); 103 HttpProxy proxy; 104 proxy.host = "192.168.147.60"; 105 proxy.port = 8888; 106 proxy.exclusions = "www.httpbin.org"; 107 proxy.tunnel = false; 108 httpReq.SetHttpProxy(proxy); 109 110 HttpSession &session = HttpSession::GetInstance(); 111 auto task = session.CreateTask(httpReq); 112 113 bool result = task->SetOtherCurlOption(task->curlHandle_); 114 EXPECT_TRUE(result); 115 } 116 117 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest002, TestSize.Level1) 118 { 119 HttpClientRequest httpReq; 120 121 std::string url = "http://www.httpbin.org/get"; 122 httpReq.SetURL(url); 123 httpReq.SetHttpProxyType(NOT_USE); 124 HttpProxy proxy; 125 proxy.host = "192.168.147.60"; 126 proxy.port = 8888; 127 proxy.tunnel = false; 128 httpReq.SetHttpProxy(proxy); 129 130 HttpSession &session = HttpSession::GetInstance(); 131 auto task = session.CreateTask(httpReq); 132 133 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_)); 134 } 135 136 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest003, TestSize.Level1) 137 { 138 HttpClientRequest httpReq; 139 140 std::string url = "http://www.httpbin.org/get"; 141 httpReq.SetURL(url); 142 httpReq.SetHttpProxyType(NOT_USE); 143 HttpProxy proxy; 144 proxy.host = "192.168.147.60"; 145 proxy.port = 8888; 146 proxy.tunnel = false; 147 httpReq.SetHttpProxy(proxy); 148 149 HttpSession &session = HttpSession::GetInstance(); 150 auto task = session.CreateTask(httpReq); 151 152 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_)); 153 } 154 155 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest004, TestSize.Level1) 156 { 157 HttpClientRequest httpReq; 158 159 std::string url = "http://www.httpbin.org/get"; 160 httpReq.SetURL(url); 161 httpReq.SetHttpProxyType(NOT_USE); 162 HttpProxy proxy; 163 proxy.host = "192.168.147.60"; 164 proxy.port = 8888; 165 proxy.exclusions = "www.httpbin.org"; 166 proxy.tunnel = true; 167 httpReq.SetHttpProxy(proxy); 168 169 HttpSession &session = HttpSession::GetInstance(); 170 auto task = session.CreateTask(httpReq); 171 172 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_)); 173 curl_easy_cleanup(task->curlHandle_); 174 task->curlHandle_ = nullptr; 175 } 176 177 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest005, TestSize.Level1) 178 { 179 HttpClientRequest httpReq; 180 181 std::string url = "http://www.httpbin.org/get"; 182 httpReq.SetURL(url); 183 httpReq.SetHttpProxyType(USE_SPECIFIED); 184 HttpProxy proxy; 185 proxy.host = "192.168.147.60"; 186 proxy.port = 8888; 187 proxy.exclusions = "www.test.org"; 188 proxy.tunnel = true; 189 httpReq.SetHttpProxy(proxy); 190 191 HttpSession &session = HttpSession::GetInstance(); 192 auto task = session.CreateTask(httpReq); 193 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_)); 194 curl_easy_cleanup(task->curlHandle_); 195 task->curlHandle_ = nullptr; 196 } 197 198 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest001, TestSize.Level1) 199 { 200 HttpClientRequest httpReq; 201 std::string url = "http://www.httpbin.org/put"; 202 httpReq.SetURL(url); 203 std::string method = "PUT"; 204 httpReq.SetMethod(method); 205 206 HttpSession &session = HttpSession::GetInstance(); 207 std::string filePath = "/bin/who"; 208 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 209 210 EXPECT_TRUE(task->SetUploadOptions(task->curlHandle_)); 211 } 212 213 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest002, TestSize.Level1) 214 { 215 HttpClientRequest httpReq; 216 std::string url = "http://www.httpbin.org/put"; 217 httpReq.SetURL(url); 218 std::string method = "PUT"; 219 httpReq.SetMethod(method); 220 221 HttpSession &session = HttpSession::GetInstance(); 222 std::string filePath = ""; 223 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 224 225 EXPECT_FALSE(task->SetUploadOptions(task->curlHandle_)); 226 } 227 228 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest003, TestSize.Level1) 229 { 230 HttpClientRequest httpReq; 231 std::string url = "http://www.httpbin.org/put"; 232 httpReq.SetURL(url); 233 std::string method = "PUT"; 234 httpReq.SetMethod(method); 235 236 HttpSession &session = HttpSession::GetInstance(); 237 std::string filePath = "unavailable"; 238 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 239 240 EXPECT_FALSE(task->SetUploadOptions(task->curlHandle_)); 241 } 242 243 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest001, TestSize.Level1) 244 { 245 HttpClientRequest httpReq; 246 std::string url = "http://www.httpbin.org/get"; 247 httpReq.SetURL(url); 248 249 HttpSession &session = HttpSession::GetInstance(); 250 auto task = session.CreateTask(httpReq); 251 252 EXPECT_TRUE(task->SetCurlOptions()); 253 } 254 255 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest002, TestSize.Level1) 256 { 257 HttpClientRequest httpReq; 258 std::string url = "http://www.httpbin.org/get"; 259 httpReq.SetURL(url); 260 261 HttpSession &session = HttpSession::GetInstance(); 262 auto task = session.CreateTask(httpReq); 263 264 task->request_.SetMethod(HttpConstant::HTTP_METHOD_HEAD); 265 266 EXPECT_TRUE(task->SetCurlOptions()); 267 } 268 269 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest003, TestSize.Level1) 270 { 271 HttpClientRequest httpReq; 272 std::string url = "http://www.httpbin.org/put"; 273 httpReq.SetURL(url); 274 std::string method = "PUT"; 275 httpReq.SetMethod(method); 276 277 HttpSession &session = HttpSession::GetInstance(); 278 std::string filePath = "/bin/who"; 279 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 280 281 task->curlHandle_ = nullptr; 282 EXPECT_FALSE(task->SetCurlOptions()); 283 } 284 285 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest004, TestSize.Level1) 286 { 287 HttpClientRequest httpReq; 288 std::string url = "http://www.httpbin.org/get"; 289 httpReq.SetURL(url); 290 291 HttpSession &session = HttpSession::GetInstance(); 292 auto task = session.CreateTask(httpReq); 293 294 task->request_.SetMethod(HttpConstant::HTTP_METHOD_POST); 295 296 EXPECT_TRUE(task->SetCurlOptions()); 297 } 298 299 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest005, TestSize.Level1) 300 { 301 HttpClientRequest httpReq; 302 std::string url = "http://www.httpbin.org/get"; 303 httpReq.SetURL(url); 304 305 HttpSession &session = HttpSession::GetInstance(); 306 auto task = session.CreateTask(httpReq); 307 308 task->curlHandle_ = nullptr; 309 310 EXPECT_FALSE(task->SetCurlOptions()); 311 } 312 313 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest006, TestSize.Level1) 314 { 315 HttpClientRequest httpReq; 316 std::string url = "http://www.httpbin.org/get"; 317 httpReq.SetURL(url); 318 319 HttpSession &session = HttpSession::GetInstance(); 320 auto task = session.CreateTask(httpReq); 321 322 task->curlHandle_ = nullptr; 323 task->curlHeaderList_ = nullptr; 324 std::string headerStr = "Connection:keep-alive"; 325 task->curlHeaderList_ = curl_slist_append(task->curlHeaderList_, headerStr.c_str()); 326 327 EXPECT_FALSE(task->SetCurlOptions()); 328 } 329 330 HWTEST_F(HttpClientTaskTest, GetType001, TestSize.Level1) 331 { 332 HttpClientRequest httpReq; 333 std::string url = "https://www.baidu.com"; 334 httpReq.SetURL(url); 335 336 HttpSession &session = HttpSession::GetInstance(); 337 auto task = session.CreateTask(httpReq); 338 339 EXPECT_EQ(TaskType::DEFAULT, task->GetType()); 340 } 341 342 HWTEST_F(HttpClientTaskTest, GetFilePathTest001, TestSize.Level1) 343 { 344 HttpClientRequest httpReq; 345 std::string url = "http://www.httpbin.org/put"; 346 httpReq.SetURL(url); 347 std::string method = "PUT"; 348 httpReq.SetMethod(method); 349 350 HttpSession &session = HttpSession::GetInstance(); 351 std::string filePath = "/bin/who"; 352 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 353 354 EXPECT_EQ(task->GetFilePath(), "/bin/who"); 355 } 356 HWTEST_F(HttpClientTaskTest, GetTaskIdTest001, TestSize.Level1) 357 { 358 HttpClientRequest httpReq; 359 std::string url = "http://www.httpbin.org/get"; 360 httpReq.SetURL(url); 361 362 HttpSession &session = HttpSession::GetInstance(); 363 auto task = session.CreateTask(httpReq); 364 365 unsigned int taskId = task->GetTaskId(); 366 EXPECT_TRUE(taskId >= 0); 367 } 368 369 HWTEST_F(HttpClientTaskTest, OnSuccessTest001, TestSize.Level1) 370 { 371 HttpClientRequest httpReq; 372 std::string url = "https://www.baidu.com"; 373 httpReq.SetURL(url); 374 375 HttpSession &session = HttpSession::GetInstance(); 376 auto task = session.CreateTask(httpReq); __anon104e0aee0202(const HttpClientRequest &request, const HttpClientResponse &response) 377 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {}); 378 379 EXPECT_TRUE(task->onSucceeded_ != nullptr); 380 } 381 382 HWTEST_F(HttpClientTaskTest, OnCancelTest001, TestSize.Level1) 383 { 384 HttpClientRequest httpReq; 385 std::string url = "http://www.httpbin.org/get"; 386 httpReq.SetURL(url); 387 388 HttpSession &session = HttpSession::GetInstance(); 389 auto task = session.CreateTask(httpReq); 390 __anon104e0aee0302(const HttpClientRequest &request, const HttpClientResponse &response) 391 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {}); 392 393 EXPECT_TRUE(task->onCanceled_ != nullptr); 394 } 395 396 HWTEST_F(HttpClientTaskTest, OnFailTest001, TestSize.Level1) 397 { 398 HttpClientRequest httpReq; 399 std::string url = "http://www.httpbin.org/get"; 400 httpReq.SetURL(url); 401 402 HttpSession &session = HttpSession::GetInstance(); 403 auto task = session.CreateTask(httpReq); 404 405 task->OnFail( __anon104e0aee0402(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 406 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 407 408 EXPECT_TRUE(task->onFailed_ != nullptr); 409 } 410 411 HWTEST_F(HttpClientTaskTest, OnDataReceiveTest001, TestSize.Level1) 412 { 413 HttpClientRequest httpReq; 414 std::string url = "http://www.httpbin.org/get"; 415 httpReq.SetURL(url); 416 417 HttpSession &session = HttpSession::GetInstance(); 418 auto task = session.CreateTask(httpReq); 419 __anon104e0aee0502(const HttpClientRequest &request, const uint8_t *data, size_t length) 420 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {}); 421 422 EXPECT_TRUE(task->onDataReceive_ != nullptr); 423 } 424 425 HWTEST_F(HttpClientTaskTest, OnProgressTest001, TestSize.Level1) 426 { 427 HttpClientRequest httpReq; 428 std::string url = "http://www.httpbin.org/get"; 429 httpReq.SetURL(url); 430 431 HttpSession &session = HttpSession::GetInstance(); 432 auto task = session.CreateTask(httpReq); 433 434 task->OnProgress( __anon104e0aee0602(const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) 435 [](const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) {}); 436 437 EXPECT_TRUE(task->onProgress_ != nullptr); 438 } 439 440 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest001, TestSize.Level1) 441 { 442 HttpClientRequest httpReq; 443 std::string url = "https://www.baidu.com"; 444 const char *data = "https://www.baidu.com"; 445 httpReq.SetURL(url); 446 447 HttpSession &session = HttpSession::GetInstance(); 448 auto task = session.CreateTask(httpReq); 449 450 auto *userData = task.get(); 451 size_t size = 10; 452 size_t memBytes = 1; 453 __anon104e0aee0702(const HttpClientRequest &request, const uint8_t *data, size_t length) 454 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {}); 455 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 456 457 EXPECT_EQ(result, size * memBytes); 458 } 459 460 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest002, TestSize.Level1) 461 { 462 HttpClientRequest httpReq; 463 std::string url = "https://www.baidu.com"; 464 const char *data = "https://www.baidu.com"; 465 httpReq.SetURL(url); 466 467 HttpSession &session = HttpSession::GetInstance(); 468 auto task = session.CreateTask(httpReq); 469 470 auto *userData = task.get(); 471 size_t size = 10; 472 size_t memBytes = 1; 473 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 474 475 EXPECT_EQ(result, size * memBytes); 476 } 477 478 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest003, TestSize.Level1) 479 { 480 HttpClientRequest httpReq; 481 std::string url = "http://www.httpbin.org/get"; 482 const char *data = "http://www.httpbin.org/get"; 483 httpReq.SetURL(url); 484 485 HttpSession &session = HttpSession::GetInstance(); 486 auto task = session.CreateTask(httpReq); 487 488 auto *userData = task.get(); 489 size_t size = 10; 490 size_t memBytes = 1; 491 task->canceled_ = true; 492 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 493 494 EXPECT_EQ(result, 0); 495 task->canceled_ = false; 496 } 497 498 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest001, TestSize.Level1) 499 { 500 HttpClientRequest httpReq; 501 std::string url = "https://www.baidu.com"; 502 httpReq.SetURL(url); 503 504 HttpSession &session = HttpSession::GetInstance(); 505 auto task = session.CreateTask(httpReq); 506 507 auto *userData = task.get(); 508 curl_off_t dltotal = 100; 509 curl_off_t dlnow = 50; 510 curl_off_t ultotal = 200; 511 curl_off_t ulnow = 100; 512 int result; 513 514 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 515 EXPECT_EQ(result, 0); 516 } 517 518 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest002, TestSize.Level1) 519 { 520 HttpClientRequest httpReq; 521 std::string url = "https://www.baidu.com"; 522 httpReq.SetURL(url); 523 524 HttpSession &session = HttpSession::GetInstance(); 525 auto task = session.CreateTask(httpReq); 526 527 auto *userData = task.get(); 528 curl_off_t dltotal = 100; 529 curl_off_t dlnow = 50; 530 curl_off_t ultotal = 200; 531 curl_off_t ulnow = 100; 532 int result; 533 534 task->Cancel(); 535 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 536 EXPECT_EQ(result, CURLE_ABORTED_BY_CALLBACK); 537 } 538 539 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest003, TestSize.Level1) 540 { 541 HttpClientRequest httpReq; 542 std::string url = "https://www.baidu.com"; 543 httpReq.SetURL(url); 544 545 HttpSession &session = HttpSession::GetInstance(); 546 auto task = session.CreateTask(httpReq); 547 548 auto *userData = task.get(); 549 curl_off_t dltotal = 100; 550 curl_off_t dlnow = 50; 551 curl_off_t ultotal = 200; 552 curl_off_t ulnow = 100; 553 554 int result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 555 EXPECT_EQ(result, 0); 556 } 557 558 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest001, TestSize.Level1) 559 { 560 HttpClientRequest httpReq; 561 std::string url = "https://www.baidu.com"; 562 httpReq.SetURL(url); 563 564 HttpSession &session = HttpSession::GetInstance(); 565 auto task = session.CreateTask(httpReq); 566 567 auto *userData = task.get(); 568 const char *data = "Test Header"; 569 size_t size = 5; 570 size_t memBytes = 2; 571 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 572 EXPECT_EQ(result, size * memBytes); 573 } 574 575 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest002, TestSize.Level1) 576 { 577 HttpClientRequest httpReq; 578 std::string url = "https://www.baidu.com"; 579 httpReq.SetURL(url); 580 581 HttpSession &session = HttpSession::GetInstance(); 582 auto task = session.CreateTask(httpReq); 583 584 auto *userData = task.get(); 585 586 const char *data = "Test Header"; 587 size_t size = HttpConstant::MAX_DATA_LIMIT + 1; 588 size_t memBytes = 1; 589 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 590 EXPECT_EQ(result, 0); 591 } 592 593 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest003, TestSize.Level1) 594 { 595 HttpClientRequest httpReq; 596 std::string url = "http://www.httpbin.org/get"; 597 httpReq.SetURL(url); 598 599 HttpSession &session = HttpSession::GetInstance(); 600 auto task = session.CreateTask(httpReq); 601 602 auto *userData = task.get(); 603 604 const char *data = "Test Header"; 605 size_t size = 5; 606 size_t memBytes = 2; 607 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 608 EXPECT_EQ(result, size * memBytes); 609 } 610 611 HWTEST_F(HttpClientTaskTest, ProcessResponseCodeTest001, TestSize.Level1) 612 { 613 HttpClientRequest httpReq; 614 std::string url = "https://www.baidu.com"; 615 httpReq.SetURL(url); 616 617 HttpSession &session = HttpSession::GetInstance(); 618 auto task = session.CreateTask(httpReq); 619 task->Start(); 620 621 while (task->GetStatus() != TaskStatus::IDLE) { 622 std::this_thread::sleep_for(std::chrono::milliseconds(100)); 623 } 624 EXPECT_TRUE(task->ProcessResponseCode()); 625 } 626 627 HWTEST_F(HttpClientTaskTest, ProcessResponseTest001, TestSize.Level1) 628 { 629 HttpClientRequest httpReq; 630 std::string url = "https://www.baidu.com"; 631 httpReq.SetURL(url); 632 633 HttpSession &session = HttpSession::GetInstance(); 634 auto task = session.CreateTask(httpReq); 635 636 CURLMsg msg; 637 msg.data.result = CURLE_ABORTED_BY_CALLBACK; __anon104e0aee0802(const HttpClientRequest &request, const HttpClientResponse &response) 638 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {}); 639 task->ProcessResponse(&msg); 640 EXPECT_TRUE(task->onCanceled_); 641 642 msg.data.result = CURLE_FAILED_INIT; 643 task->OnFail( __anon104e0aee0902(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 644 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 645 task->ProcessResponse(&msg); 646 EXPECT_TRUE(task->onFailed_); 647 648 msg.data.result = CURLE_OK; 649 task->response_.SetResponseCode(ResponseCode::NOT_MODIFIED); __anon104e0aee0a02(const HttpClientRequest &request, const HttpClientResponse &response) 650 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {}); 651 task->ProcessResponse(&msg); 652 EXPECT_TRUE(task->onSucceeded_); 653 654 task->curlHandle_ = nullptr; 655 task->OnFail( __anon104e0aee0b02(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 656 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 657 task->ProcessResponse(&msg); 658 EXPECT_TRUE(task->onFailed_); 659 } 660 661 HWTEST_F(HttpClientTaskTest, SetResponseTest001, TestSize.Level1) 662 { 663 HttpClientRequest httpReq; 664 std::string url = "https://www.baidu.com"; 665 httpReq.SetURL(url); 666 667 HttpSession &session = HttpSession::GetInstance(); 668 auto task = session.CreateTask(httpReq); 669 670 HttpClientResponse resp; 671 resp.result_ = "result1"; 672 task->SetResponse(resp); 673 674 EXPECT_EQ(task->response_.result_, "result1"); 675 } 676 677 HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest001, TestSize.Level1) 678 { 679 HttpClientRequest httpReq; 680 681 std::string url = "http://www.httpbin.org/get"; 682 httpReq.SetURL(url); 683 httpReq.SetHttpProxyType(USE_SPECIFIED); 684 HttpProxy proxy; 685 proxy.host = "192.168.147.60"; 686 proxy.port = 8888; 687 proxy.exclusions = "www.httpbin.org"; 688 proxy.tunnel = false; 689 httpReq.SetHttpProxy(proxy); 690 691 HttpSession &session = HttpSession::GetInstance(); 692 auto task = session.CreateTask(httpReq); 693 694 std::string host; 695 std::string exclusions; 696 int32_t port = 0; 697 bool tunnel = false; 698 task->GetHttpProxyInfo(host, port, exclusions, tunnel); 699 700 EXPECT_EQ(host, "192.168.147.60"); 701 EXPECT_EQ(port, 8888); 702 EXPECT_EQ(exclusions, "www.httpbin.org"); 703 EXPECT_FALSE(tunnel); 704 } 705 706 HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest002, TestSize.Level1) 707 { 708 HttpClientRequest httpReq; 709 710 std::string url = "http://www.httpbin.org/get"; 711 httpReq.SetURL(url); 712 httpReq.SetHttpProxyType(NOT_USE); 713 HttpProxy proxy; 714 proxy.host = "192.168.147.60"; 715 proxy.port = 8888; 716 proxy.exclusions = "www.httpbin.org"; 717 proxy.tunnel = false; 718 httpReq.SetHttpProxy(proxy); 719 720 HttpSession &session = HttpSession::GetInstance(); 721 auto task = session.CreateTask(httpReq); 722 723 std::string host; 724 std::string exclusions; 725 int32_t port = 0; 726 bool tunnel = false; 727 task->GetHttpProxyInfo(host, port, exclusions, tunnel); 728 729 EXPECT_EQ(host, ""); 730 EXPECT_EQ(port, 0); 731 EXPECT_EQ(exclusions, ""); 732 EXPECT_FALSE(tunnel); 733 } 734 735 HWTEST_F(HttpClientTaskTest, SslCtxFunctionTest001, TestSize.Level1) 736 { 737 CURL *curl = nullptr; 738 SSL_CTX *sslCtx = nullptr; 739 HttpClientRequest httpReq; 740 HttpSession &session = HttpSession::GetInstance(); 741 auto task = session.CreateTask(httpReq); 742 EXPECT_EQ(task->SslCtxFunction(curl, sslCtx), CURLE_SSL_CERTPROBLEM); 743 } 744 745 HWTEST_F(HttpClientTaskTest, SslCtxFunctionTest002, TestSize.Level1) 746 { 747 CURL *curl = nullptr; 748 SSL_CTX *sslCtx = SSL_CTX_new(TLS_client_method()); 749 HttpClientRequest httpReq; 750 HttpSession &session = HttpSession::GetInstance(); 751 auto task = session.CreateTask(httpReq); 752 EXPECT_EQ(task->SslCtxFunction(curl, sslCtx), CURLE_OK); 753 SSL_CTX_free(sslCtx); 754 } 755 756 HWTEST_F(HttpClientTaskTest, SetStatus001, TestSize.Level1) 757 { 758 HttpClientRequest httpReq; 759 std::string url = "http://www.httpbin.org/get"; 760 httpReq.SetURL(url); 761 762 HttpSession &session = HttpSession::GetInstance(); 763 auto task = session.CreateTask(httpReq); 764 765 task->SetStatus(RUNNING); 766 EXPECT_EQ(RUNNING, task->GetStatus()); 767 } 768 769 HWTEST_F(HttpClientTaskTest, GetStatusTest001, TestSize.Level1) 770 { 771 HttpClientRequest httpReq; 772 std::string url = "http://www.httpbin.org/get"; 773 httpReq.SetURL(url); 774 775 HttpSession &session = HttpSession::GetInstance(); 776 auto task = session.CreateTask(httpReq); 777 778 EXPECT_EQ(IDLE, task->GetStatus()); 779 } 780 781 HWTEST_F(HttpClientTaskTest, GetStatusTest002, TestSize.Level1) 782 { 783 HttpClientRequest httpReq; 784 std::string url = "https://www.baidu.com"; 785 httpReq.SetURL(url); 786 787 HttpSession &session = HttpSession::GetInstance(); 788 auto task = session.CreateTask(httpReq); 789 790 task->SetStatus(TaskStatus::RUNNING); 791 792 EXPECT_EQ(task->GetStatus(), RUNNING); 793 } 794 795 HWTEST_F(HttpClientTaskTest, StartTest001, TestSize.Level1) 796 { 797 HttpClientRequest httpReq; 798 std::string url = "http://www.baidu.com"; 799 httpReq.SetURL(url); 800 801 HttpSession &session = HttpSession::GetInstance(); 802 auto task = session.CreateTask(httpReq); 803 804 task->SetStatus(TaskStatus::RUNNING); 805 bool result = task->Start(); 806 EXPECT_FALSE(result); 807 } 808 809 HWTEST_F(HttpClientTaskTest, StartTest002, TestSize.Level1) 810 { 811 HttpClientRequest httpReq; 812 std::string url = "http://www.baidu.com"; 813 httpReq.SetURL(url); 814 815 HttpSession &session = HttpSession::GetInstance(); 816 auto task = session.CreateTask(httpReq); 817 818 task->error_.SetErrorCode(HttpErrorCode::HTTP_UNSUPPORTED_PROTOCOL); 819 bool result = task->Start(); 820 EXPECT_FALSE(result); 821 } 822 823 HWTEST_F(HttpClientTaskTest, StartTest003, TestSize.Level1) 824 { 825 HttpClientRequest httpReq; 826 std::string url = "http://www.baidu.com"; 827 httpReq.SetURL(url); 828 829 HttpSession &session = HttpSession::GetInstance(); 830 auto task = session.CreateTask(httpReq); 831 832 bool result = task->Start(); 833 EXPECT_TRUE(result); 834 } 835 836 HWTEST_F(HttpClientTaskTest, StartTest004, TestSize.Level1) 837 { 838 HttpClientRequest httpReq; 839 std::string url = "https://www.baidu.com"; 840 httpReq.SetURL(url); 841 842 HttpSession &session = HttpSession::GetInstance(); 843 auto task = session.CreateTask(httpReq); 844 845 task->error_.SetErrorCode(HttpErrorCode::HTTP_UNSUPPORTED_PROTOCOL); 846 bool result = task->Start(); 847 EXPECT_FALSE(result); 848 } 849 850 HWTEST_F(HttpClientTaskTest, ProcessCookieTest001, TestSize.Level1) 851 { 852 HttpClientRequest httpReq; 853 std::string url = "http://www.httpbin.org/cookies/set/name1/value1"; 854 httpReq.SetURL(url); 855 httpReq.SetHeader("content-type", "text/plain"); 856 HttpSession &session = HttpSession::GetInstance(); 857 auto task = session.CreateTask(httpReq); 858 task->Start(); 859 860 while (task->GetStatus() != TaskStatus::IDLE) { 861 std::this_thread::sleep_for(std::chrono::milliseconds(5)); 862 } 863 EXPECT_NE(task->GetResponse().GetResponseCode(), ResponseCode::OK); 864 } 865 866 HWTEST_F(HttpClientTaskTest, ProcessCookieTest002, TestSize.Level1) 867 { 868 HttpClientRequest httpReq; 869 HttpSession &session = HttpSession::GetInstance(); 870 auto task = session.CreateTask(httpReq); 871 task->ProcessCookie(task->curlHandle_); 872 EXPECT_NE(task->curlHandle_, nullptr); 873 } 874 875 HWTEST_F(HttpClientTaskTest, GetTimingFromCurlTest001, TestSize.Level1) 876 { 877 HttpClientRequest httpReq; 878 HttpSession &session = HttpSession::GetInstance(); 879 auto task = session.CreateTask(httpReq); 880 task->curlHandle_ = nullptr; 881 // CURLINFO info; 882 auto ret = task->GetTimingFromCurl(task->curlHandle_, CURLINFO_TOTAL_TIME_T); 883 EXPECT_EQ(ret, 0); 884 } 885 886 HWTEST_F(HttpClientTaskTest, DumpHttpPerformanceTest001, TestSize.Level1) 887 { 888 HttpClientRequest httpReq; 889 HttpSession &session = HttpSession::GetInstance(); 890 auto task = session.CreateTask(httpReq); 891 task->DumpHttpPerformance(); 892 EXPECT_NE(task->curlHandle_, nullptr); 893 } 894 895 HWTEST_F(HttpClientTaskTest, CancelTest001, TestSize.Level1) 896 { 897 HttpClientRequest httpReq; 898 std::string url = "https://www.baidu.com"; 899 httpReq.SetURL(url); 900 901 HttpSession &session = HttpSession::GetInstance(); 902 auto task = session.CreateTask(httpReq); 903 904 task->Cancel(); 905 EXPECT_TRUE(task->canceled_); 906 } 907 908 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption001, TestSize.Level1) 909 { 910 HttpClientRequest httpReq; 911 std::string url = "https://www.baidu.com"; 912 httpReq.SetURL(url); 913 914 HttpSession &session = HttpSession::GetInstance(); 915 auto task = session.CreateTask(httpReq); 916 917 bool result = task->SetServerSSLCertOption(task->curlHandle_); 918 EXPECT_TRUE(result); 919 } 920 921 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption002, TestSize.Level1) 922 { 923 HttpClientRequest httpReq; 924 std::string url = ""; 925 httpReq.SetURL(url); 926 927 HttpSession &session = HttpSession::GetInstance(); 928 auto task = session.CreateTask(httpReq); 929 930 bool result = task->SetServerSSLCertOption(task->curlHandle_); 931 EXPECT_TRUE(result); 932 } 933 934 #if HAS_NETMANAGER_BASE 935 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption_ShouldReturnTrue_WhenGetPinSetForHostNameReturnsZeroAndPinsIsEmpty, 936 TestSize.Level2) 937 { 938 auto configInstance = OHOS::NetManagerStandard::NetworkSecurityConfig::GetInstance(); 939 OHOS::NetManagerStandard::DomainConfig config = {}; 940 OHOS::NetManagerStandard::Domain domain; 941 domain.domainName_ = "https://www.example.com"; 942 domain.includeSubDomains_ = false; 943 config.domains_.push_back(domain); 944 OHOS::NetManagerStandard::Pin pin; 945 pin.digestAlgorithm_ = "TEST"; 946 pin.digest_ = "TEST"; 947 config.pinSet_.pins_.push_back(pin); 948 configInstance.domainConfigs_.push_back(config); 949 HttpClientRequest httpReq; 950 std::string url = "https://www.example.com"; 951 httpReq.SetURL(url); 952 HttpSession &session = HttpSession::GetInstance(); 953 auto task = session.CreateTask(httpReq); 954 EXPECT_TRUE(task->SetServerSSLCertOption(task->curlHandle_)); 955 } 956 #endif 957 958 class MockCurl { 959 public: 960 MOCK_METHOD0(easy_init, CURL *()); 961 }; 962 963 HWTEST_F(HttpClientTaskTest, HttpClientTask_ShouldNotCreate_WhenCurlInitFails, TestSize.Level0) 964 { 965 MockCurl mockCurl; 966 ON_CALL(mockCurl, easy_init).WillByDefault(Return(nullptr)); 967 968 HttpClientRequest request; 969 HttpClientTask httpClientTask(request); 970 ASSERT_EQ(httpClientTask.GetStatus(), IDLE); 971 ASSERT_EQ(httpClientTask.GetType(), DEFAULT); 972 ASSERT_EQ(httpClientTask.canceled_, false); 973 974 HttpSession &session = HttpSession::GetInstance(); 975 auto httpClientTask2 = session.CreateTask(request, UPLOAD, "testFakePath"); 976 ASSERT_EQ(httpClientTask2->GetType(), UPLOAD); 977 } 978 979 HWTEST_F(HttpClientTaskTest, ProcessRequestTest001, TestSize.Level1) 980 { 981 HttpClientRequest httpReq; 982 std::string url = "http://www.httpbin.org/get"; 983 httpReq.SetURL(url); 984 httpReq.SetHeader("content-type", "application/json"); 985 986 HttpSession &session = HttpSession::GetInstance(); 987 auto task = session.CreateTask(httpReq); 988 task->Start(); 989 990 while (task->GetStatus() != TaskStatus::IDLE) { 991 std::this_thread::sleep_for(std::chrono::milliseconds(5)); 992 } 993 const HttpClientRequest &request = task->GetRequest(); 994 EXPECT_EQ(request.GetURL(), url); 995 } 996 997 HWTEST_F(HttpClientTaskTest, ProcessErrorTest001, TestSize.Level1) 998 { 999 HttpClientRequest httpReq; 1000 std::string url = "http://nonexistenturl:8080"; 1001 httpReq.SetURL(url); 1002 httpReq.SetHeader("content-type", "text/plain"); 1003 1004 HttpSession &session = HttpSession::GetInstance(); 1005 auto task = session.CreateTask(httpReq); 1006 task->Start(); 1007 1008 while (task->GetStatus() != TaskStatus::IDLE) { 1009 std::this_thread::sleep_for(std::chrono::milliseconds(5)); 1010 } 1011 const HttpClientError &error = task->GetError(); 1012 EXPECT_NE(error.GetErrorCode(), 0); 1013 EXPECT_FALSE(error.GetErrorMessage().empty()); 1014 } 1015 } // namespace 1016