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 36using namespace OHOS::NetStack::HttpClient; 37using namespace testing; 38using namespace testing::ext; 39 40class HttpClientTaskTest : public testing::Test { 41public: 42 static void SetUpTestCase() {} 43 44 static void TearDownTestCase() {} 45 46 virtual void SetUp() {} 47 48 virtual void TearDown() {} 49 50 void ProcesslTaskCb(std::shared_ptr<HttpClientTask> task); 51}; 52 53namespace { 54using namespace std; 55using namespace testing::ext; 56 57HWTEST_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 70HWTEST_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 82HWTEST_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 96HWTEST_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 117HWTEST_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 136HWTEST_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 155HWTEST_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 177HWTEST_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 198HWTEST_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 213HWTEST_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 228HWTEST_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 243HWTEST_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 255HWTEST_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 269HWTEST_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 285HWTEST_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 299HWTEST_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 313HWTEST_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 std::string headerStr = "Connection:keep-alive"; 324 task->curlHeaderList_ = curl_slist_append(task->curlHeaderList_, headerStr.c_str()); 325 326 EXPECT_FALSE(task->SetCurlOptions()); 327} 328 329HWTEST_F(HttpClientTaskTest, GetType001, TestSize.Level1) 330{ 331 HttpClientRequest httpReq; 332 std::string url = "https://www.baidu.com"; 333 httpReq.SetURL(url); 334 335 HttpSession &session = HttpSession::GetInstance(); 336 auto task = session.CreateTask(httpReq); 337 338 EXPECT_EQ(TaskType::DEFAULT, task->GetType()); 339} 340 341HWTEST_F(HttpClientTaskTest, GetFilePathTest001, TestSize.Level1) 342{ 343 HttpClientRequest httpReq; 344 std::string url = "http://www.httpbin.org/put"; 345 httpReq.SetURL(url); 346 std::string method = "PUT"; 347 httpReq.SetMethod(method); 348 349 HttpSession &session = HttpSession::GetInstance(); 350 std::string filePath = "/bin/who"; 351 auto task = session.CreateTask(httpReq, UPLOAD, filePath); 352 353 EXPECT_EQ(task->GetFilePath(), "/bin/who"); 354} 355HWTEST_F(HttpClientTaskTest, GetTaskIdTest001, TestSize.Level1) 356{ 357 HttpClientRequest httpReq; 358 std::string url = "http://www.httpbin.org/get"; 359 httpReq.SetURL(url); 360 361 HttpSession &session = HttpSession::GetInstance(); 362 auto task = session.CreateTask(httpReq); 363 364 unsigned int taskId = task->GetTaskId(); 365 EXPECT_TRUE(taskId >= 0); 366} 367 368HWTEST_F(HttpClientTaskTest, OnSuccessTest001, TestSize.Level1) 369{ 370 HttpClientRequest httpReq; 371 std::string url = "https://www.baidu.com"; 372 httpReq.SetURL(url); 373 374 HttpSession &session = HttpSession::GetInstance(); 375 auto task = session.CreateTask(httpReq); 376 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {}); 377 378 EXPECT_TRUE(task->onSucceeded_ != nullptr); 379} 380 381HWTEST_F(HttpClientTaskTest, OnCancelTest001, TestSize.Level1) 382{ 383 HttpClientRequest httpReq; 384 std::string url = "http://www.httpbin.org/get"; 385 httpReq.SetURL(url); 386 387 HttpSession &session = HttpSession::GetInstance(); 388 auto task = session.CreateTask(httpReq); 389 390 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {}); 391 392 EXPECT_TRUE(task->onCanceled_ != nullptr); 393} 394 395HWTEST_F(HttpClientTaskTest, OnFailTest001, TestSize.Level1) 396{ 397 HttpClientRequest httpReq; 398 std::string url = "http://www.httpbin.org/get"; 399 httpReq.SetURL(url); 400 401 HttpSession &session = HttpSession::GetInstance(); 402 auto task = session.CreateTask(httpReq); 403 404 task->OnFail( 405 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 406 407 EXPECT_TRUE(task->onFailed_ != nullptr); 408} 409 410HWTEST_F(HttpClientTaskTest, OnDataReceiveTest001, TestSize.Level1) 411{ 412 HttpClientRequest httpReq; 413 std::string url = "http://www.httpbin.org/get"; 414 httpReq.SetURL(url); 415 416 HttpSession &session = HttpSession::GetInstance(); 417 auto task = session.CreateTask(httpReq); 418 419 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {}); 420 421 EXPECT_TRUE(task->onDataReceive_ != nullptr); 422} 423 424HWTEST_F(HttpClientTaskTest, OnProgressTest001, TestSize.Level1) 425{ 426 HttpClientRequest httpReq; 427 std::string url = "http://www.httpbin.org/get"; 428 httpReq.SetURL(url); 429 430 HttpSession &session = HttpSession::GetInstance(); 431 auto task = session.CreateTask(httpReq); 432 433 task->OnProgress( 434 [](const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) {}); 435 436 EXPECT_TRUE(task->onProgress_ != nullptr); 437} 438 439HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest001, TestSize.Level1) 440{ 441 HttpClientRequest httpReq; 442 std::string url = "https://www.baidu.com"; 443 const char *data = "https://www.baidu.com"; 444 httpReq.SetURL(url); 445 446 HttpSession &session = HttpSession::GetInstance(); 447 auto task = session.CreateTask(httpReq); 448 449 auto *userData = task.get(); 450 size_t size = 10; 451 size_t memBytes = 1; 452 453 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {}); 454 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 455 456 EXPECT_EQ(result, size * memBytes); 457} 458 459HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest002, TestSize.Level1) 460{ 461 HttpClientRequest httpReq; 462 std::string url = "https://www.baidu.com"; 463 const char *data = "https://www.baidu.com"; 464 httpReq.SetURL(url); 465 466 HttpSession &session = HttpSession::GetInstance(); 467 auto task = session.CreateTask(httpReq); 468 469 auto *userData = task.get(); 470 size_t size = 10; 471 size_t memBytes = 1; 472 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 473 474 EXPECT_EQ(result, size * memBytes); 475} 476 477HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest003, TestSize.Level1) 478{ 479 HttpClientRequest httpReq; 480 std::string url = "http://www.httpbin.org/get"; 481 const char *data = "http://www.httpbin.org/get"; 482 httpReq.SetURL(url); 483 484 HttpSession &session = HttpSession::GetInstance(); 485 auto task = session.CreateTask(httpReq); 486 487 auto *userData = task.get(); 488 size_t size = 10; 489 size_t memBytes = 1; 490 task->canceled_ = true; 491 size_t result = task->DataReceiveCallback(data, size, memBytes, userData); 492 493 EXPECT_EQ(result, 0); 494 task->canceled_ = false; 495} 496 497HWTEST_F(HttpClientTaskTest, ProgressCallbackTest001, TestSize.Level1) 498{ 499 HttpClientRequest httpReq; 500 std::string url = "https://www.baidu.com"; 501 httpReq.SetURL(url); 502 503 HttpSession &session = HttpSession::GetInstance(); 504 auto task = session.CreateTask(httpReq); 505 506 auto *userData = task.get(); 507 curl_off_t dltotal = 100; 508 curl_off_t dlnow = 50; 509 curl_off_t ultotal = 200; 510 curl_off_t ulnow = 100; 511 int result; 512 513 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 514 EXPECT_EQ(result, 0); 515} 516 517HWTEST_F(HttpClientTaskTest, ProgressCallbackTest002, TestSize.Level1) 518{ 519 HttpClientRequest httpReq; 520 std::string url = "https://www.baidu.com"; 521 httpReq.SetURL(url); 522 523 HttpSession &session = HttpSession::GetInstance(); 524 auto task = session.CreateTask(httpReq); 525 526 auto *userData = task.get(); 527 curl_off_t dltotal = 100; 528 curl_off_t dlnow = 50; 529 curl_off_t ultotal = 200; 530 curl_off_t ulnow = 100; 531 int result; 532 533 task->Cancel(); 534 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 535 EXPECT_EQ(result, CURLE_ABORTED_BY_CALLBACK); 536} 537 538HWTEST_F(HttpClientTaskTest, ProgressCallbackTest003, TestSize.Level1) 539{ 540 HttpClientRequest httpReq; 541 std::string url = "https://www.baidu.com"; 542 httpReq.SetURL(url); 543 544 HttpSession &session = HttpSession::GetInstance(); 545 auto task = session.CreateTask(httpReq); 546 547 auto *userData = task.get(); 548 curl_off_t dltotal = 100; 549 curl_off_t dlnow = 50; 550 curl_off_t ultotal = 200; 551 curl_off_t ulnow = 100; 552 553 int result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow); 554 EXPECT_EQ(result, 0); 555} 556 557HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest001, TestSize.Level1) 558{ 559 HttpClientRequest httpReq; 560 std::string url = "https://www.baidu.com"; 561 httpReq.SetURL(url); 562 563 HttpSession &session = HttpSession::GetInstance(); 564 auto task = session.CreateTask(httpReq); 565 566 auto *userData = task.get(); 567 const char *data = "Test Header"; 568 size_t size = 5; 569 size_t memBytes = 2; 570 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 571 EXPECT_EQ(result, size * memBytes); 572} 573 574HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest002, TestSize.Level1) 575{ 576 HttpClientRequest httpReq; 577 std::string url = "https://www.baidu.com"; 578 httpReq.SetURL(url); 579 580 HttpSession &session = HttpSession::GetInstance(); 581 auto task = session.CreateTask(httpReq); 582 583 auto *userData = task.get(); 584 585 const char *data = "Test Header"; 586 size_t size = HttpConstant::MAX_DATA_LIMIT + 1; 587 size_t memBytes = 1; 588 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 589 EXPECT_EQ(result, 0); 590} 591 592HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest003, TestSize.Level1) 593{ 594 HttpClientRequest httpReq; 595 std::string url = "http://www.httpbin.org/get"; 596 httpReq.SetURL(url); 597 598 HttpSession &session = HttpSession::GetInstance(); 599 auto task = session.CreateTask(httpReq); 600 601 auto *userData = task.get(); 602 603 const char *data = "Test Header"; 604 size_t size = 5; 605 size_t memBytes = 2; 606 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData); 607 EXPECT_EQ(result, size * memBytes); 608} 609 610HWTEST_F(HttpClientTaskTest, ProcessResponseCodeTest001, TestSize.Level1) 611{ 612 HttpClientRequest httpReq; 613 std::string url = "https://www.baidu.com"; 614 httpReq.SetURL(url); 615 616 HttpSession &session = HttpSession::GetInstance(); 617 auto task = session.CreateTask(httpReq); 618 task->Start(); 619 620 while (task->GetStatus() != TaskStatus::IDLE) { 621 std::this_thread::sleep_for(std::chrono::milliseconds(100)); 622 } 623 EXPECT_TRUE(task->ProcessResponseCode()); 624} 625 626HWTEST_F(HttpClientTaskTest, ProcessResponseTest001, TestSize.Level1) 627{ 628 HttpClientRequest httpReq; 629 std::string url = "https://www.baidu.com"; 630 httpReq.SetURL(url); 631 632 HttpSession &session = HttpSession::GetInstance(); 633 auto task = session.CreateTask(httpReq); 634 635 CURLMsg msg; 636 msg.data.result = CURLE_ABORTED_BY_CALLBACK; 637 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {}); 638 task->ProcessResponse(&msg); 639 EXPECT_TRUE(task->onCanceled_); 640 641 msg.data.result = CURLE_FAILED_INIT; 642 task->OnFail( 643 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 644 task->ProcessResponse(&msg); 645 EXPECT_TRUE(task->onFailed_); 646 647 msg.data.result = CURLE_OK; 648 task->response_.SetResponseCode(ResponseCode::NOT_MODIFIED); 649 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {}); 650 task->ProcessResponse(&msg); 651 EXPECT_TRUE(task->onSucceeded_); 652 653 task->curlHandle_ = nullptr; 654 task->OnFail( 655 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 656 task->ProcessResponse(&msg); 657 EXPECT_TRUE(task->onFailed_); 658} 659 660HWTEST_F(HttpClientTaskTest, SetResponseTest001, TestSize.Level1) 661{ 662 HttpClientRequest httpReq; 663 std::string url = "https://www.baidu.com"; 664 httpReq.SetURL(url); 665 666 HttpSession &session = HttpSession::GetInstance(); 667 auto task = session.CreateTask(httpReq); 668 669 HttpClientResponse resp; 670 resp.result_ = "result1"; 671 task->SetResponse(resp); 672 673 EXPECT_EQ(task->response_.result_, "result1"); 674} 675 676HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest001, TestSize.Level1) 677{ 678 HttpClientRequest httpReq; 679 680 std::string url = "http://www.httpbin.org/get"; 681 httpReq.SetURL(url); 682 httpReq.SetHttpProxyType(USE_SPECIFIED); 683 HttpProxy proxy; 684 proxy.host = "192.168.147.60"; 685 proxy.port = 8888; 686 proxy.exclusions = "www.httpbin.org"; 687 proxy.tunnel = false; 688 httpReq.SetHttpProxy(proxy); 689 690 HttpSession &session = HttpSession::GetInstance(); 691 auto task = session.CreateTask(httpReq); 692 693 std::string host; 694 std::string exclusions; 695 int32_t port = 0; 696 bool tunnel = false; 697 task->GetHttpProxyInfo(host, port, exclusions, tunnel); 698 699 EXPECT_EQ(host, "192.168.147.60"); 700 EXPECT_EQ(port, 8888); 701 EXPECT_EQ(exclusions, "www.httpbin.org"); 702 EXPECT_FALSE(tunnel); 703} 704 705HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest002, TestSize.Level1) 706{ 707 HttpClientRequest httpReq; 708 709 std::string url = "http://www.httpbin.org/get"; 710 httpReq.SetURL(url); 711 httpReq.SetHttpProxyType(NOT_USE); 712 HttpProxy proxy; 713 proxy.host = "192.168.147.60"; 714 proxy.port = 8888; 715 proxy.exclusions = "www.httpbin.org"; 716 proxy.tunnel = false; 717 httpReq.SetHttpProxy(proxy); 718 719 HttpSession &session = HttpSession::GetInstance(); 720 auto task = session.CreateTask(httpReq); 721 722 std::string host; 723 std::string exclusions; 724 int32_t port = 0; 725 bool tunnel = false; 726 task->GetHttpProxyInfo(host, port, exclusions, tunnel); 727 728 EXPECT_EQ(host, ""); 729 EXPECT_EQ(port, 0); 730 EXPECT_EQ(exclusions, ""); 731 EXPECT_FALSE(tunnel); 732} 733 734HWTEST_F(HttpClientTaskTest, SetStatus001, TestSize.Level1) 735{ 736 HttpClientRequest httpReq; 737 std::string url = "http://www.httpbin.org/get"; 738 httpReq.SetURL(url); 739 740 HttpSession &session = HttpSession::GetInstance(); 741 auto task = session.CreateTask(httpReq); 742 743 task->SetStatus(RUNNING); 744 EXPECT_EQ(RUNNING, task->GetStatus()); 745} 746 747HWTEST_F(HttpClientTaskTest, GetStatusTest001, TestSize.Level1) 748{ 749 HttpClientRequest httpReq; 750 std::string url = "http://www.httpbin.org/get"; 751 httpReq.SetURL(url); 752 753 HttpSession &session = HttpSession::GetInstance(); 754 auto task = session.CreateTask(httpReq); 755 756 EXPECT_EQ(IDLE, task->GetStatus()); 757} 758 759HWTEST_F(HttpClientTaskTest, GetStatusTest002, TestSize.Level1) 760{ 761 HttpClientRequest httpReq; 762 std::string url = "https://www.baidu.com"; 763 httpReq.SetURL(url); 764 765 HttpSession &session = HttpSession::GetInstance(); 766 auto task = session.CreateTask(httpReq); 767 768 task->SetStatus(TaskStatus::RUNNING); 769 770 EXPECT_EQ(task->GetStatus(), RUNNING); 771} 772 773HWTEST_F(HttpClientTaskTest, StartTest001, TestSize.Level1) 774{ 775 HttpClientRequest httpReq; 776 std::string url = "http://www.baidu.com"; 777 httpReq.SetURL(url); 778 779 HttpSession &session = HttpSession::GetInstance(); 780 auto task = session.CreateTask(httpReq); 781 782 task->SetStatus(TaskStatus::RUNNING); 783 bool result = task->Start(); 784 EXPECT_FALSE(result); 785} 786 787HWTEST_F(HttpClientTaskTest, StartTest002, TestSize.Level1) 788{ 789 HttpClientRequest httpReq; 790 std::string url = "http://www.baidu.com"; 791 httpReq.SetURL(url); 792 793 HttpSession &session = HttpSession::GetInstance(); 794 auto task = session.CreateTask(httpReq); 795 796 task->error_.SetErrorCode(HttpErrorCode::HTTP_UNSUPPORTED_PROTOCOL); 797 bool result = task->Start(); 798 EXPECT_FALSE(result); 799} 800 801HWTEST_F(HttpClientTaskTest, ProcessCookieTest001, TestSize.Level1) 802{ 803 HttpClientRequest httpReq; 804 std::string url = "http://www.httpbin.org/cookies/set/name1/value1"; 805 httpReq.SetURL(url); 806 httpReq.SetHeader("content-type", "text/plain"); 807 HttpSession &session = HttpSession::GetInstance(); 808 auto task = session.CreateTask(httpReq); 809 task->Start(); 810 811 while (task->GetStatus() != TaskStatus::IDLE) { 812 std::this_thread::sleep_for(std::chrono::milliseconds(5)); 813 } 814 EXPECT_EQ(task->GetResponse().GetResponseCode(), ResponseCode::NONE); 815} 816 817HWTEST_F(HttpClientTaskTest, CancelTest001, TestSize.Level1) 818{ 819 HttpClientRequest httpReq; 820 std::string url = "https://www.baidu.com"; 821 httpReq.SetURL(url); 822 823 HttpSession &session = HttpSession::GetInstance(); 824 auto task = session.CreateTask(httpReq); 825 826 task->Cancel(); 827 EXPECT_TRUE(task->canceled_); 828} 829 830HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption001, TestSize.Level1) 831{ 832 HttpClientRequest httpReq; 833 std::string url = "https://www.baidu.com"; 834 httpReq.SetURL(url); 835 836 HttpSession &session = HttpSession::GetInstance(); 837 auto task = session.CreateTask(httpReq); 838 839 bool result = task->SetServerSSLCertOption(task->curlHandle_); 840 EXPECT_TRUE(result); 841} 842 843#if HAS_NETMANAGER_BASE 844HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption_ShouldReturnTrue_WhenGetPinSetForHostNameReturnsZeroAndPinsIsEmpty, 845 TestSize.Level2) 846{ 847 auto configInstance = OHOS::NetManagerStandard::NetworkSecurityConfig::GetInstance(); 848 OHOS::NetManagerStandard::DomainConfig config = {}; 849 OHOS::NetManagerStandard::Domain domain; 850 domain.domainName_ = "https://www.example.com"; 851 domain.includeSubDomains_ = false; 852 config.domains_.push_back(domain); 853 OHOS::NetManagerStandard::Pin pin; 854 pin.digestAlgorithm_ = "TEST"; 855 pin.digest_ = "TEST"; 856 config.pinSet_.pins_.push_back(pin); 857 configInstance.domainConfigs_.push_back(config); 858 HttpClientRequest httpReq; 859 std::string url = "https://www.example.com"; 860 httpReq.SetURL(url); 861 HttpSession &session = HttpSession::GetInstance(); 862 auto task = session.CreateTask(httpReq); 863 EXPECT_TRUE(task->SetServerSSLCertOption(task->curlHandle_)); 864} 865#endif 866 867class MockCurl { 868public: 869 MOCK_METHOD0(easy_init, CURL *()); 870}; 871 872HWTEST_F(HttpClientTaskTest, HttpClientTask_ShouldNotCreate_WhenCurlInitFails, TestSize.Level0) 873{ 874 MockCurl mockCurl; 875 ON_CALL(mockCurl, easy_init).WillByDefault(Return(nullptr)); 876 877 HttpClientRequest request; 878 HttpClientTask httpClientTask(request); 879 ASSERT_EQ(httpClientTask.GetStatus(), IDLE); 880 ASSERT_EQ(httpClientTask.GetType(), DEFAULT); 881 ASSERT_EQ(httpClientTask.canceled_, false); 882 883 HttpSession &session = HttpSession::GetInstance(); 884 auto httpClientTask2 = session.CreateTask(request, UPLOAD, "testFakePath"); 885 ASSERT_EQ(httpClientTask2->GetType(), UPLOAD); 886} 887} // namespace 888