12498b56bSopenharmony_ci/* 22498b56bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 32498b56bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42498b56bSopenharmony_ci * you may not use this file except in compliance with the License. 52498b56bSopenharmony_ci * You may obtain a copy of the License at 62498b56bSopenharmony_ci * 72498b56bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82498b56bSopenharmony_ci * 92498b56bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102498b56bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112498b56bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122498b56bSopenharmony_ci * See the License for the specific language governing permissions and 132498b56bSopenharmony_ci * limitations under the License. 142498b56bSopenharmony_ci */ 152498b56bSopenharmony_ci#include "hilog_print_test.h" 162498b56bSopenharmony_ci#include "hilog/log.h" 172498b56bSopenharmony_ci#include <log_utils.h> 182498b56bSopenharmony_ci 192498b56bSopenharmony_ciusing namespace std; 202498b56bSopenharmony_ciusing namespace testing::ext; 212498b56bSopenharmony_ciusing namespace OHOS; 222498b56bSopenharmony_ciusing namespace OHOS::HiviewDFX; 232498b56bSopenharmony_ci 242498b56bSopenharmony_cinamespace { 252498b56bSopenharmony_ciconst HiLogLabel LABEL = { LOG_CORE, 0xD002D00, "HILOGTEST_C" }; 262498b56bSopenharmony_ciconst int LOGINDEX = 42 + strlen("HILOGTEST_C"); 272498b56bSopenharmony_ci 282498b56bSopenharmony_cistd::string GetCmdResultFromPopen(const std::string& cmd) 292498b56bSopenharmony_ci{ 302498b56bSopenharmony_ci if (cmd.empty()) { 312498b56bSopenharmony_ci return ""; 322498b56bSopenharmony_ci } 332498b56bSopenharmony_ci FILE* fp = popen(cmd.c_str(), "r"); 342498b56bSopenharmony_ci if (fp == nullptr) { 352498b56bSopenharmony_ci return ""; 362498b56bSopenharmony_ci } 372498b56bSopenharmony_ci std::string ret = ""; 382498b56bSopenharmony_ci char* buffer = nullptr; 392498b56bSopenharmony_ci size_t len = 0; 402498b56bSopenharmony_ci while (getline(&buffer, &len, fp) != -1) { 412498b56bSopenharmony_ci std::string line = buffer; 422498b56bSopenharmony_ci ret += line; 432498b56bSopenharmony_ci } 442498b56bSopenharmony_ci if (buffer != nullptr) { 452498b56bSopenharmony_ci free(buffer); 462498b56bSopenharmony_ci buffer = nullptr; 472498b56bSopenharmony_ci } 482498b56bSopenharmony_ci pclose(fp); 492498b56bSopenharmony_ci return ret; 502498b56bSopenharmony_ci} 512498b56bSopenharmony_ci} 522498b56bSopenharmony_ci 532498b56bSopenharmony_civoid HilogPrintTest::SetUpTestCase() 542498b56bSopenharmony_ci{ 552498b56bSopenharmony_ci (void)GetCmdResultFromPopen("hilog -b X"); 562498b56bSopenharmony_ci (void)GetCmdResultFromPopen("hilog -b I -D d002d00"); 572498b56bSopenharmony_ci} 582498b56bSopenharmony_ci 592498b56bSopenharmony_civoid HilogPrintTest::TearDownTestCase() 602498b56bSopenharmony_ci{ 612498b56bSopenharmony_ci (void)GetCmdResultFromPopen("hilog -b I"); 622498b56bSopenharmony_ci} 632498b56bSopenharmony_ci 642498b56bSopenharmony_civoid HilogPrintTest::SetUp() 652498b56bSopenharmony_ci{ 662498b56bSopenharmony_ci (void)GetCmdResultFromPopen("hilog -r"); 672498b56bSopenharmony_ci} 682498b56bSopenharmony_ci 692498b56bSopenharmony_cinamespace { 702498b56bSopenharmony_ci/** 712498b56bSopenharmony_ci * @tc.name: Dfx_HilogPrintTest_HilogTypeTest 722498b56bSopenharmony_ci * @tc.desc: HilogTypeTest. 732498b56bSopenharmony_ci * @tc.type: FUNC 742498b56bSopenharmony_ci */ 752498b56bSopenharmony_ciHWTEST_F(HilogPrintTest, HilogTypeTest, TestSize.Level1) 762498b56bSopenharmony_ci{ 772498b56bSopenharmony_ciconst vector<string> typeVec = { 782498b56bSopenharmony_ci {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'+-/,.-~:;<=>?_[]{}|\\\""}, 792498b56bSopenharmony_ci {"123"}, 802498b56bSopenharmony_ci {"173"}, 812498b56bSopenharmony_ci {"123"}, 822498b56bSopenharmony_ci {"0x7b, 0x7B"}, 832498b56bSopenharmony_ci {"0.000123, 0.000123"}, 842498b56bSopenharmony_ci {"1.230000e-04, 1.230000E-04"}, 852498b56bSopenharmony_ci {"0.000123, 0.123"}, 862498b56bSopenharmony_ci {"0.000123, 0.123"}, 872498b56bSopenharmony_ci {"A"}, 882498b56bSopenharmony_ci}; 892498b56bSopenharmony_ci 902498b56bSopenharmony_ci GTEST_LOG_(INFO) << "HilogTypeTest: start."; 912498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}s", 922498b56bSopenharmony_ci "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'+-/,.-~:;<=>?_[]{}|\\\""); 932498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}i", 123); 942498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}o", 123); 952498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}u", 123); 962498b56bSopenharmony_ci HiLog::Info(LABEL, "0x%{public}x, 0x%{public}X", 123, 123); 972498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.6f, %{public}.6lf", 0.000123, 0.000123); 982498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}e, %{public}E", 0.000123, 0.000123); 992498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}g, %{public}g", 0.000123, 0.123); 1002498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}G, %{public}G", 0.000123, 0.123); 1012498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}c", 65); 1022498b56bSopenharmony_ci 1032498b56bSopenharmony_ci std::string res = GetCmdResultFromPopen("hilog -T HILOGTEST_C -x"); 1042498b56bSopenharmony_ci vector<string> vec; 1052498b56bSopenharmony_ci std::string log = ""; 1062498b56bSopenharmony_ci Split(res, vec, "\n"); 1072498b56bSopenharmony_ci for (unsigned int i = 0; i < vec.size(); i++) { 1082498b56bSopenharmony_ci log = vec[i].substr(LOGINDEX); 1092498b56bSopenharmony_ci EXPECT_EQ(log, typeVec[i]); 1102498b56bSopenharmony_ci } 1112498b56bSopenharmony_ci} 1122498b56bSopenharmony_ci 1132498b56bSopenharmony_ci/** 1142498b56bSopenharmony_ci * @tc.name: Dfx_HilogPrintTest_HilogFlagTest 1152498b56bSopenharmony_ci * @tc.desc: HilogFlagTest. 1162498b56bSopenharmony_ci * @tc.type: FUNC 1172498b56bSopenharmony_ci */ 1182498b56bSopenharmony_ciHWTEST_F(HilogPrintTest, HilogFlagTest, TestSize.Level1) 1192498b56bSopenharmony_ci{ 1202498b56bSopenharmony_ciconst vector<string> FlagVec = { 1212498b56bSopenharmony_ci {" 1000"}, 1222498b56bSopenharmony_ci {"1000 "}, 1232498b56bSopenharmony_ci {"+1000, -1000"}, 1242498b56bSopenharmony_ci {" 1000, -1000"}, 1252498b56bSopenharmony_ci {"3e8, 0x3e8"}, 1262498b56bSopenharmony_ci {"1000, 1000."}, 1272498b56bSopenharmony_ci {"1000, 1000.00"}, 1282498b56bSopenharmony_ci {"01000"}, 1292498b56bSopenharmony_ci}; 1302498b56bSopenharmony_ci 1312498b56bSopenharmony_ci GTEST_LOG_(INFO) << "HilogFlagTest: start."; 1322498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}5d", 1000); 1332498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}-5d", 1000); 1342498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}+d, %{public}+d", 1000, -1000); 1352498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public} d, %{public} d", 1000, -1000); 1362498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}x, %{public}#x", 1000, 1000); 1372498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.0f, %{public}#.0f", 1000.0, 1000.0); 1382498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}g, %{public}#g", 1000.0, 1000.0); 1392498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}05d", 1000); 1402498b56bSopenharmony_ci 1412498b56bSopenharmony_ci std::string res = GetCmdResultFromPopen("hilog -T HILOGTEST_C -x"); 1422498b56bSopenharmony_ci vector<string> vec; 1432498b56bSopenharmony_ci std::string log = ""; 1442498b56bSopenharmony_ci Split(res, vec, "\n"); 1452498b56bSopenharmony_ci for (unsigned int i = 0; i < vec.size(); i++) { 1462498b56bSopenharmony_ci log = vec[i].substr(LOGINDEX); 1472498b56bSopenharmony_ci EXPECT_EQ(log, FlagVec[i]); 1482498b56bSopenharmony_ci } 1492498b56bSopenharmony_ci} 1502498b56bSopenharmony_ci 1512498b56bSopenharmony_ci/** 1522498b56bSopenharmony_ci * @tc.name: Dfx_HilogPrintTest_HilogWidthTest 1532498b56bSopenharmony_ci * @tc.desc: HilogWidthTest. 1542498b56bSopenharmony_ci * @tc.type: FUNC 1552498b56bSopenharmony_ci */ 1562498b56bSopenharmony_ciHWTEST_F(HilogPrintTest, HilogWidthTest, TestSize.Level1) 1572498b56bSopenharmony_ci{ 1582498b56bSopenharmony_ciconst vector<string> WidthVec = { 1592498b56bSopenharmony_ci {"001000"}, 1602498b56bSopenharmony_ci {"001000"}, 1612498b56bSopenharmony_ci}; 1622498b56bSopenharmony_ci 1632498b56bSopenharmony_ci GTEST_LOG_(INFO) << "HilogWidthTest: start."; 1642498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}06d", 1000); 1652498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}0*d", 6, 1000); 1662498b56bSopenharmony_ci 1672498b56bSopenharmony_ci std::string res = GetCmdResultFromPopen("hilog -T HILOGTEST_C -x"); 1682498b56bSopenharmony_ci vector<string> vec; 1692498b56bSopenharmony_ci std::string log = ""; 1702498b56bSopenharmony_ci Split(res, vec, "\n"); 1712498b56bSopenharmony_ci for (unsigned int i = 0; i < vec.size(); i++) { 1722498b56bSopenharmony_ci log = vec[i].substr(LOGINDEX); 1732498b56bSopenharmony_ci EXPECT_EQ(log, WidthVec[i]); 1742498b56bSopenharmony_ci } 1752498b56bSopenharmony_ci} 1762498b56bSopenharmony_ci 1772498b56bSopenharmony_ci/** 1782498b56bSopenharmony_ci * @tc.name: Dfx_HilogPrintTest_HilogPrecisionTest 1792498b56bSopenharmony_ci * @tc.desc: HilogPrecisionTest. 1802498b56bSopenharmony_ci * @tc.type: FUNC 1812498b56bSopenharmony_ci */ 1822498b56bSopenharmony_ciHWTEST_F(HilogPrintTest, HilogPrecisionTest, TestSize.Level1) 1832498b56bSopenharmony_ci{ 1842498b56bSopenharmony_ciconst vector<string> PrecisionVec = { 1852498b56bSopenharmony_ci {"00001000"}, 1862498b56bSopenharmony_ci {"1000.12345679"}, 1872498b56bSopenharmony_ci {"1000.12345600"}, 1882498b56bSopenharmony_ci {"1000.1235"}, 1892498b56bSopenharmony_ci {"abcdefgh"}, 1902498b56bSopenharmony_ci}; 1912498b56bSopenharmony_ci 1922498b56bSopenharmony_ci GTEST_LOG_(INFO) << "HilogPrecisionTest: start."; 1932498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.8d", 1000); 1942498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.8f", 1000.123456789); 1952498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.8f", 1000.123456); 1962498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.8g", 1000.123456); 1972498b56bSopenharmony_ci HiLog::Info(LABEL, "%{public}.8s", "abcdefghij"); 1982498b56bSopenharmony_ci 1992498b56bSopenharmony_ci std::string res = GetCmdResultFromPopen("hilog -T HILOGTEST_C -x"); 2002498b56bSopenharmony_ci vector<string> vec; 2012498b56bSopenharmony_ci std::string log = ""; 2022498b56bSopenharmony_ci Split(res, vec, "\n"); 2032498b56bSopenharmony_ci for (unsigned int i = 0; i < vec.size(); i++) { 2042498b56bSopenharmony_ci log = vec[i].substr(LOGINDEX); 2052498b56bSopenharmony_ci EXPECT_EQ(log, PrecisionVec[i]); 2062498b56bSopenharmony_ci } 2072498b56bSopenharmony_ci} 2082498b56bSopenharmony_ci} // namespace