• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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