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