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