• 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 #define private public
17 
18 #include <gtest/gtest.h>
19 #include "netstack_hisysevent.h"
20 
21 namespace OHOS::NetStack {
22 
23 namespace {
24 using namespace testing::ext;
25 const uint32_t REPORT_INTERVAL = 3 * 60;
26 }
27 
28 class NetStackHiSysEventTest : public testing::Test {
29 public:
SetUpTestCase()30     static void SetUpTestCase() {}
31 
TearDownTestCase()32     static void TearDownTestCase() {}
33 
SetUp()34     virtual void SetUp() {}
35 
TearDown()36     virtual void TearDown() {}
37 };
38 
39 HWTEST_F(NetStackHiSysEventTest, IsSuccess_ShouldReturnTrue_WhenResponseCodeIsValid, TestSize.Level0)
40 {
41     HttpPerfInfo httpPerfInfo;
42     httpPerfInfo.responseCode = 200;
43     ASSERT_TRUE(httpPerfInfo.IsSuccess());
44 }
45 
46 HWTEST_F(NetStackHiSysEventTest, IsSuccess_ShouldReturnFalse_WhenResponseCodeIsLessThanValidRange, TestSize.Level0)
47 {
48     HttpPerfInfo httpPerfInfo;
49     httpPerfInfo.responseCode = 199;
50     ASSERT_FALSE(httpPerfInfo.IsSuccess());
51 }
52 
53 HWTEST_F(NetStackHiSysEventTest, IsSuccess_ShouldReturnFalse_WhenResponseCodeIsGreaterThanValidRange, TestSize.Level0)
54 {
55     HttpPerfInfo httpPerfInfo;
56     httpPerfInfo.responseCode = 400;
57     ASSERT_FALSE(httpPerfInfo.IsSuccess());
58 }
59 
60 HWTEST_F(NetStackHiSysEventTest, IsValid_ShouldReturnTrue_WhenValidFlagIsTrue, TestSize.Level0)
61 {
62     EventReport::GetInstance().validFlag = true;
63     ASSERT_EQ(EventReport::GetInstance().IsValid(), true);
64 }
65 
66 HWTEST_F(NetStackHiSysEventTest, IsValid_ShouldReturnFalse_WhenValidFlagIsFalse, TestSize.Level0)
67 {
68     EventReport::GetInstance().validFlag = false;
69     ASSERT_EQ(EventReport::GetInstance().IsValid(), false);
70 }
71 
72 HWTEST_F(NetStackHiSysEventTest, ProcessHttpPerfHiSysevent_01, TestSize.Level0)
73 {
74     HttpPerfInfo httpPerfInfo;
75     httpPerfInfo.responseCode = 200;
76     httpPerfInfo.totalTime = 0.0;
77     EventReport::GetInstance().ProcessHttpPerfHiSysevent(httpPerfInfo);
78     EXPECT_EQ(EventReport::GetInstance().eventInfo.successCount, 0);
79 }
80 
81 HWTEST_F(NetStackHiSysEventTest, ProcessHttpPerfHiSysevent_02, TestSize.Level0)
82 {
83     HttpPerfInfo httpPerfInfo;
84     httpPerfInfo.responseCode = 200;
85     httpPerfInfo.totalTime = 100.0;
86     EventReport::GetInstance().ProcessHttpPerfHiSysevent(httpPerfInfo);
87     EXPECT_EQ(EventReport::GetInstance().eventInfo.successCount, 1);
88 }
89 
90 HWTEST_F(NetStackHiSysEventTest, ProcessHttpPerfHiSysevent_03, TestSize.Level0)
91 {
92     HttpPerfInfo httpPerfInfo;
93     httpPerfInfo.responseCode = 200;
94     httpPerfInfo.totalTime = 100.0;
95     EventReport::GetInstance().reportTime = time(0) - REPORT_INTERVAL - 1;
96     EventReport::GetInstance().ProcessHttpPerfHiSysevent(httpPerfInfo);
97     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalTime, 0);
98 }
99 
100 HWTEST_F(NetStackHiSysEventTest, ProcessHttpPerfHiSysevent_04, TestSize.Level0)
101 {
102     HttpPerfInfo httpPerfInfo;
103     httpPerfInfo.responseCode = 200;
104     httpPerfInfo.totalTime = 100.0;
105     httpPerfInfo.version = "1";
106     uint32_t preSuccessCount = EventReport::GetInstance().eventInfo.successCount;
107     EventReport::GetInstance().reportTime = time(0) - REPORT_INTERVAL + 1;
108     EventReport::GetInstance().ProcessHttpPerfHiSysevent(httpPerfInfo);
109     EXPECT_EQ(EventReport::GetInstance().eventInfo.successCount, preSuccessCount + 1);
110 }
111 
112 HWTEST_F(NetStackHiSysEventTest, ResetCounters_ShouldResetAllCountersToZero_WhenCalled, TestSize.Level0)
113 {
114     EventReport::GetInstance().eventInfo.totalCount = 10;
115     EventReport::GetInstance().eventInfo.successCount = 5;
116     EventReport::GetInstance().eventInfo.totalTime = 10.0;
117     EventReport::GetInstance().eventInfo.totalRate = 5.0;
118     EventReport::GetInstance().eventInfo.totalDnsTime = 2.0;
119     EventReport::GetInstance().eventInfo.totalTlsTime = 3.0;
120     EventReport::GetInstance().eventInfo.totalTcpTime = 4.0;
121     EventReport::GetInstance().eventInfo.totalFirstRecvTime = 1.0;
122     EventReport::GetInstance().versionMap.insert(std::make_pair("1.0", 1));
123 
124     EventReport::GetInstance().ResetCounters();
125 
126     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalCount, 0);
127     EXPECT_EQ(EventReport::GetInstance().eventInfo.successCount, 0);
128     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalTime, 0.0);
129     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalRate, 0.0);
130     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalDnsTime, 0.0);
131     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalTlsTime, 0.0);
132     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalTcpTime, 0.0);
133     EXPECT_EQ(EventReport::GetInstance().eventInfo.totalFirstRecvTime, 0.0);
134     EXPECT_TRUE(EventReport::GetInstance().versionMap.empty());
135 }
136 
137 HWTEST_F(NetStackHiSysEventTest, MapToJsonString_ShouldReturnEmptyJson_WhenMapIsEmpty, TestSize.Level0)
138 {
139     std::map<std::string, uint32_t> emptyMap;
140     EXPECT_EQ("{}", EventReport::GetInstance().MapToJsonString(emptyMap));
141 }
142 
143 HWTEST_F(NetStackHiSysEventTest, MapToJsonString_ShouldReturnJsonWithOneElement_WhenMapHasOneElement, TestSize.Level0)
144 {
145     std::map<std::string, uint32_t> oneElementMap = { { "key1", 1 } };
146     EXPECT_EQ("{\"key1\":1}", EventReport::GetInstance().MapToJsonString(oneElementMap));
147 }
148 
149 HWTEST_F(NetStackHiSysEventTest, MapToJsonString_ShouldReturnJsonWithMultipleElements, TestSize.Level0)
150 {
151     std::map<std::string, uint32_t> multipleElementsMap = { { "key1", 1 }, { "key2", 2 }, { "key3", 3 } };
152     EXPECT_EQ("{\"key1\":1,\"key2\":2,\"key3\":3}", EventReport::GetInstance().MapToJsonString(multipleElementsMap));
153 }
154 
155 HWTEST_F(NetStackHiSysEventTest, IsError_ShouldReturnTrue_WhenResponseCodeIsGreaterThanValidRange, TestSize.Level0)
156 {
157     HttpPerfInfo httpPerfInfo;
158     httpPerfInfo.responseCode = 401;
159     ASSERT_TRUE(httpPerfInfo.IsError());
160 }
161 
162 HWTEST_F(NetStackHiSysEventTest, ProcessHttpResponseErrorEvents_01, TestSize.Level0)
163 {
164     HttpPerfInfo httpPerfInfo;
165     httpPerfInfo.responseCode = 500;
166     httpPerfInfo.totalTime = 100.0;
167     httpPerfInfo.version = "1";
168 
169     EventReport &eventReport = EventReport::GetInstance();
170     eventReport.totalErrorCount_ = 0;
171     eventReport.httpPerfInfoQueue_.clear();
172     eventReport.httpReponseRecordTime_ = std::chrono::steady_clock::time_point::min();
173 
174     eventReport.HandleHttpResponseErrorEvents(httpPerfInfo);
175 
176     EXPECT_NE(eventReport.totalErrorCount_, 1);
177     EXPECT_TRUE(eventReport.httpPerfInfoQueue_.empty());
178     EXPECT_EQ(eventReport.httpReponseRecordTime_, std::chrono::steady_clock::time_point::min());
179 }
180 
181 HWTEST_F(NetStackHiSysEventTest, ProcessHiSysEventWrite_01, TestSize.Level0)
182 {
183     HttpPerfInfo httpPerfInfo1;
184     httpPerfInfo1.dnsTime = 10.5;
185     httpPerfInfo1.tcpTime = 20.3;
186     httpPerfInfo1.tlsTime = 30.2;
187     httpPerfInfo1.osErr = 0;
188     httpPerfInfo1.ipType = 4;  // IPv4
189     httpPerfInfo1.errCode = 0;
190     httpPerfInfo1.responseCode = 200;
191 
192     HttpPerfInfo httpPerfInfo2;
193     httpPerfInfo2.dnsTime = 15.5;
194     httpPerfInfo2.tcpTime = 25.3;
195     httpPerfInfo2.tlsTime = 35.2;
196     httpPerfInfo2.osErr = 1;
197     httpPerfInfo2.ipType = 6;  // IPv6
198     httpPerfInfo2.errCode = 404;
199     httpPerfInfo2.responseCode = 404;
200 
201     std::deque<HttpPerfInfo> httpPerfInfoQueue;
202     httpPerfInfoQueue.push_back(httpPerfInfo1);
203     httpPerfInfoQueue.push_back(httpPerfInfo2);
204 
205     EventReport &eventReport = EventReport::GetInstance();
206     eventReport.httpPerfInfoQueue_ = httpPerfInfoQueue;
207     eventReport.ReportHiSysEventWrite(httpPerfInfoQueue);
208     EXPECT_FALSE(eventReport.httpPerfInfoQueue_.empty());
209 }
210 
211 HWTEST_F(NetStackHiSysEventTest, ProcessSendHttpResponseErrorEvent_01, TestSize.Level0)
212 {
213     HttpPerfInfo httpPerfInfo1;
214     httpPerfInfo1.responseCode = 500;
215     httpPerfInfo1.totalTime = 100.0;
216     httpPerfInfo1.version = "1";
217 
218     HttpPerfInfo httpPerfInfo2;
219     httpPerfInfo2.responseCode = 404;
220     httpPerfInfo2.totalTime = 200.0;
221     httpPerfInfo2.version = "1";
222 
223     std::deque<HttpPerfInfo> httpPerfInfoQueue;
224     httpPerfInfoQueue.push_back(httpPerfInfo1);
225     httpPerfInfoQueue.push_back(httpPerfInfo2);
226 
227     EventReport &eventReport = EventReport::GetInstance();
228     eventReport.hiviewReportFirstTime_ = std::chrono::steady_clock::time_point::min();
229     eventReport.sendHttpNetStackEventCount_ = 0;
230 
231     auto now = std::chrono::steady_clock::now();
232     eventReport.SendHttpResponseErrorEvent(httpPerfInfoQueue, now);
233     EXPECT_EQ(eventReport.sendHttpNetStackEventCount_, 1);
234 }
235 }  // namespace OHOS::NetStack