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 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 329 HWTEST_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 341 HWTEST_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 } 355 HWTEST_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 368 HWTEST_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); __anone15c4ce60202(const HttpClientRequest &request, const HttpClientResponse &response) 376 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {}); 377 378 EXPECT_TRUE(task->onSucceeded_ != nullptr); 379 } 380 381 HWTEST_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 __anone15c4ce60302(const HttpClientRequest &request, const HttpClientResponse &response) 390 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {}); 391 392 EXPECT_TRUE(task->onCanceled_ != nullptr); 393 } 394 395 HWTEST_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( __anone15c4ce60402(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 405 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 406 407 EXPECT_TRUE(task->onFailed_ != nullptr); 408 } 409 410 HWTEST_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 __anone15c4ce60502(const HttpClientRequest &request, const uint8_t *data, size_t length) 419 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {}); 420 421 EXPECT_TRUE(task->onDataReceive_ != nullptr); 422 } 423 424 HWTEST_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( __anone15c4ce60602(const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) 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 439 HWTEST_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 __anone15c4ce60702(const HttpClientRequest &request, const uint8_t *data, size_t length) 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 459 HWTEST_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 477 HWTEST_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 497 HWTEST_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 517 HWTEST_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 538 HWTEST_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 557 HWTEST_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 574 HWTEST_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 592 HWTEST_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 610 HWTEST_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 626 HWTEST_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; __anone15c4ce60802(const HttpClientRequest &request, const HttpClientResponse &response) 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( __anone15c4ce60902(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 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); __anone15c4ce60a02(const HttpClientRequest &request, const HttpClientResponse &response) 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( __anone15c4ce60b02(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 655 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {}); 656 task->ProcessResponse(&msg); 657 EXPECT_TRUE(task->onFailed_); 658 } 659 660 HWTEST_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 676 HWTEST_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 705 HWTEST_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 734 HWTEST_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 747 HWTEST_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 759 HWTEST_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 773 HWTEST_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 787 HWTEST_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 801 HWTEST_F(HttpClientTaskTest, CancelTest001, TestSize.Level1) 802 { 803 HttpClientRequest httpReq; 804 std::string url = "https://www.baidu.com"; 805 httpReq.SetURL(url); 806 807 HttpSession &session = HttpSession::GetInstance(); 808 auto task = session.CreateTask(httpReq); 809 810 task->Cancel(); 811 EXPECT_TRUE(task->canceled_); 812 } 813 814 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption001, TestSize.Level1) 815 { 816 HttpClientRequest httpReq; 817 std::string url = "https://www.baidu.com"; 818 httpReq.SetURL(url); 819 820 HttpSession &session = HttpSession::GetInstance(); 821 auto task = session.CreateTask(httpReq); 822 823 bool result = task->SetServerSSLCertOption(task->curlHandle_); 824 EXPECT_TRUE(result); 825 } 826 827 #if HAS_NETMANAGER_BASE 828 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption_ShouldReturnTrue_WhenGetPinSetForHostNameReturnsZeroAndPinsIsEmpty, 829 TestSize.Level2) 830 { 831 auto configInstance = OHOS::NetManagerStandard::NetworkSecurityConfig::GetInstance(); 832 OHOS::NetManagerStandard::DomainConfig config = {}; 833 OHOS::NetManagerStandard::Domain domain; 834 domain.domainName_ = "https://www.example.com"; 835 domain.includeSubDomains_ = false; 836 config.domains_.push_back(domain); 837 OHOS::NetManagerStandard::Pin pin; 838 pin.digestAlgorithm_ = "TEST"; 839 pin.digest_ = "TEST"; 840 config.pinSet_.pins_.push_back(pin); 841 configInstance.domainConfigs_.push_back(config); 842 HttpClientRequest httpReq; 843 std::string url = "https://www.example.com"; 844 httpReq.SetURL(url); 845 HttpSession &session = HttpSession::GetInstance(); 846 auto task = session.CreateTask(httpReq); 847 EXPECT_TRUE(task->SetServerSSLCertOption(task->curlHandle_)); 848 } 849 #endif 850 851 class MockCurl { 852 public: 853 MOCK_METHOD0(easy_init, CURL *()); 854 }; 855 856 HWTEST_F(HttpClientTaskTest, HttpClientTask_ShouldNotCreate_WhenCurlInitFails, TestSize.Level0) 857 { 858 MockCurl mockCurl; 859 ON_CALL(mockCurl, easy_init).WillByDefault(Return(nullptr)); 860 861 HttpClientRequest request; 862 HttpClientTask httpClientTask(request); 863 ASSERT_EQ(httpClientTask.GetStatus(), IDLE); 864 ASSERT_EQ(httpClientTask.GetType(), DEFAULT); 865 ASSERT_EQ(httpClientTask.canceled_, false); 866 867 HttpSession &session = HttpSession::GetInstance(); 868 auto httpClientTask2 = session.CreateTask(request, UPLOAD, "testFakePath"); 869 ASSERT_EQ(httpClientTask2->GetType(), UPLOAD); 870 } 871 } // namespace 872