1 /*
2  * Copyright (c) 2021-2022 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 #ifndef COMMUNICATIONNETSTACK_HTTP_CLIENT_TASK_H
17 #define COMMUNICATIONNETSTACK_HTTP_CLIENT_TASK_H
18 #include <memory>
19 #include <functional>
20 #include "gmock/gmock.h"
21 #include "http_client_error.h"
22 #include "http_client_request.h"
23 #include "http_client_response.h"
24 
25 namespace OHOS::NetStack::HttpClient {
26 #define DATA_BLOCK (10 * 1024)
27 class HttpClientTask : public std::enable_shared_from_this<HttpClientTask> {
28 public:
HttpClientTask(const HttpClientRequest & request)29     explicit HttpClientTask(const HttpClientRequest& request)
30     {
31         GTEST_LOG_(INFO) << "MOCK HttpClientTask";
32         request_ = request;
33     };
~HttpClientTask()34     virtual ~HttpClientTask(){};
Start()35     virtual bool Start()
36     {
37         if (success_) {
38             if (onSucceeded_) {
39                 onSucceeded_(request_, response_);
40             }
41         }
42         if (failed_) {
43             if (onFailed_) {
44                 onFailed_(request_, response_, error_);
45             }
46         }
47         if (receive_) {
48             if (onDataReceive_) {
49                 uint8_t* fake;
50                 onDataReceive_(request_, fake, DATA_BLOCK);
51                 onDataReceive_(request_, fake, DATA_BLOCK);
52                 onDataReceive_(request_, fake, DATA_BLOCK);
53             }
54         }
55         if (cancel_) {
56             if (onCanceled_) {
57                 onCanceled_(request_, response_);
58             }
59         }
60         return true;
61     };
Cancel()62     virtual void Cancel()
63     {
64         GTEST_LOG_(INFO) << "MOCK Cancel";
65         if (onCanceled_) {
66             onCanceled_(request_, response_);
67         }
68     };
OnSuccess(const std::function<void (const HttpClientRequest & request,const HttpClientResponse & response)> & onSucceeded)69     virtual void OnSuccess(
70         const std::function<void(const HttpClientRequest& request, const HttpClientResponse& response)>& onSucceeded)
71     {
72         GTEST_LOG_(INFO) << "MOCK OnSuccess";
73         onSucceeded_ = onSucceeded;
74     };
75 
OnCancel(const std::function<void (const HttpClientRequest & request,const HttpClientResponse & response)> & onCanceled)76     virtual void OnCancel(
77         const std::function<void(const HttpClientRequest& request, const HttpClientResponse& response)>& onCanceled)
78     {
79         GTEST_LOG_(INFO) << "MOCK OnCancel";
80         onCanceled_ = onCanceled;
81     };
82 
OnFail(const std::function<void (const HttpClientRequest & request,const HttpClientResponse & response,const HttpClientError & error)> & onFailed)83     virtual void OnFail(const std::function<void(const HttpClientRequest& request, const HttpClientResponse& response,
84             const HttpClientError& error)>& onFailed)
85     {
86         GTEST_LOG_(INFO) << "MOCK OnFail";
87         onFailed_ = onFailed;
88     };
89 
OnDataReceive(const std::function<void (const HttpClientRequest & request,const uint8_t * data,size_t length)> & onDataReceive)90     virtual void OnDataReceive(
91         const std::function<void(const HttpClientRequest& request, const uint8_t* data, size_t length)>& onDataReceive)
92     {
93         GTEST_LOG_(INFO) << "MOCK OnDataReceive";
94         onDataReceive_ = onDataReceive;
95     };
SetResponse(const HttpClientResponse & response)96     virtual void SetResponse(const HttpClientResponse& response)
97     {
98         response_ = response;
99     };
100     static void MockStatus(bool success = true, bool failed = false, bool receive = false, bool cancel = false)
101     {
102         success_ = success;
103         failed_ = failed;
104         receive_ = receive;
105         cancel_ = cancel;
106     }
107 
MockResponse(HttpClientResponse & response)108     static void MockResponse(HttpClientResponse& response)
109     {
110         response_ = response;
111     }
112 
113 private:
114     inline static bool success_ = true;
115     inline static bool failed_ = false;
116     inline static bool receive_ = false;
117     inline static bool cancel_ = false;
118     HttpClientRequest request_;
119     inline static HttpClientResponse response_;
120     HttpClientError error_;
121     std::function<void(const HttpClientRequest& request, const HttpClientResponse& response)> onSucceeded_;
122     std::function<void(const HttpClientRequest& request, const HttpClientResponse& response)> onCanceled_;
123     std::function<void(
124         const HttpClientRequest& request, const HttpClientResponse& response, const HttpClientError& error)>
125         onFailed_;
126     std::function<void(const HttpClientRequest& request, const uint8_t* data, size_t length)> onDataReceive_;
127 };
128 }
129 
130 #endif  // APP_DOMAIN_VERIFY_HTTP_CLIENT_TASK_H
131