1 /* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #include <fstream> 16 #include <gtest/gtest.h> 17 #include <random> 18 #include <string> 19 20 #include "ftrace_data_reader.h" 21 22 using FTRACE_NS::FtraceDataReader; 23 using testing::ext::TestSize; 24 25 namespace { 26 constexpr char RANDOM_CHAR_TABLE[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 27 constexpr long RANDOM_CHAR_NUMBER = std::size(RANDOM_CHAR_TABLE) - 1; 28 constexpr int RAW_DATA_SIZE = 1024 * 1024; 29 #ifndef PAGE_SIZE 30 constexpr uint32_t PAGE_SIZE = 4096; 31 #endif 32 33 class FtraceDataReaderTest : public ::testing::Test { 34 protected: 35 std::mt19937 gen_; 36 std::string path_ = "raw_data.bin"; 37 long dataSize_ = RAW_DATA_SIZE; 38 SetUp()39 void SetUp() override 40 { 41 std::ofstream fout(path_); 42 std::string data = RandomString(dataSize_); 43 fout.write(data.data(), data.size()); 44 } 45 TearDown()46 void TearDown() override 47 { 48 unlink(path_.c_str()); 49 } 50 RandomInt(int a,int b)51 int RandomInt(int a, int b) 52 { 53 std::uniform_int_distribution<int> distrib(a, b); 54 return distrib(gen_); 55 } 56 RandomChar()57 char RandomChar() 58 { 59 return RANDOM_CHAR_TABLE[RandomInt(0, RANDOM_CHAR_NUMBER - 1)]; 60 } 61 RandomString(int len)62 std::string RandomString(int len) 63 { 64 std::string str; 65 str.reserve(len); 66 for (int i = 0; i < len; i++) { 67 str.push_back(RandomChar()); 68 } 69 return str; 70 } 71 }; 72 73 /* 74 * @tc.name: ReadNormal 75 * @tc.desc: test FtraceDataReader::Read with normal case. 76 * @tc.type: FUNC 77 */ 78 HWTEST_F(FtraceDataReaderTest, ReadNormal, TestSize.Level1) 79 { 80 FtraceDataReader reader(path_); 81 std::vector<uint8_t> zeros(PAGE_SIZE, 0); 82 std::vector<uint8_t> buffer(PAGE_SIZE, 0); 83 84 for (long i = 0; i < dataSize_; i += buffer.size()) { 85 long bufferSize = static_cast<long>(buffer.size()); 86 EXPECT_EQ(reader.Read(buffer.data(), buffer.size()), bufferSize); 87 EXPECT_NE(buffer, zeros); 88 } 89 } 90 } // namespace