148f512ceSopenharmony_ci/*
248f512ceSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
348f512ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
448f512ceSopenharmony_ci * you may not use this file except in compliance with the License.
548f512ceSopenharmony_ci * You may obtain a copy of the License at
648f512ceSopenharmony_ci *
748f512ceSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
848f512ceSopenharmony_ci *
948f512ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1048f512ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1148f512ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1248f512ceSopenharmony_ci * See the License for the specific language governing permissions and
1348f512ceSopenharmony_ci * limitations under the License.
1448f512ceSopenharmony_ci */
1548f512ceSopenharmony_ci
1648f512ceSopenharmony_ci#include "subcommand_report_test.h"
1748f512ceSopenharmony_ci
1848f512ceSopenharmony_ci#include "subcommand.h"
1948f512ceSopenharmony_ci#include "subcommand_report.h"
2048f512ceSopenharmony_ci#include "subcommand_test.h"
2148f512ceSopenharmony_ci
2248f512ceSopenharmony_ciusing namespace testing::ext;
2348f512ceSopenharmony_ciusing namespace std;
2448f512ceSopenharmony_ciusing namespace OHOS::HiviewDFX;
2548f512ceSopenharmony_cinamespace OHOS {
2648f512ceSopenharmony_cinamespace Developtools {
2748f512ceSopenharmony_cinamespace HiPerf {
2848f512ceSopenharmony_ci
2948f512ceSopenharmony_ciconstexpr int DEFAULT_RUN_TIMEOUT_MS = 10000;
3048f512ceSopenharmony_ci
3148f512ceSopenharmony_ciclass SubCommandReportTest : public testing::Test {
3248f512ceSopenharmony_cipublic:
3348f512ceSopenharmony_ci#if is_ohos
3448f512ceSopenharmony_ci    const std::string RESOURCE_PATH = "/data/test/resource/testdata/";
3548f512ceSopenharmony_ci#else
3648f512ceSopenharmony_ci    const std::string RESOURCE_PATH = "./resource/testdata/";
3748f512ceSopenharmony_ci#endif
3848f512ceSopenharmony_ci    static void SetUpTestCase(void);
3948f512ceSopenharmony_ci    static void TearDownTestCase(void);
4048f512ceSopenharmony_ci    void SetUp();
4148f512ceSopenharmony_ci    void TearDown();
4248f512ceSopenharmony_ci
4348f512ceSopenharmony_ci    bool FindExpectStr(const std::string &stringOut, const std::string &counterNames) const;
4448f512ceSopenharmony_ci    bool FindExpectStrList(const std::string &stringOut,
4548f512ceSopenharmony_ci                           const std::vector<std::string> &counterNames) const;
4648f512ceSopenharmony_ci    bool FileCompare(const std::string &stringOut, const std::string &targetFile) const;
4748f512ceSopenharmony_ci    const std::vector<std::string> expectStr_ = {
4848f512ceSopenharmony_ci        "Heating", "count", "comm", "pid", "tid", "dso", "func",
4948f512ceSopenharmony_ci    };
5048f512ceSopenharmony_ci};
5148f512ceSopenharmony_civoid SubCommandReportTest::SetUpTestCase() {}
5248f512ceSopenharmony_ci
5348f512ceSopenharmony_civoid SubCommandReportTest::TearDownTestCase() {
5448f512ceSopenharmony_ci}
5548f512ceSopenharmony_ci
5648f512ceSopenharmony_civoid SubCommandReportTest::SetUp()
5748f512ceSopenharmony_ci{
5848f512ceSopenharmony_ci    ASSERT_EQ(SubCommand::GetSubCommands().size(), 0u);
5948f512ceSopenharmony_ci    ASSERT_EQ(SubCommandReport::RegisterSubCommandReport(), true);
6048f512ceSopenharmony_ci    SubCommand::RegisterSubCommand("TEST_CMD_1", std::make_unique<SubCommandTest>("TEST_CMD_1"));
6148f512ceSopenharmony_ci}
6248f512ceSopenharmony_ci
6348f512ceSopenharmony_civoid SubCommandReportTest::TearDown()
6448f512ceSopenharmony_ci{
6548f512ceSopenharmony_ci    SubCommand::ClearSubCommands();
6648f512ceSopenharmony_ci    ASSERT_EQ(SubCommand::GetSubCommands().size(), 0u);
6748f512ceSopenharmony_ci    MemoryHold::Get().Clean();
6848f512ceSopenharmony_ci}
6948f512ceSopenharmony_ci
7048f512ceSopenharmony_cibool SubCommandReportTest::FindExpectStr(const std::string &stringOut,
7148f512ceSopenharmony_ci                                         const std::string &counterNames) const
7248f512ceSopenharmony_ci{
7348f512ceSopenharmony_ci    auto lines = StringSplit(stringOut, "\n");
7448f512ceSopenharmony_ci    for (auto line : lines) {
7548f512ceSopenharmony_ci        if (line.find(counterNames.c_str()) != std::string::npos) {
7648f512ceSopenharmony_ci            return true;
7748f512ceSopenharmony_ci        }
7848f512ceSopenharmony_ci    }
7948f512ceSopenharmony_ci    return false;
8048f512ceSopenharmony_ci}
8148f512ceSopenharmony_ci
8248f512ceSopenharmony_cibool SubCommandReportTest::FindExpectStrList(const std::string &stringOut,
8348f512ceSopenharmony_ci                                             const std::vector<std::string> &counterNames) const
8448f512ceSopenharmony_ci{
8548f512ceSopenharmony_ci    for (auto name : counterNames) {
8648f512ceSopenharmony_ci        if (stringOut.find(name) != std::string::npos) {
8748f512ceSopenharmony_ci            return true;
8848f512ceSopenharmony_ci        }
8948f512ceSopenharmony_ci    }
9048f512ceSopenharmony_ci    return false;
9148f512ceSopenharmony_ci}
9248f512ceSopenharmony_ci
9348f512ceSopenharmony_cibool SubCommandReportTest::FileCompare(const std::string &stringOut,
9448f512ceSopenharmony_ci                                       const std::string &targetFile) const
9548f512ceSopenharmony_ci{
9648f512ceSopenharmony_ci    std::vector<std::string> actualLines = StringSplit(stringOut, "\n");
9748f512ceSopenharmony_ci    std::vector<std::string> expectLines = StringSplit(ReadFileToString(targetFile), "\n");
9848f512ceSopenharmony_ci
9948f512ceSopenharmony_ci    for (size_t i = 0; i < actualLines.size(); i++) {
10048f512ceSopenharmony_ci        actualLines[i].erase(actualLines[i].find_last_not_of(" ") + 1);
10148f512ceSopenharmony_ci    }
10248f512ceSopenharmony_ci
10348f512ceSopenharmony_ci    for (size_t y = 0; y < expectLines.size(); y++) {
10448f512ceSopenharmony_ci        expectLines[y].erase(expectLines[y].find_last_not_of(" ") + 1);
10548f512ceSopenharmony_ci    }
10648f512ceSopenharmony_ci    auto actual = actualLines.begin();
10748f512ceSopenharmony_ci    auto expect = expectLines.begin();
10848f512ceSopenharmony_ci    EXPECT_EQ(actualLines.size(), expectLines.size());
10948f512ceSopenharmony_ci
11048f512ceSopenharmony_ci    while (actual != actualLines.end() and expect != expectLines.end() and !HasFailure()) {
11148f512ceSopenharmony_ci        EXPECT_STREQ(actual->c_str(), expect->c_str());
11248f512ceSopenharmony_ci        actual++;
11348f512ceSopenharmony_ci        expect++;
11448f512ceSopenharmony_ci    }
11548f512ceSopenharmony_ci    return !HasFailure();
11648f512ceSopenharmony_ci}
11748f512ceSopenharmony_ci
11848f512ceSopenharmony_ci/**
11948f512ceSopenharmony_ci * @tc.name: TestParseOption
12048f512ceSopenharmony_ci * @tc.desc:
12148f512ceSopenharmony_ci * @tc.type: FUNC
12248f512ceSopenharmony_ci */
12348f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestParseOption, TestSize.Level1)
12448f512ceSopenharmony_ci{
12548f512ceSopenharmony_ci    SubCommandReport mSubCommandReport;
12648f512ceSopenharmony_ci    std::vector<std::string> args;
12748f512ceSopenharmony_ci    args = {"-i"};
12848f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
12948f512ceSopenharmony_ci    args = {"-o"};
13048f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
13148f512ceSopenharmony_ci    args = {"--diff"};
13248f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
13348f512ceSopenharmony_ci    args = {"--sort"};
13448f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
13548f512ceSopenharmony_ci    args = {"--symbol-dir"};
13648f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
13748f512ceSopenharmony_ci    args = {"--limit-percent"};
13848f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
13948f512ceSopenharmony_ci    args = {"-s"};
14048f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
14148f512ceSopenharmony_ci    args = {"--call-stack"};
14248f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
14348f512ceSopenharmony_ci    args = {"--call-stack-limit-percent"};
14448f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
14548f512ceSopenharmony_ci    args = {"--comms"};
14648f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
14748f512ceSopenharmony_ci    args = {"--pids"};
14848f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
14948f512ceSopenharmony_ci    args = {"--tids"};
15048f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
15148f512ceSopenharmony_ci    args = {"--dsos"};
15248f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
15348f512ceSopenharmony_ci    args = {"--funcs"};
15448f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), false);
15548f512ceSopenharmony_ci    args = {"--from-dsos"};
15648f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
15748f512ceSopenharmony_ci    args = {"--from-funcs"};
15848f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
15948f512ceSopenharmony_ci    args = {"--proto"};
16048f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
16148f512ceSopenharmony_ci    args = {"--json"};
16248f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
16348f512ceSopenharmony_ci    args = {"--branch"};
16448f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
16548f512ceSopenharmony_ci    args = {"--debug"};
16648f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.ParseOption(args), true);
16748f512ceSopenharmony_ci    args.clear();
16848f512ceSopenharmony_ci}
16948f512ceSopenharmony_ci
17048f512ceSopenharmony_ci/**
17148f512ceSopenharmony_ci * @tc.name: TestDumpOptions
17248f512ceSopenharmony_ci * @tc.desc:
17348f512ceSopenharmony_ci * @tc.type: FUNC
17448f512ceSopenharmony_ci */
17548f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestDumpOptions, TestSize.Level1)
17648f512ceSopenharmony_ci{
17748f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
17848f512ceSopenharmony_ci    stdoutRecord.Start();
17948f512ceSopenharmony_ci    SubCommandReport mSubCommandReport;
18048f512ceSopenharmony_ci    mSubCommandReport.DumpOptions();
18148f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
18248f512ceSopenharmony_ci    EXPECT_TRUE(stringOut.find("comm,pid,tid,dso,func") != std::string::npos);
18348f512ceSopenharmony_ci}
18448f512ceSopenharmony_ci
18548f512ceSopenharmony_ci/**
18648f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_i
18748f512ceSopenharmony_ci * @tc.desc:
18848f512ceSopenharmony_ci * @tc.type: FUNC
18948f512ceSopenharmony_ci */
19048f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_i, TestSize.Level1)
19148f512ceSopenharmony_ci{
19248f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
19348f512ceSopenharmony_ci    stdoutRecord.Start();
19448f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
19548f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data"), true);
19648f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
19748f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
19848f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
19948f512ceSopenharmony_ci
20048f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
20148f512ceSopenharmony_ci    if (HasFailure()) {
20248f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
20348f512ceSopenharmony_ci    }
20448f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_i.txt";
20548f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
20648f512ceSopenharmony_ci}
20748f512ceSopenharmony_ci
20848f512ceSopenharmony_ci/**
20948f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_gzip_fail
21048f512ceSopenharmony_ci * @tc.desc:
21148f512ceSopenharmony_ci * @tc.type: FUNC
21248f512ceSopenharmony_ci */
21348f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_gzip_fail, TestSize.Level1)
21448f512ceSopenharmony_ci{
21548f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
21648f512ceSopenharmony_ci    stdoutRecord.Start();
21748f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
21848f512ceSopenharmony_ci    std::string cmd = "tar -czvf " + RESOURCE_PATH + "report_test.data.tar.gz " + RESOURCE_PATH + "report_test.data";
21948f512ceSopenharmony_ci    std::system(cmd.c_str());
22048f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data.tar.gz"), false);
22148f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
22248f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
22348f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
22448f512ceSopenharmony_ci
22548f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
22648f512ceSopenharmony_ci    if (HasFailure()) {
22748f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
22848f512ceSopenharmony_ci    }
22948f512ceSopenharmony_ci}
23048f512ceSopenharmony_ci
23148f512ceSopenharmony_ci/**
23248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_gzip
23348f512ceSopenharmony_ci * @tc.desc:
23448f512ceSopenharmony_ci * @tc.type: FUNC
23548f512ceSopenharmony_ci */
23648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_gzip, TestSize.Level1)
23748f512ceSopenharmony_ci{
23848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
23948f512ceSopenharmony_ci    stdoutRecord.Start();
24048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
24148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i /data/local/tmp/perf.data.tar.gz"), true);
24248f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
24348f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
24448f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
24548f512ceSopenharmony_ci
24648f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
24748f512ceSopenharmony_ci    if (HasFailure()) {
24848f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
24948f512ceSopenharmony_ci    }
25048f512ceSopenharmony_ci}
25148f512ceSopenharmony_ci
25248f512ceSopenharmony_ci/**
25348f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_i1
25448f512ceSopenharmony_ci * @tc.desc:
25548f512ceSopenharmony_ci * @tc.type: FUNC
25648f512ceSopenharmony_ci */
25748f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_i1, TestSize.Level1)
25848f512ceSopenharmony_ci{
25948f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
26048f512ceSopenharmony_ci    stdoutRecord.Start();
26148f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
26248f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "perf1.data --debug"), false);
26348f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
26448f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
26548f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
26648f512ceSopenharmony_ci
26748f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
26848f512ceSopenharmony_ci    if (HasFailure()) {
26948f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
27048f512ceSopenharmony_ci    }
27148f512ceSopenharmony_ci    const std::string expectStr =
27248f512ceSopenharmony_ci        "Can not access data file /data/test/resource/testdata/perf1.data";
27348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
27448f512ceSopenharmony_ci}
27548f512ceSopenharmony_ci
27648f512ceSopenharmony_ci/**
27748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_i2
27848f512ceSopenharmony_ci * @tc.desc:
27948f512ceSopenharmony_ci * @tc.type: FUNC
28048f512ceSopenharmony_ci */
28148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_i2, TestSize.Level1)
28248f512ceSopenharmony_ci{
28348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
28448f512ceSopenharmony_ci    stdoutRecord.Start();
28548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
28648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report " + RESOURCE_PATH + "report_test.data -i"), false);
28748f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
28848f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
28948f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
29048f512ceSopenharmony_ci
29148f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
29248f512ceSopenharmony_ci    if (HasFailure()) {
29348f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
29448f512ceSopenharmony_ci    }
29548f512ceSopenharmony_ci    const std::string expectStr = "option -i value missed";
29648f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
29748f512ceSopenharmony_ci}
29848f512ceSopenharmony_ci
29948f512ceSopenharmony_ci/**
30048f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_diff
30148f512ceSopenharmony_ci * @tc.desc:
30248f512ceSopenharmony_ci * @tc.type: FUNC
30348f512ceSopenharmony_ci */
30448f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_diff, TestSize.Level1)
30548f512ceSopenharmony_ci{
30648f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
30748f512ceSopenharmony_ci    stdoutRecord.Start();
30848f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
30948f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "perf1.data --diff " +
31048f512ceSopenharmony_ci                                       RESOURCE_PATH + "report_test.data"),
31148f512ceSopenharmony_ci              false);
31248f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
31348f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
31448f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
31548f512ceSopenharmony_ci
31648f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
31748f512ceSopenharmony_ci    if (HasFailure()) {
31848f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
31948f512ceSopenharmony_ci    }
32048f512ceSopenharmony_ci    const std::string expectStr =
32148f512ceSopenharmony_ci        "Can not access data file /data/test/resource/testdata/perf1.data";
32248f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
32348f512ceSopenharmony_ci}
32448f512ceSopenharmony_ci
32548f512ceSopenharmony_ci/**
32648f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_Diff_Same
32748f512ceSopenharmony_ci * @tc.desc:
32848f512ceSopenharmony_ci * @tc.type: FUNC
32948f512ceSopenharmony_ci */
33048f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_Diff_Same, TestSize.Level1)
33148f512ceSopenharmony_ci{
33248f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
33348f512ceSopenharmony_ci    stdoutRecord.Start();
33448f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
33548f512ceSopenharmony_ci
33648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --diff " +
33748f512ceSopenharmony_ci                                       RESOURCE_PATH + "report_test.data"),
33848f512ceSopenharmony_ci              true);
33948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
34048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
34148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
34248f512ceSopenharmony_ci
34348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
34448f512ceSopenharmony_ci    if (HasFailure()) {
34548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
34648f512ceSopenharmony_ci    }
34748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_diff.txt";
34848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
34948f512ceSopenharmony_ci}
35048f512ceSopenharmony_ci
35148f512ceSopenharmony_ci/**
35248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_sort
35348f512ceSopenharmony_ci * @tc.desc:
35448f512ceSopenharmony_ci * @tc.type: FUNC
35548f512ceSopenharmony_ci */
35648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_sort, TestSize.Level1)
35748f512ceSopenharmony_ci{
35848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
35948f512ceSopenharmony_ci    stdoutRecord.Start();
36048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
36148f512ceSopenharmony_ci    EXPECT_EQ(
36248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --sort pid"),
36348f512ceSopenharmony_ci        true);
36448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
36548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
36648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
36748f512ceSopenharmony_ci
36848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
36948f512ceSopenharmony_ci    if (HasFailure()) {
37048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
37148f512ceSopenharmony_ci    }
37248f512ceSopenharmony_ci    const std::string expectStr = "100.00%  271445 1204";
37348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
37448f512ceSopenharmony_ci}
37548f512ceSopenharmony_ci
37648f512ceSopenharmony_ci/**
37748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_sort1
37848f512ceSopenharmony_ci * @tc.desc:
37948f512ceSopenharmony_ci * @tc.type: FUNC
38048f512ceSopenharmony_ci */
38148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_sort1, TestSize.Level1)
38248f512ceSopenharmony_ci{
38348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
38448f512ceSopenharmony_ci    stdoutRecord.Start();
38548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
38648f512ceSopenharmony_ci    EXPECT_EQ(
38748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --sort pid,tid"),
38848f512ceSopenharmony_ci        true);
38948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
39048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
39148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
39248f512ceSopenharmony_ci
39348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
39448f512ceSopenharmony_ci    if (HasFailure()) {
39548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
39648f512ceSopenharmony_ci    }
39748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_sort1.txt";
39848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
39948f512ceSopenharmony_ci}
40048f512ceSopenharmony_ci
40148f512ceSopenharmony_ci/**
40248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_sort2
40348f512ceSopenharmony_ci * @tc.desc:
40448f512ceSopenharmony_ci * @tc.type: FUNC
40548f512ceSopenharmony_ci */
40648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_sort2, TestSize.Level1)
40748f512ceSopenharmony_ci{
40848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
40948f512ceSopenharmony_ci    stdoutRecord.Start();
41048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
41148f512ceSopenharmony_ci    EXPECT_EQ(
41248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --sort func"),
41348f512ceSopenharmony_ci        true);
41448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
41548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
41648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
41748f512ceSopenharmony_ci
41848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
41948f512ceSopenharmony_ci    if (HasFailure()) {
42048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
42148f512ceSopenharmony_ci    }
42248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_sort2.txt";
42348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
42448f512ceSopenharmony_ci}
42548f512ceSopenharmony_ci
42648f512ceSopenharmony_ci/**
42748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_sort3
42848f512ceSopenharmony_ci * @tc.desc:
42948f512ceSopenharmony_ci * @tc.type: FUNC
43048f512ceSopenharmony_ci */
43148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_sort3, TestSize.Level1)
43248f512ceSopenharmony_ci{
43348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
43448f512ceSopenharmony_ci    stdoutRecord.Start();
43548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
43648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "perf1.data --sort pid"),
43748f512ceSopenharmony_ci              false);
43848f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
43948f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
44048f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
44148f512ceSopenharmony_ci
44248f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
44348f512ceSopenharmony_ci    if (HasFailure()) {
44448f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
44548f512ceSopenharmony_ci    }
44648f512ceSopenharmony_ci    const std::string expectStr =
44748f512ceSopenharmony_ci        "Can not access data file /data/test/resource/testdata/perf1.data";
44848f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
44948f512ceSopenharmony_ci}
45048f512ceSopenharmony_ci
45148f512ceSopenharmony_ci/**
45248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_sort4
45348f512ceSopenharmony_ci * @tc.desc:
45448f512ceSopenharmony_ci * @tc.type: FUNC
45548f512ceSopenharmony_ci */
45648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_sort4, TestSize.Level1)
45748f512ceSopenharmony_ci{
45848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
45948f512ceSopenharmony_ci    stdoutRecord.Start();
46048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
46148f512ceSopenharmony_ci    EXPECT_EQ(
46248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --sort pids"),
46348f512ceSopenharmony_ci        false);
46448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
46548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
46648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
46748f512ceSopenharmony_ci
46848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
46948f512ceSopenharmony_ci    if (HasFailure()) {
47048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
47148f512ceSopenharmony_ci    }
47248f512ceSopenharmony_ci    const std::string expectStr = "unknown sort key name 'pids'";
47348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
47448f512ceSopenharmony_ci}
47548f512ceSopenharmony_ci
47648f512ceSopenharmony_ci/**
47748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_symbol
47848f512ceSopenharmony_ci * @tc.desc:
47948f512ceSopenharmony_ci * @tc.type: FUNC
48048f512ceSopenharmony_ci */
48148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_symbol, TestSize.Level1)
48248f512ceSopenharmony_ci{
48348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
48448f512ceSopenharmony_ci    stdoutRecord.Start();
48548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
48648f512ceSopenharmony_ci    EXPECT_EQ(
48748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --symbol-dir ./"),
48848f512ceSopenharmony_ci        true);
48948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
49048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
49148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
49248f512ceSopenharmony_ci
49348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
49448f512ceSopenharmony_ci    if (HasFailure()) {
49548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
49648f512ceSopenharmony_ci    }
49748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_symbol.txt";
49848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
49948f512ceSopenharmony_ci}
50048f512ceSopenharmony_ci
50148f512ceSopenharmony_ci/**
50248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_limit
50348f512ceSopenharmony_ci * @tc.desc:
50448f512ceSopenharmony_ci * @tc.type: FUNC
50548f512ceSopenharmony_ci */
50648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_limit, TestSize.Level1)
50748f512ceSopenharmony_ci{
50848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
50948f512ceSopenharmony_ci    stdoutRecord.Start();
51048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
51148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
51248f512ceSopenharmony_ci                                       "report_test.data --limit-percent 5"),
51348f512ceSopenharmony_ci              true);
51448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
51548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
51648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
51748f512ceSopenharmony_ci
51848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
51948f512ceSopenharmony_ci    if (HasFailure()) {
52048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
52148f512ceSopenharmony_ci    }
52248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_limit.txt";
52348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
52448f512ceSopenharmony_ci}
52548f512ceSopenharmony_ci
52648f512ceSopenharmony_ci/**
52748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_limit1
52848f512ceSopenharmony_ci * @tc.desc:
52948f512ceSopenharmony_ci * @tc.type: FUNC
53048f512ceSopenharmony_ci */
53148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_limit1, TestSize.Level1)
53248f512ceSopenharmony_ci{
53348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
53448f512ceSopenharmony_ci    stdoutRecord.Start();
53548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
53648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
53748f512ceSopenharmony_ci                                       "report_test.data --limit-percent 1"),
53848f512ceSopenharmony_ci              true);
53948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
54048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
54148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
54248f512ceSopenharmony_ci
54348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
54448f512ceSopenharmony_ci    if (HasFailure()) {
54548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
54648f512ceSopenharmony_ci    }
54748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_limit1.txt";
54848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
54948f512ceSopenharmony_ci}
55048f512ceSopenharmony_ci
55148f512ceSopenharmony_ci/**
55248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_limit2
55348f512ceSopenharmony_ci * @tc.desc:
55448f512ceSopenharmony_ci * @tc.type: FUNC
55548f512ceSopenharmony_ci */
55648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_limit2, TestSize.Level1)
55748f512ceSopenharmony_ci{
55848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
55948f512ceSopenharmony_ci    stdoutRecord.Start();
56048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
56148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
56248f512ceSopenharmony_ci                                       "report_test.data --limit-percent 99"),
56348f512ceSopenharmony_ci              true);
56448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
56548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
56648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
56748f512ceSopenharmony_ci
56848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
56948f512ceSopenharmony_ci    if (HasFailure()) {
57048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
57148f512ceSopenharmony_ci    }
57248f512ceSopenharmony_ci    const std::string expectStr = "kernel.kallsyms";
57348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), false);
57448f512ceSopenharmony_ci}
57548f512ceSopenharmony_ci
57648f512ceSopenharmony_ci/**
57748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_limit3
57848f512ceSopenharmony_ci * @tc.desc:
57948f512ceSopenharmony_ci * @tc.type: FUNC
58048f512ceSopenharmony_ci */
58148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_limit3, TestSize.Level1)
58248f512ceSopenharmony_ci{
58348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
58448f512ceSopenharmony_ci    stdoutRecord.Start();
58548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
58648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
58748f512ceSopenharmony_ci                                       "report_test.data --limit-percent -1"),
58848f512ceSopenharmony_ci              false);
58948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
59048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
59148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
59248f512ceSopenharmony_ci
59348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
59448f512ceSopenharmony_ci    if (HasFailure()) {
59548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
59648f512ceSopenharmony_ci    }
59748f512ceSopenharmony_ci    const std::string expectStr = "head limit error. must in (0 <= limit < 100)";
59848f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
59948f512ceSopenharmony_ci}
60048f512ceSopenharmony_ci
60148f512ceSopenharmony_ci/**
60248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_limit4
60348f512ceSopenharmony_ci * @tc.desc:
60448f512ceSopenharmony_ci * @tc.type: FUNC
60548f512ceSopenharmony_ci */
60648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_limit4, TestSize.Level1)
60748f512ceSopenharmony_ci{
60848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
60948f512ceSopenharmony_ci    stdoutRecord.Start();
61048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
61148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
61248f512ceSopenharmony_ci                                       "report_test.data --limit-percent 101"),
61348f512ceSopenharmony_ci              false);
61448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
61548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
61648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
61748f512ceSopenharmony_ci
61848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
61948f512ceSopenharmony_ci    if (HasFailure()) {
62048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
62148f512ceSopenharmony_ci    }
62248f512ceSopenharmony_ci    const std::string expectStr = "head limit error. must in (0 <= limit < 100)";
62348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
62448f512ceSopenharmony_ci}
62548f512ceSopenharmony_ci
62648f512ceSopenharmony_ci/**
62748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_callstack
62848f512ceSopenharmony_ci * @tc.desc:
62948f512ceSopenharmony_ci * @tc.type: FUNC
63048f512ceSopenharmony_ci */
63148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_callstack, TestSize.Level1)
63248f512ceSopenharmony_ci{
63348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
63448f512ceSopenharmony_ci    stdoutRecord.Start();
63548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
63648f512ceSopenharmony_ci    EXPECT_EQ(
63748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --call-stack"),
63848f512ceSopenharmony_ci        true);
63948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
64048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
64148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
64248f512ceSopenharmony_ci
64348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
64448f512ceSopenharmony_ci    if (HasFailure()) {
64548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
64648f512ceSopenharmony_ci    }
64748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_callstack.txt";
64848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
64948f512ceSopenharmony_ci}
65048f512ceSopenharmony_ci
65148f512ceSopenharmony_ci/**
65248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_comms
65348f512ceSopenharmony_ci * @tc.desc:
65448f512ceSopenharmony_ci * @tc.type: FUNC
65548f512ceSopenharmony_ci */
65648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_comms, TestSize.Level1)
65748f512ceSopenharmony_ci{
65848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
65948f512ceSopenharmony_ci    stdoutRecord.Start();
66048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
66148f512ceSopenharmony_ci    EXPECT_EQ(
66248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --comms hiperf"),
66348f512ceSopenharmony_ci        true);
66448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
66548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
66648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
66748f512ceSopenharmony_ci
66848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
66948f512ceSopenharmony_ci    if (HasFailure()) {
67048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
67148f512ceSopenharmony_ci    }
67248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_i.txt";
67348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
67448f512ceSopenharmony_ci}
67548f512ceSopenharmony_ci
67648f512ceSopenharmony_ci/**
67748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_pids
67848f512ceSopenharmony_ci * @tc.desc:
67948f512ceSopenharmony_ci * @tc.type: FUNC
68048f512ceSopenharmony_ci */
68148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_pids, TestSize.Level1)
68248f512ceSopenharmony_ci{
68348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
68448f512ceSopenharmony_ci    stdoutRecord.Start();
68548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
68648f512ceSopenharmony_ci    EXPECT_EQ(
68748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --pids 1204"),
68848f512ceSopenharmony_ci        true);
68948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
69048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
69148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
69248f512ceSopenharmony_ci
69348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
69448f512ceSopenharmony_ci    if (HasFailure()) {
69548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
69648f512ceSopenharmony_ci    }
69748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_i.txt";
69848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
69948f512ceSopenharmony_ci}
70048f512ceSopenharmony_ci
70148f512ceSopenharmony_ci/**
70248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_pids1
70348f512ceSopenharmony_ci * @tc.desc:
70448f512ceSopenharmony_ci * @tc.type: FUNC
70548f512ceSopenharmony_ci */
70648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_pids1, TestSize.Level1)
70748f512ceSopenharmony_ci{
70848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
70948f512ceSopenharmony_ci    stdoutRecord.Start();
71048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
71148f512ceSopenharmony_ci    EXPECT_EQ(
71248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --pids 485"),
71348f512ceSopenharmony_ci        true);
71448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
71548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
71648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
71748f512ceSopenharmony_ci
71848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
71948f512ceSopenharmony_ci    if (HasFailure()) {
72048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
72148f512ceSopenharmony_ci    }
72248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids1.txt";
72348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
72448f512ceSopenharmony_ci}
72548f512ceSopenharmony_ci
72648f512ceSopenharmony_ci/**
72748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_pids2
72848f512ceSopenharmony_ci * @tc.desc:
72948f512ceSopenharmony_ci * @tc.type: FUNC
73048f512ceSopenharmony_ci */
73148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_pids2, TestSize.Level1)
73248f512ceSopenharmony_ci{
73348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
73448f512ceSopenharmony_ci    stdoutRecord.Start();
73548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
73648f512ceSopenharmony_ci    EXPECT_EQ(
73748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --pids 11111"),
73848f512ceSopenharmony_ci        true);
73948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
74048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
74148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
74248f512ceSopenharmony_ci
74348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
74448f512ceSopenharmony_ci    if (HasFailure()) {
74548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
74648f512ceSopenharmony_ci    }
74748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids1.txt";
74848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
74948f512ceSopenharmony_ci}
75048f512ceSopenharmony_ci
75148f512ceSopenharmony_ci/**
75248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_pids3
75348f512ceSopenharmony_ci * @tc.desc:
75448f512ceSopenharmony_ci * @tc.type: FUNC
75548f512ceSopenharmony_ci */
75648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_pids3, TestSize.Level1)
75748f512ceSopenharmony_ci{
75848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
75948f512ceSopenharmony_ci    stdoutRecord.Start();
76048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
76148f512ceSopenharmony_ci    EXPECT_EQ(
76248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --pids -106"),
76348f512ceSopenharmony_ci        false);
76448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
76548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
76648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
76748f512ceSopenharmony_ci
76848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
76948f512ceSopenharmony_ci    if (HasFailure()) {
77048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
77148f512ceSopenharmony_ci    }
77248f512ceSopenharmony_ci    const std::string expectStr = "error number for pid";
77348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
77448f512ceSopenharmony_ci}
77548f512ceSopenharmony_ci
77648f512ceSopenharmony_ci/**
77748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_tids
77848f512ceSopenharmony_ci * @tc.desc:
77948f512ceSopenharmony_ci * @tc.type: FUNC
78048f512ceSopenharmony_ci */
78148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_tids, TestSize.Level1)
78248f512ceSopenharmony_ci{
78348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
78448f512ceSopenharmony_ci    stdoutRecord.Start();
78548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
78648f512ceSopenharmony_ci    EXPECT_EQ(
78748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --tids 1205"),
78848f512ceSopenharmony_ci        true);
78948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
79048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
79148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
79248f512ceSopenharmony_ci
79348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
79448f512ceSopenharmony_ci    if (HasFailure()) {
79548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
79648f512ceSopenharmony_ci    }
79748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids.txt";
79848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
79948f512ceSopenharmony_ci}
80048f512ceSopenharmony_ci
80148f512ceSopenharmony_ci/**
80248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_tids1
80348f512ceSopenharmony_ci * @tc.desc:
80448f512ceSopenharmony_ci * @tc.type: FUNC
80548f512ceSopenharmony_ci */
80648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_tids1, TestSize.Level1)
80748f512ceSopenharmony_ci{
80848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
80948f512ceSopenharmony_ci    stdoutRecord.Start();
81048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
81148f512ceSopenharmony_ci    EXPECT_EQ(
81248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --tids 905"),
81348f512ceSopenharmony_ci        true);
81448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
81548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
81648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
81748f512ceSopenharmony_ci
81848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
81948f512ceSopenharmony_ci    if (HasFailure()) {
82048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
82148f512ceSopenharmony_ci    }
82248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids1.txt";
82348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
82448f512ceSopenharmony_ci}
82548f512ceSopenharmony_ci
82648f512ceSopenharmony_ci/**
82748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_tids2
82848f512ceSopenharmony_ci * @tc.desc:
82948f512ceSopenharmony_ci * @tc.type: FUNC
83048f512ceSopenharmony_ci */
83148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_tids2, TestSize.Level1)
83248f512ceSopenharmony_ci{
83348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
83448f512ceSopenharmony_ci    stdoutRecord.Start();
83548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
83648f512ceSopenharmony_ci    EXPECT_EQ(
83748f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --tids 11111"),
83848f512ceSopenharmony_ci        true);
83948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
84048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
84148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
84248f512ceSopenharmony_ci
84348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
84448f512ceSopenharmony_ci    if (HasFailure()) {
84548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
84648f512ceSopenharmony_ci    }
84748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids1.txt";
84848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
84948f512ceSopenharmony_ci}
85048f512ceSopenharmony_ci
85148f512ceSopenharmony_ci/**
85248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_tids3
85348f512ceSopenharmony_ci * @tc.desc:
85448f512ceSopenharmony_ci * @tc.type: FUNC
85548f512ceSopenharmony_ci */
85648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_tids3, TestSize.Level1)
85748f512ceSopenharmony_ci{
85848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
85948f512ceSopenharmony_ci    stdoutRecord.Start();
86048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
86148f512ceSopenharmony_ci    EXPECT_EQ(
86248f512ceSopenharmony_ci        Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --tids -109"),
86348f512ceSopenharmony_ci        false);
86448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
86548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
86648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
86748f512ceSopenharmony_ci
86848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
86948f512ceSopenharmony_ci    if (HasFailure()) {
87048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
87148f512ceSopenharmony_ci    }
87248f512ceSopenharmony_ci    const std::string expectStr = "error number for tid";
87348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
87448f512ceSopenharmony_ci}
87548f512ceSopenharmony_ci
87648f512ceSopenharmony_ci/**
87748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_dsos
87848f512ceSopenharmony_ci * @tc.desc:
87948f512ceSopenharmony_ci * @tc.type: FUNC
88048f512ceSopenharmony_ci */
88148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_dsos, TestSize.Level1)
88248f512ceSopenharmony_ci{
88348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
88448f512ceSopenharmony_ci    stdoutRecord.Start();
88548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
88648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
88748f512ceSopenharmony_ci                                       "report_test.data --dsos [kernel.kallsyms]"),
88848f512ceSopenharmony_ci              true);
88948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
89048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
89148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
89248f512ceSopenharmony_ci
89348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
89448f512ceSopenharmony_ci    if (HasFailure()) {
89548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
89648f512ceSopenharmony_ci    }
89748f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_dsos.txt";
89848f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
89948f512ceSopenharmony_ci}
90048f512ceSopenharmony_ci
90148f512ceSopenharmony_ci/**
90248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_dsos1
90348f512ceSopenharmony_ci * @tc.desc:
90448f512ceSopenharmony_ci * @tc.type: FUNC
90548f512ceSopenharmony_ci */
90648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_dsos1, TestSize.Level1)
90748f512ceSopenharmony_ci{
90848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
90948f512ceSopenharmony_ci    stdoutRecord.Start();
91048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
91148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
91248f512ceSopenharmony_ci                                       "report_test.data --dsos /system/lib/libcamera.so"),
91348f512ceSopenharmony_ci              true);
91448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
91548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
91648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
91748f512ceSopenharmony_ci
91848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
91948f512ceSopenharmony_ci    if (HasFailure()) {
92048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
92148f512ceSopenharmony_ci    }
92248f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_tids1.txt";
92348f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
92448f512ceSopenharmony_ci}
92548f512ceSopenharmony_ci
92648f512ceSopenharmony_ci/**
92748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_dsos2
92848f512ceSopenharmony_ci * @tc.desc:
92948f512ceSopenharmony_ci * @tc.type: FUNC
93048f512ceSopenharmony_ci */
93148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_dsos2, TestSize.Level1)
93248f512ceSopenharmony_ci{
93348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
93448f512ceSopenharmony_ci    stdoutRecord.Start();
93548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
93648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --dso"),
93748f512ceSopenharmony_ci              false);
93848f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
93948f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
94048f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
94148f512ceSopenharmony_ci
94248f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
94348f512ceSopenharmony_ci    if (HasFailure()) {
94448f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
94548f512ceSopenharmony_ci    }
94648f512ceSopenharmony_ci    const std::string expectStr = "unknown option";
94748f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
94848f512ceSopenharmony_ci}
94948f512ceSopenharmony_ci
95048f512ceSopenharmony_ci/**
95148f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_funcs
95248f512ceSopenharmony_ci * @tc.desc:
95348f512ceSopenharmony_ci * @tc.type: FUNC
95448f512ceSopenharmony_ci */
95548f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_funcs, TestSize.Level1)
95648f512ceSopenharmony_ci{
95748f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
95848f512ceSopenharmony_ci    stdoutRecord.Start();
95948f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
96048f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
96148f512ceSopenharmony_ci                                       "report_test.data --funcs finish_task_switch"),
96248f512ceSopenharmony_ci              true);
96348f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
96448f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
96548f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
96648f512ceSopenharmony_ci
96748f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
96848f512ceSopenharmony_ci    if (HasFailure()) {
96948f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
97048f512ceSopenharmony_ci    }
97148f512ceSopenharmony_ci    std::string targetFile = RESOURCE_PATH + "report_test_funcs.txt";
97248f512ceSopenharmony_ci    EXPECT_EQ(FileCompare(stringOut, targetFile), true);
97348f512ceSopenharmony_ci}
97448f512ceSopenharmony_ci
97548f512ceSopenharmony_ci/**
97648f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_funcs1
97748f512ceSopenharmony_ci * @tc.desc:
97848f512ceSopenharmony_ci * @tc.type: FUNC
97948f512ceSopenharmony_ci */
98048f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_funcs1, TestSize.Level1)
98148f512ceSopenharmony_ci{
98248f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
98348f512ceSopenharmony_ci    stdoutRecord.Start();
98448f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
98548f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --func"),
98648f512ceSopenharmony_ci              false);
98748f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
98848f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
98948f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
99048f512ceSopenharmony_ci
99148f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
99248f512ceSopenharmony_ci    if (HasFailure()) {
99348f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
99448f512ceSopenharmony_ci    }
99548f512ceSopenharmony_ci    const std::string expectStr = "unknown option";
99648f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
99748f512ceSopenharmony_ci}
99848f512ceSopenharmony_ci
99948f512ceSopenharmony_ci/**
100048f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_json
100148f512ceSopenharmony_ci * @tc.desc:
100248f512ceSopenharmony_ci * @tc.type: FUNC
100348f512ceSopenharmony_ci */
100448f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_json, TestSize.Level1)
100548f512ceSopenharmony_ci{
100648f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
100748f512ceSopenharmony_ci    stdoutRecord.Start();
100848f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
100948f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --json"),
101048f512ceSopenharmony_ci              true);
101148f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
101248f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
101348f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
101448f512ceSopenharmony_ci
101548f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
101648f512ceSopenharmony_ci    if (HasFailure()) {
101748f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
101848f512ceSopenharmony_ci    }
101948f512ceSopenharmony_ci    const std::string expectStr = "report will save at 'perf.json'";
102048f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
102148f512ceSopenharmony_ci}
102248f512ceSopenharmony_ci
102348f512ceSopenharmony_ci/**
102448f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_json1
102548f512ceSopenharmony_ci * @tc.desc:
102648f512ceSopenharmony_ci * @tc.type: FUNC
102748f512ceSopenharmony_ci */
102848f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_json1, TestSize.Level1)
102948f512ceSopenharmony_ci{
103048f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
103148f512ceSopenharmony_ci    stdoutRecord.Start();
103248f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
103348f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "perf1.data --json"), false);
103448f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
103548f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
103648f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
103748f512ceSopenharmony_ci
103848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
103948f512ceSopenharmony_ci    if (HasFailure()) {
104048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
104148f512ceSopenharmony_ci    }
104248f512ceSopenharmony_ci    const std::string expectStr =
104348f512ceSopenharmony_ci        "Can not access data file /data/test/resource/testdata/perf1.data";
104448f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
104548f512ceSopenharmony_ci}
104648f512ceSopenharmony_ci
104748f512ceSopenharmony_ci/**
104848f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_proto
104948f512ceSopenharmony_ci * @tc.desc:
105048f512ceSopenharmony_ci * @tc.type: FUNC
105148f512ceSopenharmony_ci */
105248f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_proto, TestSize.Level1)
105348f512ceSopenharmony_ci{
105448f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
105548f512ceSopenharmony_ci    stdoutRecord.Start();
105648f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
105748f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data --proto"),
105848f512ceSopenharmony_ci              true);
105948f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
106048f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
106148f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
106248f512ceSopenharmony_ci
106348f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
106448f512ceSopenharmony_ci    if (HasFailure()) {
106548f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
106648f512ceSopenharmony_ci    }
106748f512ceSopenharmony_ci    const std::string expectStr = "create proto buf file succeed";
106848f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
106948f512ceSopenharmony_ci}
107048f512ceSopenharmony_ci
107148f512ceSopenharmony_ci/**
107248f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_proto1
107348f512ceSopenharmony_ci * @tc.desc:
107448f512ceSopenharmony_ci * @tc.type: FUNC
107548f512ceSopenharmony_ci */
107648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_proto1, TestSize.Level1)
107748f512ceSopenharmony_ci{
107848f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
107948f512ceSopenharmony_ci    stdoutRecord.Start();
108048f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
108148f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "perf1.data --proto"), false);
108248f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
108348f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
108448f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
108548f512ceSopenharmony_ci
108648f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
108748f512ceSopenharmony_ci    if (HasFailure()) {
108848f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
108948f512ceSopenharmony_ci    }
109048f512ceSopenharmony_ci    const std::string expectStr =
109148f512ceSopenharmony_ci        "Can not access data file /data/test/resource/testdata/perf1.data";
109248f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
109348f512ceSopenharmony_ci}
109448f512ceSopenharmony_ci
109548f512ceSopenharmony_ci/**
109648f512ceSopenharmony_ci * @tc.name: TestLoadPerfData
109748f512ceSopenharmony_ci * @tc.desc:
109848f512ceSopenharmony_ci * @tc.type: FUNC
109948f512ceSopenharmony_ci */
110048f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestLoadPerfData, TestSize.Level1)
110148f512ceSopenharmony_ci{
110248f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data -o " +
110348f512ceSopenharmony_ci                                       RESOURCE_PATH + "perfnew2.data"),
110448f512ceSopenharmony_ci              true);
110548f512ceSopenharmony_ci    EXPECT_EQ(IsPath(RESOURCE_PATH + "report_test.data"), true);
110648f512ceSopenharmony_ci}
110748f512ceSopenharmony_ci
110848f512ceSopenharmony_ci/**
110948f512ceSopenharmony_ci * @tc.name: TestOutputReport
111048f512ceSopenharmony_ci * @tc.desc:
111148f512ceSopenharmony_ci * @tc.type: FUNC
111248f512ceSopenharmony_ci */
111348f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOutputReport, TestSize.Level1)
111448f512ceSopenharmony_ci{
111548f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH + "report_test.data -o " +
111648f512ceSopenharmony_ci                                       RESOURCE_PATH + "perfnew2.data"),
111748f512ceSopenharmony_ci              true);
111848f512ceSopenharmony_ci    EXPECT_EQ(IsPath(RESOURCE_PATH + "perfnew2.data"), true);
111948f512ceSopenharmony_ci}
112048f512ceSopenharmony_ci
112148f512ceSopenharmony_ci/**
112248f512ceSopenharmony_ci * @tc.name: TestVerifyOption
112348f512ceSopenharmony_ci * @tc.desc:
112448f512ceSopenharmony_ci * @tc.type: FUNC
112548f512ceSopenharmony_ci */
112648f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestVerifyOption, TestSize.Level1)
112748f512ceSopenharmony_ci{
112848f512ceSopenharmony_ci    SubCommandReport mSubCommandReport;
112948f512ceSopenharmony_ci    std::string recordFile;
113048f512ceSopenharmony_ci    std::vector<std::string> args;
113148f512ceSopenharmony_ci    args = {"report", "-i", RESOURCE_PATH + "/report_test.data", "--limit-percent", "60"};
113248f512ceSopenharmony_ci    ASSERT_EQ(
113348f512ceSopenharmony_ci        Option::GetOptionValue(args, "--limit-percent", mSubCommandReport.reportOption_.heatLimit_),
113448f512ceSopenharmony_ci        true);
113548f512ceSopenharmony_ci    ASSERT_EQ(Option::GetOptionValue(args, "-i", recordFile), true);
113648f512ceSopenharmony_ci
113748f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.VerifyOption(), true);
113848f512ceSopenharmony_ci
113948f512ceSopenharmony_ci    mSubCommandReport.FlushCacheRecord();
114048f512ceSopenharmony_ci
114148f512ceSopenharmony_ci    mSubCommandReport.reportOption_.heatLimit_ = 101.0;
114248f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.VerifyOption(), false);
114348f512ceSopenharmony_ci}
114448f512ceSopenharmony_ci
114548f512ceSopenharmony_ci/**
114648f512ceSopenharmony_ci * @tc.name: TestVerifyDisplayOption
114748f512ceSopenharmony_ci * @tc.desc:
114848f512ceSopenharmony_ci * @tc.type: FUNC
114948f512ceSopenharmony_ci */
115048f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestVerifyDisplayOption, TestSize.Level1)
115148f512ceSopenharmony_ci{
115248f512ceSopenharmony_ci    SubCommandReport mSubCommandReport;
115348f512ceSopenharmony_ci    std::string recordFile;
115448f512ceSopenharmony_ci    std::vector<std::string> args;
115548f512ceSopenharmony_ci    args = {"report", "-i", RESOURCE_PATH + "report_test.data ", "--pids", "-1"};
115648f512ceSopenharmony_ci    ASSERT_EQ(Option::GetOptionValue(args, "--pids", mSubCommandReport.reportOption_.displayPids_),
115748f512ceSopenharmony_ci              true);
115848f512ceSopenharmony_ci    ASSERT_EQ(Option::GetOptionValue(args, "-i", recordFile), true);
115948f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.VerifyDisplayOption(), false);
116048f512ceSopenharmony_ci
116148f512ceSopenharmony_ci    mSubCommandReport.reportOption_.displayPids_.clear();
116248f512ceSopenharmony_ci    args = {"report -i " + RESOURCE_PATH + "report_test.data --pids "};
116348f512ceSopenharmony_ci    EXPECT_EQ(mSubCommandReport.VerifyDisplayOption(), true);
116448f512ceSopenharmony_ci}
116548f512ceSopenharmony_ci
116648f512ceSopenharmony_ci/**
116748f512ceSopenharmony_ci * @tc.name: TestDwarfCompress
116848f512ceSopenharmony_ci * @tc.desc:
116948f512ceSopenharmony_ci * @tc.type: FUNC
117048f512ceSopenharmony_ci */
117148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestDwarfCompress, TestSize.Level1)
117248f512ceSopenharmony_ci{
117348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
117448f512ceSopenharmony_ci    stdoutRecord.Start();
117548f512ceSopenharmony_ci    EXPECT_EQ(
117648f512ceSopenharmony_ci        Command::DispatchCommand("report -s -i " + RESOURCE_PATH + "dwarf.compress.data"),
117748f512ceSopenharmony_ci        true);
117848f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
117948f512ceSopenharmony_ci    if (HasFailure()) {
118048f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
118148f512ceSopenharmony_ci    }
118248f512ceSopenharmony_ci    const std::string expectStr = "--dedup_stack";
118348f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
118448f512ceSopenharmony_ci    const std::string expectPercentageStr = "|- 28.67% futex_wait_queue_me";
118548f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectPercentageStr), true);
118648f512ceSopenharmony_ci}
118748f512ceSopenharmony_ci
118848f512ceSopenharmony_ci/**
118948f512ceSopenharmony_ci * @tc.name: TestFpCompress
119048f512ceSopenharmony_ci * @tc.desc:
119148f512ceSopenharmony_ci * @tc.type: FUNC
119248f512ceSopenharmony_ci */
119348f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestFpCompress, TestSize.Level1)
119448f512ceSopenharmony_ci{
119548f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
119648f512ceSopenharmony_ci    stdoutRecord.Start();
119748f512ceSopenharmony_ci    EXPECT_EQ(
119848f512ceSopenharmony_ci        Command::DispatchCommand("report -s -i " + RESOURCE_PATH + "fp.compress.data"),
119948f512ceSopenharmony_ci        true);
120048f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
120148f512ceSopenharmony_ci    if (HasFailure()) {
120248f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
120348f512ceSopenharmony_ci    }
120448f512ceSopenharmony_ci    const std::string expectStr = "--dedup_stack";
120548f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), true);
120648f512ceSopenharmony_ci    const std::string expectPercentageStr = "el0_sync_compat_handler";
120748f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectPercentageStr), true);
120848f512ceSopenharmony_ci}
120948f512ceSopenharmony_ci
121048f512ceSopenharmony_ci/**
121148f512ceSopenharmony_ci * @tc.name: TestDwarfUnCompress
121248f512ceSopenharmony_ci * @tc.desc:
121348f512ceSopenharmony_ci * @tc.type: FUNC
121448f512ceSopenharmony_ci */
121548f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestDwarfUnCompress, TestSize.Level1)
121648f512ceSopenharmony_ci{
121748f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
121848f512ceSopenharmony_ci    stdoutRecord.Start();
121948f512ceSopenharmony_ci    EXPECT_EQ(
122048f512ceSopenharmony_ci        Command::DispatchCommand("report -s -i " + RESOURCE_PATH + "dwarf.uncompress.data"),
122148f512ceSopenharmony_ci        true);
122248f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
122348f512ceSopenharmony_ci    if (HasFailure()) {
122448f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
122548f512ceSopenharmony_ci    }
122648f512ceSopenharmony_ci    const std::string expectStr = "--dedup_stack";
122748f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), false);
122848f512ceSopenharmony_ci    const std::string expectPercentageStr = "|-  7.63% __schedule";
122948f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectPercentageStr), true);
123048f512ceSopenharmony_ci}
123148f512ceSopenharmony_ci
123248f512ceSopenharmony_ci/**
123348f512ceSopenharmony_ci * @tc.name: TestFpUnCompress
123448f512ceSopenharmony_ci * @tc.desc:
123548f512ceSopenharmony_ci * @tc.type: FUNC
123648f512ceSopenharmony_ci */
123748f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestFpUnCompress, TestSize.Level1)
123848f512ceSopenharmony_ci{
123948f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
124048f512ceSopenharmony_ci    stdoutRecord.Start();
124148f512ceSopenharmony_ci    EXPECT_EQ(
124248f512ceSopenharmony_ci        Command::DispatchCommand("report -s -i " + RESOURCE_PATH + "fp.uncompress.data"),
124348f512ceSopenharmony_ci        true);
124448f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
124548f512ceSopenharmony_ci    if (HasFailure()) {
124648f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
124748f512ceSopenharmony_ci    }
124848f512ceSopenharmony_ci    const std::string expectStr = "--dedup_stack";
124948f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectStr), false);
125048f512ceSopenharmony_ci    const std::string expectPercentageStr = "|- 53.27% __kmalloc_reserve";
125148f512ceSopenharmony_ci    EXPECT_EQ(FindExpectStr(stringOut, expectPercentageStr), true);
125248f512ceSopenharmony_ci}
125348f512ceSopenharmony_ci
125448f512ceSopenharmony_ci/**
125548f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_from_funcs_fail
125648f512ceSopenharmony_ci * @tc.desc:
125748f512ceSopenharmony_ci * @tc.type: FUNC
125848f512ceSopenharmony_ci */
125948f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_from_funcs_fail, TestSize.Level1)
126048f512ceSopenharmony_ci{
126148f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
126248f512ceSopenharmony_ci    stdoutRecord.Start();
126348f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
126448f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i " + RESOURCE_PATH +
126548f512ceSopenharmony_ci                                       "report_test.data --from_funcs"),
126648f512ceSopenharmony_ci              false);
126748f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
126848f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
126948f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
127048f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
127148f512ceSopenharmony_ci    if (HasFailure()) {
127248f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
127348f512ceSopenharmony_ci    }
127448f512ceSopenharmony_ci}
127548f512ceSopenharmony_ci
127648f512ceSopenharmony_ci/**
127748f512ceSopenharmony_ci * @tc.name: TestOnSubCommand_offcpu
127848f512ceSopenharmony_ci * @tc.desc:
127948f512ceSopenharmony_ci * @tc.type: FUNC
128048f512ceSopenharmony_ci */
128148f512ceSopenharmony_ciHWTEST_F(SubCommandReportTest, TestOnSubCommand_offcpu, TestSize.Level1)
128248f512ceSopenharmony_ci{
128348f512ceSopenharmony_ci    StdoutRecord stdoutRecord;
128448f512ceSopenharmony_ci    stdoutRecord.Start();
128548f512ceSopenharmony_ci    const auto startTime = chrono::steady_clock::now();
128648f512ceSopenharmony_ci    EXPECT_EQ(Command::DispatchCommand("report -i /data/local/tmp/offcpu_perf.data"), true);
128748f512ceSopenharmony_ci    const auto costMs = std::chrono::duration_cast<std::chrono::milliseconds>(
128848f512ceSopenharmony_ci        chrono::steady_clock::now() - startTime);
128948f512ceSopenharmony_ci    EXPECT_LE(costMs.count(), DEFAULT_RUN_TIMEOUT_MS);
129048f512ceSopenharmony_ci    std::string stringOut = stdoutRecord.Stop();
129148f512ceSopenharmony_ci    if (HasFailure()) {
129248f512ceSopenharmony_ci        printf("output:\n%s", stringOut.c_str());
129348f512ceSopenharmony_ci    }
129448f512ceSopenharmony_ci}
129548f512ceSopenharmony_ci} // namespace HiPerf
129648f512ceSopenharmony_ci} // namespace Developtools
129748f512ceSopenharmony_ci} // namespace OHOS
1298