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