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 "openssl/ssl.h"
19 #include "gtest/gtest.h"
20 #include "gmock/gmock.h"
21 #include "http_client_constant.h"
22 #include "netstack_log.h"
23 #include "netstack_common_utils.h"
24
25 #define private public
26 #include "http_client_task.h"
27 #include "http_client.h"
28 #include "http_client_error.h"
29 #include <curl/curl.h>
30 #include "http_client_request.h"
31 #include "http_client_response.h"
32 #if HAS_NETMANAGER_BASE
33 #include "net_conn_client.h"
34 #include "network_security_config.h"
35 #endif
36
37 using namespace OHOS::NetStack::HttpClient;
38 using namespace testing;
39 using namespace testing::ext;
40
41 class HttpClientTaskTest : public testing::Test {
42 public:
SetUpTestCase()43 static void SetUpTestCase() {}
44
TearDownTestCase()45 static void TearDownTestCase() {}
46
SetUp()47 virtual void SetUp() {}
48
TearDown()49 virtual void TearDown() {}
50
51 void ProcesslTaskCb(std::shared_ptr<HttpClientTask> task);
52 };
53
54 namespace {
55 using namespace std;
56 using namespace testing::ext;
57
testCallbackconst(const HttpClientRequest & request,std::map<std::string,std::string> headerWithSetCookie)58 static void testCallbackconst(const HttpClientRequest &request, std::map<std::string,
59 std::string> headerWithSetCookie)
60 {
61 NETSTACK_LOGI("testCallbackconst function called!");
62 }
63
64 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest001, TestSize.Level1)
65 {
66 HttpClientRequest httpReq;
67 std::string url = "https://www.baidu.com";
68 httpReq.SetURL(url);
69
70 HttpSession &session = HttpSession::GetInstance();
71 auto task = session.CreateTask(httpReq);
72
73 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP_NONE);
74 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_NONE);
75 }
76
77 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest002, TestSize.Level1)
78 {
79 HttpClientRequest httpReq;
80 std::string url = "https://www.baidu.com";
81 httpReq.SetURL(url);
82 HttpSession &session = HttpSession::GetInstance();
83 auto task = session.CreateTask(httpReq);
84
85 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP1_1);
86 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_1_1);
87 }
88
89 HWTEST_F(HttpClientTaskTest, GetHttpVersionTest003, TestSize.Level1)
90 {
91 HttpClientRequest httpReq;
92 std::string url = "https://www.baidu.com";
93 httpReq.SetURL(url);
94 HttpSession &session = HttpSession::GetInstance();
95 auto task = session.CreateTask(httpReq);
96
97 uint32_t httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP2);
98 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_2_0);
99 httpVersionTest = task->GetHttpVersion(HttpProtocol::HTTP3);
100 EXPECT_EQ(httpVersionTest, CURL_HTTP_VERSION_3);
101 }
102
103 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest001, TestSize.Level1)
104 {
105 HttpClientRequest httpReq;
106
107 std::string url = "http://www.httpbin.org/get";
108 httpReq.SetURL(url);
109 httpReq.SetHttpProxyType(NOT_USE);
110 HttpProxy proxy;
111 proxy.host = "192.168.147.60";
112 proxy.port = 8888;
113 proxy.exclusions = "www.httpbin.org";
114 proxy.tunnel = false;
115 httpReq.SetHttpProxy(proxy);
116
117 HttpSession &session = HttpSession::GetInstance();
118 auto task = session.CreateTask(httpReq);
119
120 bool result = task->SetOtherCurlOption(task->curlHandle_);
121 EXPECT_TRUE(result);
122 }
123
124 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest002, TestSize.Level1)
125 {
126 HttpClientRequest httpReq;
127
128 std::string url = "http://www.httpbin.org/get";
129 httpReq.SetURL(url);
130 httpReq.SetHttpProxyType(NOT_USE);
131 HttpProxy proxy;
132 proxy.host = "192.168.147.60";
133 proxy.port = 8888;
134 proxy.tunnel = false;
135 httpReq.SetHttpProxy(proxy);
136
137 HttpSession &session = HttpSession::GetInstance();
138 auto task = session.CreateTask(httpReq);
139
140 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_));
141 }
142
143 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest003, TestSize.Level1)
144 {
145 HttpClientRequest httpReq;
146
147 std::string url = "http://www.httpbin.org/get";
148 httpReq.SetURL(url);
149 httpReq.SetHttpProxyType(NOT_USE);
150 HttpProxy proxy;
151 proxy.host = "192.168.147.60";
152 proxy.port = 8888;
153 proxy.tunnel = false;
154 httpReq.SetHttpProxy(proxy);
155
156 HttpSession &session = HttpSession::GetInstance();
157 auto task = session.CreateTask(httpReq);
158
159 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_));
160 }
161
162 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest004, TestSize.Level1)
163 {
164 HttpClientRequest httpReq;
165
166 std::string url = "http://www.httpbin.org/get";
167 httpReq.SetURL(url);
168 httpReq.SetHttpProxyType(NOT_USE);
169 HttpProxy proxy;
170 proxy.host = "192.168.147.60";
171 proxy.port = 8888;
172 proxy.exclusions = "www.httpbin.org";
173 proxy.tunnel = true;
174 httpReq.SetHttpProxy(proxy);
175
176 HttpSession &session = HttpSession::GetInstance();
177 auto task = session.CreateTask(httpReq);
178
179 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_));
180 curl_easy_cleanup(task->curlHandle_);
181 task->curlHandle_ = nullptr;
182 }
183
184 HWTEST_F(HttpClientTaskTest, SetOtherCurlOptionTest005, TestSize.Level1)
185 {
186 HttpClientRequest httpReq;
187
188 std::string url = "http://www.httpbin.org/get";
189 httpReq.SetURL(url);
190 httpReq.SetHttpProxyType(USE_SPECIFIED);
191 HttpProxy proxy;
192 proxy.host = "192.168.147.60";
193 proxy.port = 8888;
194 proxy.exclusions = "www.test.org";
195 proxy.tunnel = true;
196 httpReq.SetHttpProxy(proxy);
197
198 HttpSession &session = HttpSession::GetInstance();
199 auto task = session.CreateTask(httpReq);
200 EXPECT_TRUE(task->SetOtherCurlOption(task->curlHandle_));
201 curl_easy_cleanup(task->curlHandle_);
202 task->curlHandle_ = nullptr;
203 }
204
205 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest001, TestSize.Level1)
206 {
207 HttpClientRequest httpReq;
208 std::string url = "http://www.httpbin.org/put";
209 httpReq.SetURL(url);
210 std::string method = "PUT";
211 httpReq.SetMethod(method);
212
213 HttpSession &session = HttpSession::GetInstance();
214 std::string filePath = "/bin/who";
215 auto task = session.CreateTask(httpReq, UPLOAD, filePath);
216
217 EXPECT_TRUE(task->SetUploadOptions(task->curlHandle_));
218 }
219
220 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest002, TestSize.Level1)
221 {
222 HttpClientRequest httpReq;
223 std::string url = "http://www.httpbin.org/put";
224 httpReq.SetURL(url);
225 std::string method = "PUT";
226 httpReq.SetMethod(method);
227
228 HttpSession &session = HttpSession::GetInstance();
229 std::string filePath = "";
230 auto task = session.CreateTask(httpReq, UPLOAD, filePath);
231
232 EXPECT_FALSE(task->SetUploadOptions(task->curlHandle_));
233 }
234
235 HWTEST_F(HttpClientTaskTest, SetUploadOptionsTest003, TestSize.Level1)
236 {
237 HttpClientRequest httpReq;
238 std::string url = "http://www.httpbin.org/put";
239 httpReq.SetURL(url);
240 std::string method = "PUT";
241 httpReq.SetMethod(method);
242
243 HttpSession &session = HttpSession::GetInstance();
244 std::string filePath = "unavailable";
245 auto task = session.CreateTask(httpReq, UPLOAD, filePath);
246
247 EXPECT_FALSE(task->SetUploadOptions(task->curlHandle_));
248 }
249
250 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest001, TestSize.Level1)
251 {
252 HttpClientRequest httpReq;
253 std::string url = "http://www.httpbin.org/get";
254 httpReq.SetURL(url);
255
256 HttpSession &session = HttpSession::GetInstance();
257 auto task = session.CreateTask(httpReq);
258
259 EXPECT_TRUE(task->SetCurlOptions());
260 }
261
262 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest002, TestSize.Level1)
263 {
264 HttpClientRequest httpReq;
265 std::string url = "http://www.httpbin.org/get";
266 httpReq.SetURL(url);
267
268 HttpSession &session = HttpSession::GetInstance();
269 auto task = session.CreateTask(httpReq);
270
271 task->request_.SetMethod(HttpConstant::HTTP_METHOD_HEAD);
272
273 EXPECT_TRUE(task->SetCurlOptions());
274 }
275
276 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest003, TestSize.Level1)
277 {
278 HttpClientRequest httpReq;
279 std::string url = "http://www.httpbin.org/put";
280 httpReq.SetURL(url);
281 std::string method = "PUT";
282 httpReq.SetMethod(method);
283
284 HttpSession &session = HttpSession::GetInstance();
285 std::string filePath = "/bin/who";
286 auto task = session.CreateTask(httpReq, UPLOAD, filePath);
287
288 task->curlHandle_ = nullptr;
289 EXPECT_FALSE(task->SetCurlOptions());
290 }
291
292 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest004, TestSize.Level1)
293 {
294 HttpClientRequest httpReq;
295 std::string url = "http://www.httpbin.org/get";
296 httpReq.SetURL(url);
297
298 HttpSession &session = HttpSession::GetInstance();
299 auto task = session.CreateTask(httpReq);
300
301 task->request_.SetMethod(HttpConstant::HTTP_METHOD_POST);
302
303 EXPECT_TRUE(task->SetCurlOptions());
304 }
305
306 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest005, TestSize.Level1)
307 {
308 HttpClientRequest httpReq;
309 std::string url = "http://www.httpbin.org/get";
310 httpReq.SetURL(url);
311
312 HttpSession &session = HttpSession::GetInstance();
313 auto task = session.CreateTask(httpReq);
314
315 task->curlHandle_ = nullptr;
316
317 EXPECT_FALSE(task->SetCurlOptions());
318 }
319
320 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest006, TestSize.Level1)
321 {
322 HttpClientRequest httpReq;
323 std::string url = "http://www.httpbin.org/get";
324 httpReq.SetURL(url);
325
326 HttpSession &session = HttpSession::GetInstance();
327 auto task = session.CreateTask(httpReq);
328
329 task->curlHandle_ = nullptr;
330 task->curlHeaderList_ = nullptr;
331 std::string headerStr = "Connection:keep-alive";
332 task->curlHeaderList_ = curl_slist_append(task->curlHeaderList_, headerStr.c_str());
333
334 EXPECT_FALSE(task->SetCurlOptions());
335 }
336
337 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest007, TestSize.Level1)
338 {
339 HttpClientRequest httpReq;
340 std::string url = "http://www.httpbin.org/get";
341 httpReq.SetURL(url);
342
343 HttpSession &session = HttpSession::GetInstance();
344 auto task = session.CreateTask(httpReq);
345
346 task->request_.SetMethod(HttpConstant::HTTP_METHOD_PUT);
347 task->request_.SetResumeFrom(1000);
348
349 EXPECT_FALSE(task->SetCurlOptions());
350 }
351
352 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest008, TestSize.Level1)
353 {
354 HttpClientRequest httpReq;
355 std::string url = "http://www.httpbin.org/get";
356 httpReq.SetURL(url);
357
358 HttpSession &session = HttpSession::GetInstance();
359 auto task = session.CreateTask(httpReq);
360
361 task->request_.SetMethod(HttpConstant::HTTP_METHOD_GET);
362 task->request_.SetResumeFrom(1000);
363
364 EXPECT_TRUE(task->SetCurlOptions());
365 }
366
367 HWTEST_F(HttpClientTaskTest, SetCurlOptionsTest009, TestSize.Level1)
368 {
369 HttpClientRequest httpReq;
370 std::string url = "http://www.httpbin.org/get";
371 httpReq.SetURL(url);
372
373 HttpSession &session = HttpSession::GetInstance();
374 auto task = session.CreateTask(httpReq);
375
376 task->request_.SetResumeFrom(1000);
377 task->request_.SetResumeTo(100);
378
379 EXPECT_TRUE(task->SetCurlOptions());
380 }
381
382 HWTEST_F(HttpClientTaskTest, GetType001, TestSize.Level1)
383 {
384 HttpClientRequest httpReq;
385 std::string url = "https://www.baidu.com";
386 httpReq.SetURL(url);
387
388 HttpSession &session = HttpSession::GetInstance();
389 auto task = session.CreateTask(httpReq);
390
391 EXPECT_EQ(TaskType::DEFAULT, task->GetType());
392 }
393
394 HWTEST_F(HttpClientTaskTest, GetFilePathTest001, TestSize.Level1)
395 {
396 HttpClientRequest httpReq;
397 std::string url = "http://www.httpbin.org/put";
398 httpReq.SetURL(url);
399 std::string method = "PUT";
400 httpReq.SetMethod(method);
401
402 HttpSession &session = HttpSession::GetInstance();
403 std::string filePath = "/bin/who";
404 auto task = session.CreateTask(httpReq, UPLOAD, filePath);
405
406 EXPECT_EQ(task->GetFilePath(), "/bin/who");
407 }
408 HWTEST_F(HttpClientTaskTest, GetTaskIdTest001, TestSize.Level1)
409 {
410 HttpClientRequest httpReq;
411 std::string url = "http://www.httpbin.org/get";
412 httpReq.SetURL(url);
413
414 HttpSession &session = HttpSession::GetInstance();
415 auto task = session.CreateTask(httpReq);
416
417 unsigned int taskId = task->GetTaskId();
418 EXPECT_TRUE(taskId >= 0);
419 }
420
421 HWTEST_F(HttpClientTaskTest, OnSuccessTest001, TestSize.Level1)
422 {
423 HttpClientRequest httpReq;
424 std::string url = "http://www.httpbin.org/delete";
425 std::string method = "DELETE";
426 httpReq.SetURL(url);
427 httpReq.SetMethod(method);
428
429 HttpSession &session = HttpSession::GetInstance();
430 auto task = session.CreateTask(httpReq);
__anonc54940500202(const HttpClientRequest &request, const HttpClientResponse &response) 431 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {});
432 task->Start();
433
434 char *curlMethod = nullptr;
435 while (task->GetCurlHandle() == nullptr) {
436 std::this_thread::sleep_for(std::chrono::milliseconds(100));
437 }
438 curl_easy_getinfo(task->GetCurlHandle(), CURLINFO_EFFECTIVE_METHOD, &curlMethod);
439
440 while (task->GetStatus() != TaskStatus::IDLE) {
441 std::this_thread::sleep_for(std::chrono::milliseconds(100));
442 }
443
444 if (task->GetResponse().GetResponseCode() == 200) {
445 if (curlMethod == method) {
446 NETSTACK_LOGI("TestMethod() = %{public}s OK!", curlMethod);
447 }
448 const std::map<std::string, std::string> &headers = task->GetResponse().GetHeaders();
449 for (const auto &entry : headers) {
450 NETSTACK_LOGI("TestMethod() HEAD = %{public}s : %{public}s", entry.first.c_str(), entry.second.c_str());
451 }
452 } else if (task->GetResponse().GetResponseCode() == 405) {
453 NETSTACK_LOGI("TestMethod() %{public}s don't support, response 405", curlMethod);
454 } else {
455 NETSTACK_LOGI("TestMethod() = failed %{public}s", curlMethod);
456 }
457
458 EXPECT_TRUE(task->onSucceeded_ != nullptr);
459 }
460
461 HWTEST_F(HttpClientTaskTest, OnSuccessTest002, TestSize.Level1)
462 {
463 HttpClientRequest httpReq;
464 std::string url = "http://www.httpbin.org/get";
465 std::string method = "GET";
466 httpReq.SetURL(url);
467 httpReq.SetMethod(method);
468
469 HttpSession &session = HttpSession::GetInstance();
470 auto task = session.CreateTask(httpReq);
__anonc54940500302(const HttpClientRequest &request, const HttpClientResponse &response) 471 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {});
472 task->Start();
473
474 char *curlMethod = nullptr;
475 while (task->GetCurlHandle() == nullptr) {
476 std::this_thread::sleep_for(std::chrono::milliseconds(100));
477 }
478 curl_easy_getinfo(task->GetCurlHandle(), CURLINFO_EFFECTIVE_METHOD, &curlMethod);
479
480 while (task->GetStatus() != TaskStatus::IDLE) {
481 std::this_thread::sleep_for(std::chrono::milliseconds(100));
482 }
483
484 if (task->GetResponse().GetResponseCode() == 200) {
485 if (curlMethod == method) {
486 NETSTACK_LOGI("TestMethod() = %{public}s OK!", curlMethod);
487 }
488 const std::map<std::string, std::string> &headers = task->GetResponse().GetHeaders();
489 for (const auto &entry : headers) {
490 NETSTACK_LOGI("TestMethod() HEAD = %{public}s : %{public}s", entry.first.c_str(), entry.second.c_str());
491 }
492 } else if (task->GetResponse().GetResponseCode() == 405) {
493 NETSTACK_LOGI("TestMethod() %{public}s don't support, response 405", curlMethod);
494 } else {
495 NETSTACK_LOGI("TestMethod() = failed %{public}s", curlMethod);
496 }
497
498 EXPECT_TRUE(task->onSucceeded_ != nullptr);
499 }
500
501 HWTEST_F(HttpClientTaskTest, OnSuccessTest003, TestSize.Level1)
502 {
503 HttpClientRequest httpReq;
504 std::string url = "http://www.httpbin.org/post";
505 std::string method = "POST";
506 httpReq.SetURL(url);
507 httpReq.SetMethod(method);
508
509 HttpSession &session = HttpSession::GetInstance();
510 auto task = session.CreateTask(httpReq);
__anonc54940500402(const HttpClientRequest &request, const HttpClientResponse &response) 511 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {});
512 task->Start();
513
514 char *curlMethod = nullptr;
515 while (task->GetCurlHandle() == nullptr) {
516 std::this_thread::sleep_for(std::chrono::milliseconds(100));
517 }
518 curl_easy_getinfo(task->GetCurlHandle(), CURLINFO_EFFECTIVE_METHOD, &curlMethod);
519
520 while (task->GetStatus() != TaskStatus::IDLE) {
521 std::this_thread::sleep_for(std::chrono::milliseconds(100));
522 }
523
524 if (task->GetResponse().GetResponseCode() == 200) {
525 if (curlMethod == method) {
526 NETSTACK_LOGI("TestMethod() = %{public}s OK!", curlMethod);
527 }
528 const std::map<std::string, std::string> &headers = task->GetResponse().GetHeaders();
529 for (const auto &entry : headers) {
530 NETSTACK_LOGI("TestMethod() HEAD = %{public}s : %{public}s", entry.first.c_str(), entry.second.c_str());
531 }
532 } else if (task->GetResponse().GetResponseCode() == 405) {
533 NETSTACK_LOGI("TestMethod() %{public}s don't support, response 405", curlMethod);
534 } else {
535 NETSTACK_LOGI("TestMethod() = failed %{public}s", curlMethod);
536 }
537
538 EXPECT_TRUE(task->onSucceeded_ != nullptr);
539 }
540
541 HWTEST_F(HttpClientTaskTest, OnSuccessTest004, TestSize.Level1)
542 {
543 HttpClientRequest httpReq;
544 std::string url = "http://www.httpbin.org/put";
545 std::string method = "PUT";
546 httpReq.SetURL(url);
547 httpReq.SetMethod(method);
548
549 HttpSession &session = HttpSession::GetInstance();
550 auto task = session.CreateTask(httpReq);
__anonc54940500502(const HttpClientRequest &request, const HttpClientResponse &response) 551 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {});
552 task->Start();
553
554 char *curlMethod = nullptr;
555 while (task->GetCurlHandle() == nullptr) {
556 std::this_thread::sleep_for(std::chrono::milliseconds(100));
557 }
558 curl_easy_getinfo(task->GetCurlHandle(), CURLINFO_EFFECTIVE_METHOD, &curlMethod);
559
560 while (task->GetStatus() != TaskStatus::IDLE) {
561 std::this_thread::sleep_for(std::chrono::milliseconds(100));
562 }
563
564 if (task->GetResponse().GetResponseCode() == 200) {
565 if (curlMethod == method) {
566 NETSTACK_LOGI("TestMethod() = %{public}s OK!", curlMethod);
567 }
568 const std::map<std::string, std::string> &headers = task->GetResponse().GetHeaders();
569 for (const auto &entry : headers) {
570 NETSTACK_LOGI("TestMethod() HEAD = %{public}s : %{public}s", entry.first.c_str(), entry.second.c_str());
571 }
572 } else if (task->GetResponse().GetResponseCode() == 405) {
573 NETSTACK_LOGI("TestMethod() %{public}s don't support, response 405", curlMethod);
574 } else {
575 NETSTACK_LOGI("TestMethod() = failed %{public}s", curlMethod);
576 }
577
578 EXPECT_TRUE(task->onSucceeded_ != nullptr);
579 }
580
581 HWTEST_F(HttpClientTaskTest, OnCancelTest001, TestSize.Level1)
582 {
583 HttpClientRequest httpReq;
584 std::string url = "http://www.httpbin.org/get";
585 httpReq.SetURL(url);
586
587 HttpSession &session = HttpSession::GetInstance();
588 auto task = session.CreateTask(httpReq);
589
__anonc54940500602(const HttpClientRequest &request, const HttpClientResponse &response) 590 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {});
591
592 EXPECT_TRUE(task->onCanceled_ != nullptr);
593 }
594
595 HWTEST_F(HttpClientTaskTest, OnFailTest001, TestSize.Level1)
596 {
597 HttpClientRequest httpReq;
598 std::string url = "http://www.httpbin.org/get";
599 httpReq.SetURL(url);
600
601 HttpSession &session = HttpSession::GetInstance();
602 auto task = session.CreateTask(httpReq);
603
604 task->OnFail(
__anonc54940500702(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 605 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {});
606
607 EXPECT_TRUE(task->onFailed_ != nullptr);
608 }
609
610 HWTEST_F(HttpClientTaskTest, OnDataReceiveTest001, TestSize.Level1)
611 {
612 HttpClientRequest httpReq;
613 std::string url = "http://www.httpbin.org/get";
614 httpReq.SetURL(url);
615
616 HttpSession &session = HttpSession::GetInstance();
617 auto task = session.CreateTask(httpReq);
618
__anonc54940500802(const HttpClientRequest &request, const uint8_t *data, size_t length) 619 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {});
620
621 EXPECT_TRUE(task->onDataReceive_ != nullptr);
622 }
623
624 HWTEST_F(HttpClientTaskTest, OnProgressTest001, TestSize.Level1)
625 {
626 HttpClientRequest httpReq;
627 std::string url = "http://www.httpbin.org/get";
628 httpReq.SetURL(url);
629
630 HttpSession &session = HttpSession::GetInstance();
631 auto task = session.CreateTask(httpReq);
632
633 task->OnProgress(
__anonc54940500902(const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) 634 [](const HttpClientRequest &request, u_long dltotal, u_long dlnow, u_long ultotal, u_long ulnow) {});
635
636 EXPECT_TRUE(task->onProgress_ != nullptr);
637 }
638
639 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest001, TestSize.Level1)
640 {
641 HttpClientRequest httpReq;
642 std::string url = "https://www.baidu.com";
643 const char *data = "https://www.baidu.com";
644 httpReq.SetURL(url);
645
646 HttpSession &session = HttpSession::GetInstance();
647 auto task = session.CreateTask(httpReq);
648
649 auto *userData = task.get();
650 size_t size = 10;
651 size_t memBytes = 1;
652
__anonc54940500a02(const HttpClientRequest &request, const uint8_t *data, size_t length) 653 task->OnDataReceive([](const HttpClientRequest &request, const uint8_t *data, size_t length) {});
654 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
655
656 EXPECT_EQ(result, size * memBytes);
657 }
658
659 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest002, TestSize.Level1)
660 {
661 HttpClientRequest httpReq;
662 std::string url = "https://www.baidu.com";
663 const char *data = "https://www.baidu.com";
664 httpReq.SetURL(url);
665
666 HttpSession &session = HttpSession::GetInstance();
667 auto task = session.CreateTask(httpReq);
668
669 auto *userData = task.get();
670 size_t size = 10;
671 size_t memBytes = 1;
672 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
673
674 EXPECT_EQ(result, size * memBytes);
675 }
676
677 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest003, TestSize.Level1)
678 {
679 HttpClientRequest httpReq;
680 std::string url = "http://www.httpbin.org/get";
681 const char *data = "http://www.httpbin.org/get";
682 httpReq.SetURL(url);
683
684 HttpSession &session = HttpSession::GetInstance();
685 auto task = session.CreateTask(httpReq);
686
687 auto *userData = task.get();
688 size_t size = 10;
689 size_t memBytes = 1;
690 task->canceled_ = true;
691 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
692
693 EXPECT_EQ(result, 0);
694 task->canceled_ = false;
695 }
696
697 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest004, TestSize.Level1)
698 {
699 HttpClientRequest httpReq;
700 std::string url = "http://www.httpbin.org/get";
701 const char *data = "http://www.httpbin.org/get";
702 httpReq.SetURL(url);
703
704 HttpSession &session = HttpSession::GetInstance();
705 auto task = session.CreateTask(httpReq);
706
707 auto *userData = task.get();
708 size_t size = 10;
709 size_t memBytes = 1;
710 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
711
712 EXPECT_EQ(result, size * memBytes);
713 }
714
715 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest005, TestSize.Level1)
716 {
717 HttpClientRequest httpReq;
718 std::string url = "http://www.httpbin.org/get";
719 const char *data = "http://www.httpbin.org/get";
720 httpReq.SetURL(url);
721
722 HttpSession &session = HttpSession::GetInstance();
723 auto task = session.CreateTask(httpReq);
724
725 auto *userData = task.get();
726 size_t size = 10;
727 size_t memBytes = 1;
728 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
729
730 EXPECT_EQ(result, size * memBytes);
731 }
732
733 HWTEST_F(HttpClientTaskTest, DataReceiveCallbackTest006, TestSize.Level1)
734 {
735 HttpClientRequest httpReq;
736 std::string url = "http://www.httpbin.org/get";
737 const char *data = "http://www.httpbin.org/get";
738 httpReq.SetURL(url);
739
740 HttpSession &session = HttpSession::GetInstance();
741 auto task = session.CreateTask(httpReq);
742
743 HttpClientResponse resp;
744 resp.result_ = "result1";
745 task->SetResponse(resp);
746
747 auto *userData = task.get();
748 size_t size = 1;
749 size_t memBytes = 1;
750 size_t result = task->DataReceiveCallback(data, size, memBytes, userData);
751
752 EXPECT_EQ(result, size * memBytes);
753 }
754
755 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest001, TestSize.Level1)
756 {
757 HttpClientRequest httpReq;
758 std::string url = "https://www.baidu.com";
759 httpReq.SetURL(url);
760
761 HttpSession &session = HttpSession::GetInstance();
762 auto task = session.CreateTask(httpReq);
763
764 auto *userData = task.get();
765 curl_off_t dltotal = 100;
766 curl_off_t dlnow = 50;
767 curl_off_t ultotal = 200;
768 curl_off_t ulnow = 100;
769 int result;
770
771 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow);
772 EXPECT_EQ(result, 0);
773 }
774
775 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest002, TestSize.Level1)
776 {
777 HttpClientRequest httpReq;
778 std::string url = "https://www.baidu.com";
779 httpReq.SetURL(url);
780
781 HttpSession &session = HttpSession::GetInstance();
782 auto task = session.CreateTask(httpReq);
783
784 auto *userData = task.get();
785 curl_off_t dltotal = 100;
786 curl_off_t dlnow = 50;
787 curl_off_t ultotal = 200;
788 curl_off_t ulnow = 100;
789 int result;
790
791 task->Cancel();
792 result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow);
793 EXPECT_EQ(result, CURLE_ABORTED_BY_CALLBACK);
794 }
795
796 HWTEST_F(HttpClientTaskTest, ProgressCallbackTest003, TestSize.Level1)
797 {
798 HttpClientRequest httpReq;
799 std::string url = "https://www.baidu.com";
800 httpReq.SetURL(url);
801
802 HttpSession &session = HttpSession::GetInstance();
803 auto task = session.CreateTask(httpReq);
804
805 auto *userData = task.get();
806 curl_off_t dltotal = 100;
807 curl_off_t dlnow = 50;
808 curl_off_t ultotal = 200;
809 curl_off_t ulnow = 100;
810
811 int result = task->ProgressCallback(userData, dltotal, dlnow, ultotal, ulnow);
812 EXPECT_EQ(result, 0);
813 }
814
815 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest001, TestSize.Level1)
816 {
817 HttpClientRequest httpReq;
818 std::string url = "https://www.baidu.com";
819 httpReq.SetURL(url);
820
821 HttpSession &session = HttpSession::GetInstance();
822 auto task = session.CreateTask(httpReq);
823
824 auto *userData = task.get();
825 const char *data = "Test Header";
826 size_t size = 5;
827 size_t memBytes = 2;
828 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
829 EXPECT_EQ(result, size * memBytes);
830 }
831
832 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest002, TestSize.Level1)
833 {
834 HttpClientRequest httpReq;
835 std::string url = "https://www.baidu.com";
836 httpReq.SetURL(url);
837
838 HttpSession &session = HttpSession::GetInstance();
839 auto task = session.CreateTask(httpReq);
840
841 auto *userData = task.get();
842
843 const char *data = "Test Header";
844 size_t size = HttpConstant::MAX_DATA_LIMIT + 1;
845 size_t memBytes = 1;
846 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
847 EXPECT_EQ(result, 0);
848 }
849
850 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest003, TestSize.Level1)
851 {
852 HttpClientRequest httpReq;
853 std::string url = "http://www.httpbin.org/get";
854 httpReq.SetURL(url);
855
856 HttpSession &session = HttpSession::GetInstance();
857 auto task = session.CreateTask(httpReq);
858
859 auto *userData = task.get();
860
861 const char *data = "Test Header";
862 size_t size = 5;
863 size_t memBytes = 2;
864 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
865 EXPECT_EQ(result, size * memBytes);
866 }
867
868 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest004, TestSize.Level1)
869 {
870 HttpClientRequest httpReq;
871 std::string url = "http://www.httpbin.org/get";
872 httpReq.SetURL(url);
873
874 HttpSession &session = HttpSession::GetInstance();
875 auto task = session.CreateTask(httpReq);
876 task->canceled_ = true;
877
878 HttpClientResponse resp;
879 const char *realHead = "test:data\r\n\r\n";
880 resp.AppendHeader(realHead, strlen(realHead));
881 task->SetResponse(resp);
882
883 auto *userData = task.get();
884 const char *data = "Test Header";
885 size_t size = 5;
886 size_t memBytes = 2;
887 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
888 EXPECT_TRUE(resp.headers_.empty());
889 EXPECT_EQ(result, size * memBytes);
890 }
891
892 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest005, TestSize.Level1)
893 {
894 HttpClientRequest httpReq;
895 std::string url = "http://www.httpbin.org/get";
896 httpReq.SetURL(url);
897
898 HttpSession &session = HttpSession::GetInstance();
899 auto task = session.CreateTask(httpReq);
900 task->onHeadersReceive_ = testCallbackconst;
901
902 HttpClientResponse resp;
903 const char *errorHead = "test:data\r\n";
904 resp.AppendHeader(errorHead, strlen(errorHead));
905 task->SetResponse(resp);
906
907 auto *userData = task.get();
908 const char *data = "Test Header";
909 size_t size = 5;
910 size_t memBytes = 2;
911 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
912 EXPECT_TRUE(resp.headers_.empty());
913 EXPECT_EQ(result, size * memBytes);
914 }
915
916 HWTEST_F(HttpClientTaskTest, HeaderReceiveCallbackTest006, TestSize.Level1)
917 {
918 HttpClientRequest httpReq;
919 std::string url = "http://www.httpbin.org/get";
920 httpReq.SetURL(url);
921
922 HttpSession &session = HttpSession::GetInstance();
923 auto task = session.CreateTask(httpReq);
924
925 HttpClientResponse resp;
926 const char *realHead = "test:data\r\n\r\n";
927 resp.AppendHeader(realHead, strlen(realHead));
928 task->SetResponse(resp);
929
930 auto *userData = task.get();
931 const char *data = "Test Header";
932 size_t size = 5;
933 size_t memBytes = 2;
934 size_t result = task->HeaderReceiveCallback(data, size, memBytes, userData);
935 EXPECT_TRUE(resp.headers_.empty());
936 EXPECT_EQ(result, size * memBytes);
937 }
938
939 HWTEST_F(HttpClientTaskTest, ProcessResponseCodeTest001, TestSize.Level1)
940 {
941 HttpClientRequest httpReq;
942 std::string url = "https://www.baidu.com";
943 httpReq.SetURL(url);
944
945 HttpSession &session = HttpSession::GetInstance();
946 auto task = session.CreateTask(httpReq);
947 task->Start();
948
949 while (task->GetStatus() != TaskStatus::IDLE) {
950 std::this_thread::sleep_for(std::chrono::milliseconds(100));
951 }
952 EXPECT_TRUE(task->ProcessResponseCode());
953 }
954
955 HWTEST_F(HttpClientTaskTest, ProcessResponseTest001, TestSize.Level1)
956 {
957 HttpClientRequest httpReq;
958 std::string url = "https://www.baidu.com";
959 httpReq.SetURL(url);
960
961 HttpSession &session = HttpSession::GetInstance();
962 auto task = session.CreateTask(httpReq);
963
964 CURLMsg msg;
965 msg.data.result = CURLE_ABORTED_BY_CALLBACK;
__anonc54940500b02(const HttpClientRequest &request, const HttpClientResponse &response) 966 task->OnCancel([](const HttpClientRequest &request, const HttpClientResponse &response) {});
967 task->ProcessResponse(&msg);
968 EXPECT_TRUE(task->onCanceled_);
969
970 msg.data.result = CURLE_FAILED_INIT;
971 task->OnFail(
__anonc54940500c02(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 972 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {});
973 task->ProcessResponse(&msg);
974 EXPECT_TRUE(task->onFailed_);
975
976 msg.data.result = CURLE_OK;
977 task->response_.SetResponseCode(ResponseCode::NOT_MODIFIED);
__anonc54940500d02(const HttpClientRequest &request, const HttpClientResponse &response) 978 task->OnSuccess([task](const HttpClientRequest &request, const HttpClientResponse &response) {});
979 task->ProcessResponse(&msg);
980 EXPECT_TRUE(task->onSucceeded_);
981
982 task->curlHandle_ = nullptr;
983 task->OnFail(
__anonc54940500e02(const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) 984 [](const HttpClientRequest &request, const HttpClientResponse &response, const HttpClientError &error) {});
985 task->ProcessResponse(&msg);
986 EXPECT_TRUE(task->onFailed_);
987 }
988
989 HWTEST_F(HttpClientTaskTest, SetResponseTest001, TestSize.Level1)
990 {
991 HttpClientRequest httpReq;
992 std::string url = "https://www.baidu.com";
993 httpReq.SetURL(url);
994
995 HttpSession &session = HttpSession::GetInstance();
996 auto task = session.CreateTask(httpReq);
997
998 HttpClientResponse resp;
999 resp.result_ = "result1";
1000 task->SetResponse(resp);
1001
1002 EXPECT_EQ(task->response_.result_, "result1");
1003 }
1004
1005 HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest001, TestSize.Level1)
1006 {
1007 HttpClientRequest httpReq;
1008
1009 std::string url = "http://www.httpbin.org/get";
1010 httpReq.SetURL(url);
1011 httpReq.SetHttpProxyType(USE_SPECIFIED);
1012 HttpProxy proxy;
1013 proxy.host = "192.168.147.60";
1014 proxy.port = 8888;
1015 proxy.exclusions = "www.httpbin.org";
1016 proxy.tunnel = false;
1017 httpReq.SetHttpProxy(proxy);
1018
1019 HttpSession &session = HttpSession::GetInstance();
1020 auto task = session.CreateTask(httpReq);
1021
1022 std::string host;
1023 std::string exclusions;
1024 int32_t port = 0;
1025 bool tunnel = false;
1026 task->GetHttpProxyInfo(host, port, exclusions, tunnel);
1027
1028 EXPECT_EQ(host, "192.168.147.60");
1029 EXPECT_EQ(port, 8888);
1030 EXPECT_EQ(exclusions, "www.httpbin.org");
1031 EXPECT_FALSE(tunnel);
1032 }
1033
1034 HWTEST_F(HttpClientTaskTest, GetHttpProxyInfoTest002, TestSize.Level1)
1035 {
1036 HttpClientRequest httpReq;
1037
1038 std::string url = "http://www.httpbin.org/get";
1039 httpReq.SetURL(url);
1040 httpReq.SetHttpProxyType(NOT_USE);
1041 HttpProxy proxy;
1042 proxy.host = "192.168.147.60";
1043 proxy.port = 8888;
1044 proxy.exclusions = "www.httpbin.org";
1045 proxy.tunnel = false;
1046 httpReq.SetHttpProxy(proxy);
1047
1048 HttpSession &session = HttpSession::GetInstance();
1049 auto task = session.CreateTask(httpReq);
1050
1051 std::string host;
1052 std::string exclusions;
1053 int32_t port = 0;
1054 bool tunnel = false;
1055 task->GetHttpProxyInfo(host, port, exclusions, tunnel);
1056
1057 EXPECT_EQ(host, "");
1058 EXPECT_EQ(port, 0);
1059 EXPECT_EQ(exclusions, "");
1060 EXPECT_FALSE(tunnel);
1061 }
1062
1063 HWTEST_F(HttpClientTaskTest, SslCtxFunctionTest001, TestSize.Level1)
1064 {
1065 CURL *curl = nullptr;
1066 SSL_CTX *sslCtx = nullptr;
1067 HttpClientRequest httpReq;
1068 HttpSession &session = HttpSession::GetInstance();
1069 auto task = session.CreateTask(httpReq);
1070 EXPECT_EQ(task->SslCtxFunction(curl, sslCtx), CURLE_SSL_CERTPROBLEM);
1071 }
1072
1073 HWTEST_F(HttpClientTaskTest, SslCtxFunctionTest002, TestSize.Level1)
1074 {
1075 CURL *curl = nullptr;
1076 SSL_CTX *sslCtx = SSL_CTX_new(TLS_client_method());
1077 HttpClientRequest httpReq;
1078 HttpSession &session = HttpSession::GetInstance();
1079 auto task = session.CreateTask(httpReq);
1080 EXPECT_EQ(task->SslCtxFunction(curl, sslCtx), CURLE_OK);
1081 SSL_CTX_free(sslCtx);
1082 }
1083
1084 HWTEST_F(HttpClientTaskTest, SetStatus001, TestSize.Level1)
1085 {
1086 HttpClientRequest httpReq;
1087 std::string url = "http://www.httpbin.org/get";
1088 httpReq.SetURL(url);
1089
1090 HttpSession &session = HttpSession::GetInstance();
1091 auto task = session.CreateTask(httpReq);
1092
1093 task->SetStatus(RUNNING);
1094 EXPECT_EQ(RUNNING, task->GetStatus());
1095 }
1096
1097 HWTEST_F(HttpClientTaskTest, GetStatusTest001, TestSize.Level1)
1098 {
1099 HttpClientRequest httpReq;
1100 std::string url = "http://www.httpbin.org/get";
1101 httpReq.SetURL(url);
1102
1103 HttpSession &session = HttpSession::GetInstance();
1104 auto task = session.CreateTask(httpReq);
1105
1106 EXPECT_EQ(IDLE, task->GetStatus());
1107 }
1108
1109 HWTEST_F(HttpClientTaskTest, GetStatusTest002, TestSize.Level1)
1110 {
1111 HttpClientRequest httpReq;
1112 std::string url = "https://www.baidu.com";
1113 httpReq.SetURL(url);
1114
1115 HttpSession &session = HttpSession::GetInstance();
1116 auto task = session.CreateTask(httpReq);
1117
1118 task->SetStatus(TaskStatus::RUNNING);
1119
1120 EXPECT_EQ(task->GetStatus(), RUNNING);
1121 }
1122
1123 HWTEST_F(HttpClientTaskTest, StartTest001, TestSize.Level1)
1124 {
1125 HttpClientRequest httpReq;
1126 std::string url = "http://www.baidu.com";
1127 httpReq.SetURL(url);
1128
1129 HttpSession &session = HttpSession::GetInstance();
1130 auto task = session.CreateTask(httpReq);
1131
1132 task->SetStatus(TaskStatus::RUNNING);
1133 bool result = task->Start();
1134 EXPECT_FALSE(result);
1135 }
1136
1137 HWTEST_F(HttpClientTaskTest, StartTest002, TestSize.Level1)
1138 {
1139 HttpClientRequest httpReq;
1140 std::string url = "http://www.baidu.com";
1141 httpReq.SetURL(url);
1142
1143 HttpSession &session = HttpSession::GetInstance();
1144 auto task = session.CreateTask(httpReq);
1145
1146 task->error_.SetErrorCode(HttpErrorCode::HTTP_UNSUPPORTED_PROTOCOL);
1147 bool result = task->Start();
1148 EXPECT_FALSE(result);
1149 }
1150
1151 HWTEST_F(HttpClientTaskTest, StartTest003, TestSize.Level1)
1152 {
1153 HttpClientRequest httpReq;
1154 std::string url = "http://www.baidu.com";
1155 httpReq.SetURL(url);
1156
1157 HttpSession &session = HttpSession::GetInstance();
1158 auto task = session.CreateTask(httpReq);
1159
1160 bool result = task->Start();
1161 EXPECT_TRUE(result);
1162 }
1163
1164 HWTEST_F(HttpClientTaskTest, StartTest004, TestSize.Level1)
1165 {
1166 HttpClientRequest httpReq;
1167 std::string url = "https://www.baidu.com";
1168 httpReq.SetURL(url);
1169
1170 HttpSession &session = HttpSession::GetInstance();
1171 auto task = session.CreateTask(httpReq);
1172
1173 task->error_.SetErrorCode(HttpErrorCode::HTTP_UNSUPPORTED_PROTOCOL);
1174 bool result = task->Start();
1175 EXPECT_FALSE(result);
1176 }
1177
1178 HWTEST_F(HttpClientTaskTest, ProcessCookieTest001, TestSize.Level1)
1179 {
1180 HttpClientRequest httpReq;
1181 std::string url = "http://www.httpbin.org/cookies/set/name1/value1";
1182 httpReq.SetURL(url);
1183 httpReq.SetHeader("content-type", "text/plain");
1184 HttpSession &session = HttpSession::GetInstance();
1185 auto task = session.CreateTask(httpReq);
1186 task->Start();
1187
1188 while (task->GetStatus() != TaskStatus::IDLE) {
1189 std::this_thread::sleep_for(std::chrono::milliseconds(5));
1190 }
1191 auto ret = task->GetResponse().GetResponseCode();
1192 EXPECT_TRUE(ret == ResponseCode::OK || ret == 0);
1193 }
1194
1195 HWTEST_F(HttpClientTaskTest, ProcessCookieTest002, TestSize.Level1)
1196 {
1197 HttpClientRequest httpReq;
1198 HttpSession &session = HttpSession::GetInstance();
1199 auto task = session.CreateTask(httpReq);
1200 task->ProcessCookie(task->curlHandle_);
1201 EXPECT_NE(task->curlHandle_, nullptr);
1202 }
1203
1204 HWTEST_F(HttpClientTaskTest, GetTimingFromCurlTest001, TestSize.Level1)
1205 {
1206 HttpClientRequest httpReq;
1207 HttpSession &session = HttpSession::GetInstance();
1208 auto task = session.CreateTask(httpReq);
1209 task->curlHandle_ = nullptr;
1210 // CURLINFO info;
1211 auto ret = task->GetTimingFromCurl(task->curlHandle_, CURLINFO_TOTAL_TIME_T);
1212 EXPECT_EQ(ret, 0);
1213 }
1214
1215 HWTEST_F(HttpClientTaskTest, DumpHttpPerformanceTest001, TestSize.Level1)
1216 {
1217 HttpClientRequest httpReq;
1218 HttpSession &session = HttpSession::GetInstance();
1219 auto task = session.CreateTask(httpReq);
1220 task->DumpHttpPerformance();
1221 EXPECT_NE(task->curlHandle_, nullptr);
1222 }
1223
1224 HWTEST_F(HttpClientTaskTest, CancelTest001, TestSize.Level1)
1225 {
1226 HttpClientRequest httpReq;
1227 std::string url = "https://www.baidu.com";
1228 httpReq.SetURL(url);
1229
1230 HttpSession &session = HttpSession::GetInstance();
1231 auto task = session.CreateTask(httpReq);
1232
1233 task->Cancel();
1234 EXPECT_TRUE(task->canceled_);
1235 }
1236
1237 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption001, TestSize.Level1)
1238 {
1239 HttpClientRequest httpReq;
1240 std::string url = "https://www.baidu.com";
1241 httpReq.SetURL(url);
1242
1243 HttpSession &session = HttpSession::GetInstance();
1244 auto task = session.CreateTask(httpReq);
1245
1246 bool result = task->SetServerSSLCertOption(task->curlHandle_);
1247 EXPECT_TRUE(result);
1248 }
1249
1250 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption002, TestSize.Level1)
1251 {
1252 HttpClientRequest httpReq;
1253 std::string url = "";
1254 httpReq.SetURL(url);
1255
1256 HttpSession &session = HttpSession::GetInstance();
1257 auto task = session.CreateTask(httpReq);
1258
1259 bool result = task->SetServerSSLCertOption(task->curlHandle_);
1260 EXPECT_TRUE(result);
1261 }
1262
1263 #if HAS_NETMANAGER_BASE
1264 HWTEST_F(HttpClientTaskTest, SetServerSSLCertOption_ShouldReturnTrue_WhenGetPinSetForHostNameReturnsZeroAndPinsIsEmpty,
1265 TestSize.Level2)
1266 {
1267 auto configInstance = OHOS::NetManagerStandard::NetworkSecurityConfig::GetInstance();
1268 OHOS::NetManagerStandard::DomainConfig config = {};
1269 OHOS::NetManagerStandard::Domain domain;
1270 domain.domainName_ = "https://www.example.com";
1271 domain.includeSubDomains_ = false;
1272 config.domains_.push_back(domain);
1273 OHOS::NetManagerStandard::Pin pin;
1274 pin.digestAlgorithm_ = "TEST";
1275 pin.digest_ = "TEST";
1276 config.pinSet_.pins_.push_back(pin);
1277 configInstance.domainConfigs_.push_back(config);
1278 HttpClientRequest httpReq;
1279 std::string url = "https://www.example.com";
1280 httpReq.SetURL(url);
1281 HttpSession &session = HttpSession::GetInstance();
1282 auto task = session.CreateTask(httpReq);
1283 EXPECT_TRUE(task->SetServerSSLCertOption(task->curlHandle_));
1284 }
1285 #endif
1286
1287 class MockCurl {
1288 public:
1289 MOCK_METHOD0(easy_init, CURL *());
1290 };
1291
1292 HWTEST_F(HttpClientTaskTest, HttpClientTask_ShouldNotCreate_WhenCurlInitFails, TestSize.Level0)
1293 {
1294 MockCurl mockCurl;
1295 ON_CALL(mockCurl, easy_init).WillByDefault(Return(nullptr));
1296
1297 HttpClientRequest request;
1298 HttpClientTask httpClientTask(request);
1299 ASSERT_EQ(httpClientTask.GetStatus(), IDLE);
1300 ASSERT_EQ(httpClientTask.GetType(), DEFAULT);
1301 ASSERT_EQ(httpClientTask.canceled_, false);
1302
1303 HttpSession &session = HttpSession::GetInstance();
1304 auto httpClientTask2 = session.CreateTask(request, UPLOAD, "testFakePath");
1305 ASSERT_EQ(httpClientTask2->GetType(), UPLOAD);
1306 }
1307
1308 HWTEST_F(HttpClientTaskTest, ProcessRequestTest001, TestSize.Level1)
1309 {
1310 HttpClientRequest httpReq;
1311 std::string url = "http://www.httpbin.org/get";
1312 httpReq.SetURL(url);
1313 httpReq.SetHeader("content-type", "application/json");
1314
1315 HttpSession &session = HttpSession::GetInstance();
1316 auto task = session.CreateTask(httpReq);
1317 task->Start();
1318
1319 while (task->GetStatus() != TaskStatus::IDLE) {
1320 std::this_thread::sleep_for(std::chrono::milliseconds(5));
1321 }
1322 const HttpClientRequest &request = task->GetRequest();
1323 EXPECT_EQ(request.GetURL(), url);
1324 }
1325
1326 HWTEST_F(HttpClientTaskTest, ProcessErrorTest001, TestSize.Level1)
1327 {
1328 HttpClientRequest httpReq;
1329 std::string url = "http://nonexistenturl:8080";
1330 httpReq.SetURL(url);
1331 httpReq.SetHeader("content-type", "text/plain");
1332
1333 HttpSession &session = HttpSession::GetInstance();
1334 auto task = session.CreateTask(httpReq);
1335 task->Start();
1336
1337 while (task->GetStatus() != TaskStatus::IDLE) {
1338 std::this_thread::sleep_for(std::chrono::milliseconds(5));
1339 }
1340 const HttpClientError &error = task->GetError();
1341 EXPECT_NE(error.GetErrorCode(), 0);
1342 EXPECT_FALSE(error.GetErrorMessage().empty());
1343 }
1344 } // namespace
1345