diff --git a/test/unittest/utils/netstack_chr_client/NetStackChrClientTest.cpp b/test/unittest/utils/netstack_chr_client/NetStackChrClientTest.cpp index 73f7a11180e0fe53b78334ca18d26b33dec5598f..5e0de533046b2d52d978a5ad2745c24d258aca1c 100644 --- a/test/unittest/utils/netstack_chr_client/NetStackChrClientTest.cpp +++ b/test/unittest/utils/netstack_chr_client/NetStackChrClientTest.cpp @@ -153,7 +153,7 @@ HWTEST_F(NetStackChrClientTest, NetStackChrClientTestPort, TestSize.Level2) { ChrClient::DataTransTcpInfo tcpInfo; int sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd >0) { + if (sockfd > 0) { ChrClient::NetStackChrClient::GetInstance().GetTcpInfoFromSock(sockfd, tcpInfo); EXPECT_EQ(tcpInfo.unacked, 0); EXPECT_EQ(tcpInfo.srcPort, 0); @@ -246,4 +246,33 @@ HWTEST_F(NetStackChrClientTest, NetStackChrClientTestTimeLimits, TestSize.Level2 int second_ret = netstackChrReport.ReportCommonEvent(chrStats); EXPECT_EQ(second_ret, 1); } + +HWTEST_F(NetStackChrClientTest, NetStackChrClientTestHttpVersion, TestSize.Level2) +{ + std::string versionNone = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_NONE); + EXPECT_EQ(versionNone, "HTTP_NONE"); + + std::string version10 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_1_0); + EXPECT_EQ(version10, "HTTP_1_0"); + + std::string version11 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_1_1); + EXPECT_EQ(version11, "HTTP_1_1"); + + std::string version2 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_2_0); + EXPECT_EQ(version2, "HTTP_2"); + version2 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_2TLS); + EXPECT_EQ(version2, "HTTP_2"); + version2 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE); + EXPECT_EQ(version2, "HTTP_2"); + + std::string version3 = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_3); + EXPECT_EQ(version3, "HTTP_3"); + + std::string version3Only = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(CURL_HTTP_VERSION_3ONLY); + EXPECT_EQ(version3Only, "HTTP_3ONLY"); + + long errorHttpVersion = -1; + std::string versionIllegal = ChrClient::NetStackChrClient::GetInstance().ConvertHttpVersion(errorHttpVersion); + EXPECT_EQ(versionIllegal, "ILLEGAL"); +} } \ No newline at end of file diff --git a/utils/netstack_chr_client/include/i_netstack_chr_client.h b/utils/netstack_chr_client/include/i_netstack_chr_client.h index 45fc986be5479fb2ca27558de33fe135408e0d59..3e742bacecece8850f246dd07c1b4ce0b2973b0d 100644 --- a/utils/netstack_chr_client/include/i_netstack_chr_client.h +++ b/utils/netstack_chr_client/include/i_netstack_chr_client.h @@ -46,6 +46,7 @@ typedef struct DataTransHttpInfo { curl_off_t queueTime; long curlCode; long requestStartTime; + std::string httpVersion; } DataTransHttpInfo; typedef struct DataTransTcpInfo { diff --git a/utils/netstack_chr_client/include/netstack_chr_client.h b/utils/netstack_chr_client/include/netstack_chr_client.h index fadb94450bf03ee46ce83151fb0452ad0b16e4e9..a4abba9a1a7d2af894d4d310c0e693057c1d8ad3 100644 --- a/utils/netstack_chr_client/include/netstack_chr_client.h +++ b/utils/netstack_chr_client/include/netstack_chr_client.h @@ -42,6 +42,7 @@ private: static DataType GetNumericAttributeFromCurl(CURL *handle, CURLINFO info); static std::string GetStringAttributeFromCurl(CURL *handle, CURLINFO info); static long GetRequestStartTime(curl_off_t totalTime); + static std::string ConvertHttpVersion(long version); static int ShouldReportHttpAbnormalEvent(const DataTransHttpInfo &httpInfo); NetStackChrReport netstackChrReport_; }; diff --git a/utils/netstack_chr_client/src/netstack_chr_client.cpp b/utils/netstack_chr_client/src/netstack_chr_client.cpp index 0ad5254220d96935f9bc2748ca56b7ca70425fd6..e2828597477b2b8e355a11ced755668d6cf92c53 100644 --- a/utils/netstack_chr_client/src/netstack_chr_client.cpp +++ b/utils/netstack_chr_client/src/netstack_chr_client.cpp @@ -136,6 +136,28 @@ long NetStackChrClient::GetRequestStartTime(curl_off_t totalTime) return msCount; } +std::string NetStackChrClient::ConvertHttpVersion(long version) +{ + switch (version) { + case CURL_HTTP_VERSION_NONE: + return "HTTP_NONE"; + case CURL_HTTP_VERSION_1_0: + return "HTTP_1_0"; + case CURL_HTTP_VERSION_1_1: + return "HTTP_1_1"; + case CURL_HTTP_VERSION_2_0: + case CURL_HTTP_VERSION_2TLS: + case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE: + return "HTTP_2"; + case CURL_HTTP_VERSION_3: + return "HTTP_3"; + case CURL_HTTP_VERSION_3ONLY: + return "HTTP_3ONLY"; + default: + return "ILLEGAL"; + } +} + void NetStackChrClient::GetHttpInfoFromCurl(CURL *handle, DataTransHttpInfo &httpInfo) { (void)curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &httpInfo.responseCode); @@ -162,6 +184,8 @@ void NetStackChrClient::GetHttpInfoFromCurl(CURL *handle, DataTransHttpInfo &htt httpInfo.effectiveMethod = GetStringAttributeFromCurl(handle, CURLINFO_EFFECTIVE_METHOD); httpInfo.contentType = GetStringAttributeFromCurl(handle, CURLINFO_CONTENT_TYPE); + long version = GetNumericAttributeFromCurl(handle, CURLINFO_HTTP_VERSION); + httpInfo.httpVersion = ConvertHttpVersion(version); } int NetStackChrClient::ShouldReportHttpAbnormalEvent(const DataTransHttpInfo &httpInfo) diff --git a/utils/netstack_chr_client/src/netstack_chr_report.cpp b/utils/netstack_chr_client/src/netstack_chr_report.cpp index a746a9d5298233df387ecee4e33a1b80ab68adc0..e57ca689fca31cd210da068a4d404d4438dc17e6 100644 --- a/utils/netstack_chr_client/src/netstack_chr_report.cpp +++ b/utils/netstack_chr_client/src/netstack_chr_report.cpp @@ -78,7 +78,8 @@ void NetStackChrReport::SetHttpInfoJsonStr(DataTransHttpInfo httpInfo, std::stri { std::stringstream ss; ss << "{\"uid\":" << httpInfo.uid - << ",{\"response_code\":" << httpInfo.responseCode + << ",{\"http_version\":\"" << httpInfo.httpVersion + << "\",{\"response_code\":" << httpInfo.responseCode << ",{\"total_time\":" << httpInfo.totalTime << ",{\"namelookup_time\":" << httpInfo.nameLookUpTime << ",{\"connect_time\":" << httpInfo.connectTime