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