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