148f512ceSopenharmony_ci/* 248f512ceSopenharmony_ci * Copyright (c) 2021 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 "perf_file_writer_test.h" 1748f512ceSopenharmony_ci 1848f512ceSopenharmony_ci#include "virtual_runtime.h" 1948f512ceSopenharmony_ci 2048f512ceSopenharmony_ciusing namespace testing::ext; 2148f512ceSopenharmony_ciusing namespace std; 2248f512ceSopenharmony_ciusing namespace OHOS::HiviewDFX; 2348f512ceSopenharmony_ci 2448f512ceSopenharmony_cinamespace OHOS { 2548f512ceSopenharmony_cinamespace Developtools { 2648f512ceSopenharmony_cinamespace HiPerf { 2748f512ceSopenharmony_ciconst uint TESTRECORDCOUNT = 10; 2848f512ceSopenharmony_ci 2948f512ceSopenharmony_ciclass PerfFileWriterTest : public testing::Test { 3048f512ceSopenharmony_cipublic: 3148f512ceSopenharmony_ci static void SetUpTestCase(void); 3248f512ceSopenharmony_ci static void TearDownTestCase(void); 3348f512ceSopenharmony_ci void SetUp(); 3448f512ceSopenharmony_ci void TearDown(); 3548f512ceSopenharmony_ci 3648f512ceSopenharmony_ci static void TestEventDescInit(std::vector<AttrWithId> &eventDesc); 3748f512ceSopenharmony_ci static const uint32_t TESTNUMBER1 = 1; 3848f512ceSopenharmony_ci static const uint32_t TESTNUMBER2 = 2; 3948f512ceSopenharmony_ci static const uint32_t TESTNUMBER3 = 3; 4048f512ceSopenharmony_ci static const uint32_t TESTNUMBER4 = 4; 4148f512ceSopenharmony_ci static const uint32_t TESTNUMBER5 = 5; 4248f512ceSopenharmony_ci}; 4348f512ceSopenharmony_ci 4448f512ceSopenharmony_civoid PerfFileWriterTest::SetUpTestCase() {} 4548f512ceSopenharmony_ci 4648f512ceSopenharmony_civoid PerfFileWriterTest::TearDownTestCase() {} 4748f512ceSopenharmony_ci 4848f512ceSopenharmony_civoid PerfFileWriterTest::SetUp() {} 4948f512ceSopenharmony_ci 5048f512ceSopenharmony_civoid PerfFileWriterTest::TearDown() {} 5148f512ceSopenharmony_ci 5248f512ceSopenharmony_ci/** 5348f512ceSopenharmony_ci * @tc.name: Test 5448f512ceSopenharmony_ci * @tc.desc: push several records of all type into the buffer 5548f512ceSopenharmony_ci * @tc.type: FUNC 5648f512ceSopenharmony_ci */ 5748f512ceSopenharmony_civoid PerfFileWriterTest::TestEventDescInit(std::vector<AttrWithId> &eventDesc) 5848f512ceSopenharmony_ci{ 5948f512ceSopenharmony_ci for (uint32_t nr = TESTNUMBER2; nr > 0; nr--) { 6048f512ceSopenharmony_ci auto &item = eventDesc.emplace_back(); 6148f512ceSopenharmony_ci item.attr = {}; 6248f512ceSopenharmony_ci item.attr.size = 0; 6348f512ceSopenharmony_ci item.attr.type = TESTNUMBER1 * nr; 6448f512ceSopenharmony_ci item.attr.config = TESTNUMBER2 * nr; 6548f512ceSopenharmony_ci item.attr.__reserved_2 = TESTNUMBER3 * nr; 6648f512ceSopenharmony_ci item.ids = {TESTNUMBER4 * nr, TESTNUMBER5 * nr}; 6748f512ceSopenharmony_ci item.name = "test event desc"; 6848f512ceSopenharmony_ci } 6948f512ceSopenharmony_ci} 7048f512ceSopenharmony_ci 7148f512ceSopenharmony_ciHWTEST_F(PerfFileWriterTest, TestFileWriter_Normal, TestSize.Level1) 7248f512ceSopenharmony_ci{ 7348f512ceSopenharmony_ci std::string filename = "./TestFileWriter_Normal"; 7448f512ceSopenharmony_ci PerfFileWriter fileWriter; 7548f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Open(filename)) << "current path no write permission?"; 7648f512ceSopenharmony_ci 7748f512ceSopenharmony_ci std::vector<AttrWithId> attrIds; 7848f512ceSopenharmony_ci AttrWithId attrId; 7948f512ceSopenharmony_ci perf_event_attr attr; 8048f512ceSopenharmony_ci attrId.attr = attr; 8148f512ceSopenharmony_ci attrId.ids.emplace_back(0); 8248f512ceSopenharmony_ci attrIds.emplace_back(attrId); 8348f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.WriteAttrAndId(attrIds)); 8448f512ceSopenharmony_ci 8548f512ceSopenharmony_ci uint64_t dataSize = 0; 8648f512ceSopenharmony_ci for (uint i = 0; i < TESTRECORDCOUNT; i++) { 8748f512ceSopenharmony_ci std::string testStr = "testFeature " + std::to_string(i); 8848f512ceSopenharmony_ci PerfRecordMmap recordmmap(true, i, i, i, i, i, testStr); 8948f512ceSopenharmony_ci dataSize += recordmmap.GetSize(); 9048f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.WriteRecord(recordmmap)); 9148f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddStringFeature(FEATURE::RESERVED, testStr)); 9248f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddNrCpusFeature(FEATURE::RESERVED, 0, TESTNUMBER1)); 9348f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddU64Feature(FEATURE::RESERVED, TESTNUMBER2)); 9448f512ceSopenharmony_ci std::vector<AttrWithId> eventDesces; 9548f512ceSopenharmony_ci TestEventDescInit(eventDesces); 9648f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddEventDescFeature(FEATURE::RESERVED, eventDesces)); 9748f512ceSopenharmony_ci VirtualRuntime vr; 9848f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddSymbolsFeature(vr.GetSymbolsFiles())); 9948f512ceSopenharmony_ci } 10048f512ceSopenharmony_ci ASSERT_EQ(fileWriter.GetDataSize(), dataSize); 10148f512ceSopenharmony_ci ASSERT_EQ(fileWriter.GetRecordCount(), TESTRECORDCOUNT); 10248f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Close()); 10348f512ceSopenharmony_ci // check file 10448f512ceSopenharmony_ci ASSERT_TRUE((access(filename.c_str(), F_OK) == 0)); 10548f512ceSopenharmony_ci} 10648f512ceSopenharmony_ci 10748f512ceSopenharmony_ciHWTEST_F(PerfFileWriterTest, TestFileWriter_Compress, TestSize.Level1) 10848f512ceSopenharmony_ci{ 10948f512ceSopenharmony_ci std::string filename = "./TestFileWriter_Compress"; 11048f512ceSopenharmony_ci PerfFileWriter fileWriter; 11148f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Open(filename, true)) << "current path no write permission?"; 11248f512ceSopenharmony_ci 11348f512ceSopenharmony_ci std::vector<AttrWithId> attrIds; 11448f512ceSopenharmony_ci AttrWithId attrId; 11548f512ceSopenharmony_ci perf_event_attr attr; 11648f512ceSopenharmony_ci attrId.attr = attr; 11748f512ceSopenharmony_ci attrId.ids.emplace_back(0); 11848f512ceSopenharmony_ci attrIds.emplace_back(attrId); 11948f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.WriteAttrAndId(attrIds)); 12048f512ceSopenharmony_ci 12148f512ceSopenharmony_ci uint64_t dataSize = 0; 12248f512ceSopenharmony_ci for (uint i = 0; i < TESTRECORDCOUNT; i++) { 12348f512ceSopenharmony_ci std::string testStr = "testFeature " + std::to_string(i); 12448f512ceSopenharmony_ci PerfRecordMmap recordmmap(true, i, i, i, i, i, testStr); 12548f512ceSopenharmony_ci dataSize += recordmmap.GetSize(); 12648f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.WriteRecord(recordmmap)); 12748f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddStringFeature(FEATURE::RESERVED, testStr)); 12848f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddNrCpusFeature(FEATURE::RESERVED, 0, TESTNUMBER1)); 12948f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddU64Feature(FEATURE::RESERVED, TESTNUMBER2)); 13048f512ceSopenharmony_ci VirtualRuntime vr; 13148f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddSymbolsFeature(vr.GetSymbolsFiles())); 13248f512ceSopenharmony_ci } 13348f512ceSopenharmony_ci ASSERT_EQ(fileWriter.GetDataSize(), dataSize); 13448f512ceSopenharmony_ci ASSERT_EQ(fileWriter.GetRecordCount(), TESTRECORDCOUNT); 13548f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Close()); 13648f512ceSopenharmony_ci // check file 13748f512ceSopenharmony_ci ASSERT_TRUE((access(filename.c_str(), F_OK) == 0)); 13848f512ceSopenharmony_ci filename += ".gz"; 13948f512ceSopenharmony_ci ASSERT_TRUE((access(filename.c_str(), F_OK) != 0)); 14048f512ceSopenharmony_ci} 14148f512ceSopenharmony_ci 14248f512ceSopenharmony_ciHWTEST_F(PerfFileWriterTest, TestFileWriter_NoWriteAttrAndId, TestSize.Level1) 14348f512ceSopenharmony_ci{ 14448f512ceSopenharmony_ci std::string filename = "./TestFileWriter_NoWriteAttrAndId"; 14548f512ceSopenharmony_ci PerfFileWriter fileWriter; 14648f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Open(filename)) << "current path no write permission?"; 14748f512ceSopenharmony_ci 14848f512ceSopenharmony_ci for (uint i = 0; i < TESTRECORDCOUNT; i++) { 14948f512ceSopenharmony_ci std::string testStr = "test " + std::to_string(i); 15048f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddStringFeature(FEATURE::RESERVED, testStr)); 15148f512ceSopenharmony_ci VirtualRuntime vr; 15248f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.AddSymbolsFeature(vr.GetSymbolsFiles())); 15348f512ceSopenharmony_ci } 15448f512ceSopenharmony_ci 15548f512ceSopenharmony_ci std::string testStr = "testFeature "; 15648f512ceSopenharmony_ci PerfRecordMmap recordmmap(true, 0, 0, 0, 0, 0, testStr); 15748f512ceSopenharmony_ci ASSERT_FALSE(fileWriter.WriteRecord(recordmmap)); 15848f512ceSopenharmony_ci ASSERT_TRUE(fileWriter.Close()); 15948f512ceSopenharmony_ci // check file 16048f512ceSopenharmony_ci ASSERT_TRUE((access(filename.c_str(), F_OK) == 0)); 16148f512ceSopenharmony_ci} 16248f512ceSopenharmony_ci} // namespace HiPerf 16348f512ceSopenharmony_ci} // namespace Developtools 16448f512ceSopenharmony_ci} // namespace OHOS 165