• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
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 <string>
16 #include <thread>
17 
18 #include <gtest/gtest.h>
19 
20 #include "bpf_controller.h"
21 
22 using namespace testing::ext;
23 
24 namespace {
25 constexpr int ROUND_COUNT = 1000;
26 constexpr int BUF_SIZE = 512;
27 const std::string FILE_NAME = "/data/local/tmp/hiebpf.txt";
28 const std::string HIEBPF_FILE_NAME = "/data/local/tmp/hiebpf.data";
29 constexpr int FILE_MODE = 0644;
30 } // namespace
31 
32 namespace OHOS {
33 namespace Developtools {
34 namespace Hiebpf {
35 class BpfControllerTest : public ::testing::Test {
36 public:
SetUpTestCase()37     static void SetUpTestCase() {};
TearDownTestCase()38     static void TearDownTestCase()
39     {
40         if (access(FILE_NAME.c_str(), F_OK) == 0) {
41             std::string cmd = "rm " + FILE_NAME;
42             system(cmd.c_str());
43         }
44         if (access(HIEBPF_FILE_NAME.c_str(), F_OK) == 0) {
45             std::string cmd = "rm " + HIEBPF_FILE_NAME;
46             system(cmd.c_str());
47         }
48     }
49 
SetUp()50     void SetUp() {}
TearDown()51     void TearDown() {}
52 };
53 
54 /**
55  * @tc.name: Normal
56  * @tc.desc: Test framework
57  * @tc.type: FUNC
58  */
59 HWTEST_F(BpfControllerTest, Normal, TestSize.Level1)
60 {
61     BPFConfig cfg;
62     cfg.selectEventGroups_.insert(HiebpfEventGroup::FS_GROUP_ALL);
63     cfg.selectEventGroups_.insert(HiebpfEventGroup::MEM_GROUP_ALL);
64     cfg.selectEventGroups_.insert(HiebpfEventGroup::BIO_GROUP_ALL);
65     cfg.LIBBPFLogLevel_ = LIBBPF_NONE;
66     cfg.BPFLogLevel_ = BPF_LOG_NONE;
67     const uint32_t duration = 10;
68     cfg.traceDuration_ = duration;
69     std::unique_ptr<BPFController> pCtx = BPFController::MakeUnique(cfg);
70     ASSERT_TRUE(pCtx != nullptr);
__anonc31d7daf0202() 71     std::thread threadContol([&pCtx]() {
72         ASSERT_EQ(pCtx->Start(), 0);
73     });
74     sleep(1);
75 
76     // create fs/bio data
77     int fd = open(FILE_NAME.c_str(), O_RDWR | O_CREAT, FILE_MODE);
78     ASSERT_GT(fd, 0);
79     char buf[BUF_SIZE] = {0};
80     ASSERT_TRUE(memset_s(buf, sizeof(buf), '1', sizeof(buf)) == EOK);
81     off_t offset = 0;
82     for (int i = 0; i < ROUND_COUNT; i++) {
83         pwrite(fd, buf, sizeof(buf), offset);
84         fsync(fd);
85         pread(fd, buf, sizeof(buf), offset);
86         offset += sizeof(buf);
87     }
88     close(fd);
89 
90     // create mem data
91     int num = 1;
92     pid_t pid = fork();
93     if (pid == 0) {
94         num++;
95         exit(0);
96     }
97 
98     sleep(1);
99     pCtx->Stop();
100     if (threadContol.joinable()) {
101         threadContol.join();
102     }
103 }
104 } // namespace Hiebpf
105 } // namespace Developtools
106 } // namespace OHOS
107