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 "http_client_constant.h"
20#include "netstack_log.h"
21
22#define private public
23#include "http_client_response.h"
24
25using namespace OHOS::NetStack::HttpClient;
26
27class HttpClientResponseTest : public testing::Test {
28public:
29    static void SetUpTestCase() {}
30
31    static void TearDownTestCase() {}
32
33    virtual void SetUp() {}
34
35    virtual void TearDown() {}
36};
37
38namespace {
39using namespace std;
40using namespace testing::ext;
41
42HWTEST_F(HttpClientResponseTest, GetResponseCodeTest001, TestSize.Level1)
43{
44    HttpClientResponse req;
45
46    int responseTest = req.GetResponseCode();
47    EXPECT_EQ(responseTest, ResponseCode::NONE);
48}
49
50HWTEST_F(HttpClientResponseTest, GetHeaderTest001, TestSize.Level1)
51{
52    HttpClientResponse req;
53
54    string header = req.GetHeader();
55    EXPECT_EQ(header, "");
56}
57
58HWTEST_F(HttpClientResponseTest, GetRequestTimeTest001, TestSize.Level1)
59{
60    HttpClientResponse req;
61
62    string requestTime = req.GetRequestTime();
63    EXPECT_EQ(requestTime, "");
64}
65
66HWTEST_F(HttpClientResponseTest, GetResponseTimeTest001, TestSize.Level1)
67{
68    HttpClientResponse req;
69
70    string responseTime = req.GetResponseTime();
71    EXPECT_EQ(responseTime, "");
72}
73
74HWTEST_F(HttpClientResponseTest, SetRequestTimeTest001, TestSize.Level1)
75{
76    HttpClientResponse req;
77
78    req.SetRequestTime("10");
79    string requestTime = req.GetRequestTime();
80    EXPECT_EQ(requestTime, "10");
81}
82
83HWTEST_F(HttpClientResponseTest, SetResponseTimeTest001, TestSize.Level1)
84{
85    HttpClientResponse req;
86
87    req.SetResponseTime("10");
88    string responseTime = req.GetResponseTime();
89    EXPECT_EQ(responseTime, "10");
90}
91
92HWTEST_F(HttpClientResponseTest, AppendHeaderTest001, TestSize.Level1)
93{
94    HttpClientResponse req;
95    std::string add = "test";
96    req.AppendHeader(add.data(), add.length());
97    string header = req.GetHeader();
98    EXPECT_EQ(header, "test");
99}
100
101HWTEST_F(HttpClientResponseTest, SetResponseCodeTest001, TestSize.Level1)
102{
103    HttpClientResponse req;
104
105    req.SetResponseCode(ResponseCode::MULT_CHOICE);
106    int responseTest = req.GetResponseCode();
107    EXPECT_EQ(responseTest, ResponseCode::MULT_CHOICE);
108}
109
110HWTEST_F(HttpClientResponseTest, ResponseParseHeader001, TestSize.Level1)
111{
112    HttpClientResponse req;
113    const char *emptyHead = " \r\n";
114    const char *errHead = "test1 data1\r\n";
115    const char *realHead = "test:data\r\n";
116    req.AppendHeader(emptyHead, strlen(emptyHead));
117    req.AppendHeader(errHead, strlen(errHead));
118    req.AppendHeader(realHead, strlen(realHead));
119
120    req.ParseHeaders();
121    auto headers = req.GetHeaders();
122    std::string ret;
123    std::for_each(headers.begin(), headers.end(), [&ret](const auto &item) {
124        if (!item.first.empty() && !item.second.empty()) {
125            ret += item.first + ":" + item.second + "\r\n";
126        }
127    });
128    EXPECT_EQ(realHead, ret);
129}
130
131HWTEST_F(HttpClientResponseTest, ResponseAppendCookie001, TestSize.Level1)
132{
133    HttpClientResponse req;
134    const char *emptyHead = " \r\n";
135    const char *errHead = "test data\r\n";
136    const char *realHead = "test:data\r\n";
137    string cookies = "";
138    cookies.append(emptyHead);
139    cookies.append(errHead);
140    cookies.append(realHead);
141    req.AppendCookies(emptyHead, strlen(emptyHead));
142    req.AppendCookies(errHead, strlen(errHead));
143    req.AppendCookies(realHead, strlen(realHead));
144    auto ret = req.GetCookies();
145    EXPECT_EQ(cookies, ret);
146}
147
148HWTEST_F(HttpClientResponseTest, ResponseSetCookie001, TestSize.Level1)
149{
150    HttpClientResponse req;
151    const char *realHead = "test:data\r\n";
152    req.SetCookies(realHead);
153    auto result = req.GetCookies();
154    EXPECT_EQ(realHead, result);
155}
156
157HWTEST_F(HttpClientResponseTest, ResponseSetWarning001, TestSize.Level1)
158{
159    HttpClientResponse req;
160    const char *realHead = "test:data";
161    const char *warningText = "Warning";
162    req.SetWarning(realHead);
163    auto headers = req.GetHeaders();
164    for (auto &item: headers) {
165        auto key = item.first.c_str();
166        if (strcmp(warningText, key) == 0) {
167            EXPECT_EQ(realHead, item.second);
168            return;
169        }
170    }
171    EXPECT_FALSE(true);
172}
173
174HWTEST_F(HttpClientResponseTest, ResponseSetRawHeader001, TestSize.Level1)
175{
176    HttpClientResponse req;
177    const char *realHead = "test:data\r\n";
178    req.SetRawHeader(realHead);
179    auto header = req.GetHeader();
180    EXPECT_EQ(realHead, header);
181}
182} // namespace