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 <gtest/gtest.h>
16 #include "profiler_capability_manager.h"
17 
18 using namespace testing::ext;
19 
20 namespace {
21 #if defined(__LP64__)
22 const std::string DEFAULT_TEST_PATH("/system/lib64/");
23 #else
24 const std::string DEFAULT_TEST_PATH("/system/lib/");
25 #endif
26 class ProfilerCapabilityManagerTest : public ::testing::Test {
27 protected:
SetUpTestCase()28     static void SetUpTestCase() {}
TearDownTestCase()29     static void TearDownTestCase() {}
30 
31     void SetUp() override {}
32     void TearDown() override
33     {
34         ProfilerCapabilityManager::GetInstance().pluginCapabilities_.clear();
35     }
36 };
37 
38 /**
39  * @tc.name: memory plugin
40  * @tc.desc: Add plugin capability.
41  * @tc.type: FUNC
42  */
HWTEST_F(ProfilerCapabilityManagerTest, AddCapability, TestSize.Level1)43 HWTEST_F(ProfilerCapabilityManagerTest, AddCapability, TestSize.Level1)
44 {
45     ProfilerPluginCapability cap1;
46     cap1.set_path(DEFAULT_TEST_PATH + "libcap1.so");
47     cap1.set_name("cap1");
48 
49     EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().AddCapability(cap1));
50 }
51 
52 /**
53  * @tc.name: memory plugin
54  * @tc.desc: get plugin capability.
55  * @tc.type: FUNC
56  */
HWTEST_F(ProfilerCapabilityManagerTest, GetCapabilities, TestSize.Level1)57 HWTEST_F(ProfilerCapabilityManagerTest, GetCapabilities, TestSize.Level1)
58 {
59     EXPECT_EQ(ProfilerCapabilityManager::GetInstance().GetCapabilities().size(), 0);
60 
61     std::vector<ProfilerPluginCapability> caps = ProfilerCapabilityManager::GetInstance().GetCapabilities();
62     EXPECT_EQ(caps.size(), 0);
63 
64     const int cnt = 10;
65     for (int i = 0; i < cnt; i++) {
66         ProfilerPluginCapability cap;
67         cap.set_path(DEFAULT_TEST_PATH + "libcap_" + std::to_string(i) + ".so");
68         cap.set_name("cap_" + std::to_string(i));
69         EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().AddCapability(cap));
70         caps = ProfilerCapabilityManager::GetInstance().GetCapabilities();
71         EXPECT_EQ(caps.size(), i + 1);
72     }
73 }
74 
75 /**
76  * @tc.name: memory plugin
77  * @tc.desc: get plugin capability.
78  * @tc.type: FUNC
79  */
HWTEST_F(ProfilerCapabilityManagerTest, GetCapability, TestSize.Level1)80 HWTEST_F(ProfilerCapabilityManagerTest, GetCapability, TestSize.Level1)
81 {
82     EXPECT_EQ(ProfilerCapabilityManager::GetInstance().GetCapability("xxx"), nullptr);
83 
84     const int cnt = 10;
85     for (int i = 0; i < cnt; i++) {
86         ProfilerPluginCapability cap;
87         cap.set_path(DEFAULT_TEST_PATH + "libcap_" + std::to_string(i) + ".so");
88         cap.set_name("cap_" + std::to_string(i));
89         EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().AddCapability(cap));
90     }
91 
92     for (int i = 0; i < cnt; i++) {
93         ProfilerPluginCapability cap;
94         cap.set_name("cap_" + std::to_string(i));
95         auto capPtr = ProfilerCapabilityManager::GetInstance().GetCapability(cap.name());
96         ASSERT_NE(capPtr, nullptr);
97         EXPECT_EQ(capPtr->name(), cap.name());
98     }
99 }
100 
101 /**
102  * @tc.name: memory plugin
103  * @tc.desc: update plugin capability.
104  * @tc.type: FUNC
105  */
HWTEST_F(ProfilerCapabilityManagerTest, UpdateCapability, TestSize.Level1)106 HWTEST_F(ProfilerCapabilityManagerTest, UpdateCapability, TestSize.Level1)
107 {
108     ProfilerPluginCapability cap1;
109     cap1.set_path(DEFAULT_TEST_PATH + "libcap1.so");
110     cap1.set_name("cap1");
111     EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().AddCapability(cap1));
112 
113     ProfilerPluginCapability cap2(cap1);
114     cap2.set_path(DEFAULT_TEST_PATH + "libcap2.so");
115     EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().UpdateCapability("cap1", cap2));
116 
117     std::vector<ProfilerPluginCapability> caps = ProfilerCapabilityManager::GetInstance().GetCapabilities();
118     ASSERT_EQ(caps.size(), 1);
119     EXPECT_EQ(caps[0].path(), cap2.path());
120 }
121 
122 /**
123  * @tc.name: server
124  * @tc.desc: remove plugin capability.
125  * @tc.type: FUNC
126  */
HWTEST_F(ProfilerCapabilityManagerTest, RemoveCapability, TestSize.Level1)127 HWTEST_F(ProfilerCapabilityManagerTest, RemoveCapability, TestSize.Level1)
128 {
129     const int cnt = 10;
130     std::vector<ProfilerPluginCapability> caps;
131     for (int i = 0; i < cnt; i++) {
132         ProfilerPluginCapability cap;
133         cap.set_path(DEFAULT_TEST_PATH + "libcap_" + std::to_string(i) + ".so");
134         cap.set_name("cap_" + std::to_string(i));
135         EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().AddCapability(cap));
136         caps = ProfilerCapabilityManager::GetInstance().GetCapabilities();
137         EXPECT_EQ(caps.size(), i + 1);
138     }
139 
140     for (int i = 0; i < cnt; i++) {
141         auto cap = caps[i];
142         EXPECT_TRUE(ProfilerCapabilityManager::GetInstance().RemoveCapability(cap.name()));
143 
144         std::vector<ProfilerPluginCapability> tmpCaps;
145         tmpCaps = ProfilerCapabilityManager::GetInstance().GetCapabilities();
146         EXPECT_EQ(tmpCaps.size(), cnt - (i + 1));
147     }
148 }
149 } // namespace