• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "detect_plugin_manager_test.h"
16 #include "gmock/gmock.h"
17 #include "json_util.h"
18 #define private public
19 #define protected public
20 #include "detect_plugin_manager.h"
21 #include "i_detect_plugin.h"
22 #undef private
23 #undef protected
24 
25 using namespace testing;
26 using namespace testing::ext;
27 using namespace OHOS::Security::SecurityGuard;
28 using namespace OHOS::Security::SecurityGuardTest;
29 namespace OHOS::Security::SecurityGuardTest {
SetUpTestCase()30 void DetectPluginManagerTest::SetUpTestCase()
31 {
32 }
TearDownTestCase()33 void DetectPluginManagerTest::TearDownTestCase()
34 {
35 }
SetUp()36 void DetectPluginManagerTest::SetUp()
37 {
38 }
TearDown()39 void DetectPluginManagerTest::TearDown()
40 {
41 }
42 
43 class MockDetectPlugin : public IDetectPlugin {
44 public:
45     MOCK_METHOD0(Init, bool());
46     MOCK_METHOD0(Destroy, void());
47     MOCK_METHOD3(HandleEvent, void(int64_t, const std::string&, const std::string&));
48 };
49 
50 HWTEST_F(DetectPluginManagerTest, LoadPlugins001, TestSize.Level1) {
51     std::unordered_set<int64_t> depEventIds;
52     DetectPluginManager::PluginCfg pluginCfg = {
53         "test.z.so",
54         "/system/lib64/",
55         depEventIds,
56         "6.0"
57     };
58     DetectPluginManager::getInstance().LoadPlugin(pluginCfg);
59     EXPECT_TRUE(DetectPluginManager::getInstance().eventIdMap_.count(-1) == 0);
60 }
61 
62 HWTEST_F(DetectPluginManagerTest, DispatchEvent001, TestSize.Level1) {
63     MockDetectPlugin *detectPlugin = new MockDetectPlugin();
64     EXPECT_CALL(*detectPlugin, HandleEvent).Times(1);
65     std::shared_ptr<DetectPluginManager::DetectPluginAttrs> detectPluginAttrs =
66         std::make_shared<DetectPluginManager::DetectPluginAttrs>();
67     detectPluginAttrs->SetInstance(detectPlugin);
68     DetectPluginManager::getInstance().eventIdMap_[0x02C000000].emplace_back(detectPluginAttrs);
69     SecurityCollector::Event event = {
70         .eventId = 0x02C000000,
71         .version = "1.0",
72         .content = "test",
73         .timestamp = "1749176423802"
74     };
75     DetectPluginManager::getInstance().DispatchEvent(event);
76     EXPECT_TRUE(DetectPluginManager::getInstance().eventIdMap_.count(event.eventId) > 0);
77 }
78 
79 HWTEST_F(DetectPluginManagerTest, DispatchEvent002, TestSize.Level1) {
80     SecurityCollector::Event event = {
81         .eventId = 0x0000,
82         .version = "1.0",
83         .content = "error",
84         .timestamp = "1749176423802"
85     };
86     DetectPluginManager::getInstance().DispatchEvent(event);
87     EXPECT_TRUE(DetectPluginManager::getInstance().eventIdMap_.count(event.eventId) == 0);
88 }
89 
90 HWTEST_F(DetectPluginManagerTest, RetrySubscriptionTask001, TestSize.Level1) {
91     DetectPluginManager::getInstance().failedEventIdset_.insert(0x02C000000);
92     DetectPluginManager::getInstance().RetrySubscriptionTask();
93     EXPECT_TRUE(DetectPluginManager::getInstance().failedEventIdset_.size() == 0);
94 }
95 
96 HWTEST_F(DetectPluginManagerTest, ParsePluginConfig001, TestSize.Level1) {
97     EXPECT_TRUE(DetectPluginManager::getInstance().ParsePluginConfig(
98         "/data/test/unittest/resource/detect_plugin.json"));
99 }
100 
101 HWTEST_F(DetectPluginManagerTest, ParsePluginConfig002, TestSize.Level1) {
102     EXPECT_FALSE(DetectPluginManager::getInstance().ParsePluginConfig("test.json"));
103 }
104 
105 HWTEST_F(DetectPluginManagerTest, ParsePluginDepEventIds001, TestSize.Level1) {
106     std::unordered_set<int64_t> depEventIds;
107     cJSON *plugin = cJSON_CreateObject();
108     std::vector<std::string> inVector = {"test"};
109     JsonUtil::AddStrArrayInfo(plugin, inVector, "depEventIds");
110     EXPECT_FALSE(DetectPluginManager::getInstance().ParsePluginDepEventIds(plugin, depEventIds));
111 }
112 
113 HWTEST_F(DetectPluginManagerTest, ParsePluginDepEventIds002, TestSize.Level1) {
114     std::unordered_set<int64_t> depEventIds;
115     cJSON *plugin = cJSON_CreateObject();
116     EXPECT_FALSE(DetectPluginManager::getInstance().ParsePluginDepEventIds(plugin, depEventIds));
117 }
118 
119 HWTEST_F(DetectPluginManagerTest, ParsePluginConfigObjArray001, TestSize.Level1) {
120     DetectPluginManager::getInstance().plugins_.clear();
121     cJSON *plugin = cJSON_CreateObject();
122     DetectPluginManager::getInstance().ParsePluginConfigObjArray(plugin);
123     EXPECT_TRUE(DetectPluginManager::getInstance().plugins_.size() == 0);
124 }
125 
126 HWTEST_F(DetectPluginManagerTest, ParsePluginConfigObjArray002, TestSize.Level1) {
127     cJSON *plugin = cJSON_CreateObject();
128     std::vector<std::string> inVector = {"0x02C000000"};
129     JsonUtil::AddStrArrayInfo(plugin, inVector, "depEventIds");
130     JsonUtil::AddString(plugin, "pluginName", "test.z.so");
131     std::unordered_set<int64_t> depEventIds;
132     DetectPluginManager::PluginCfg pluginCfg = {
133         "test.z.so",
134         "/system/lib64/",
135         depEventIds,
136         "6.0"
137     };
138     DetectPluginManager::getInstance().plugins_.emplace_back(pluginCfg);
139     DetectPluginManager::getInstance().ParsePluginConfigObjArray(plugin);
140     EXPECT_TRUE(DetectPluginManager::getInstance().plugins_.size() != 0);
141 }
142 
143 HWTEST_F(DetectPluginManagerTest, CheckPluginNameAndSize001, TestSize.Level1) {
144     std::unordered_set<int64_t> depEventIds;
145     DetectPluginManager::PluginCfg pluginCfg = {
146         "test.z.so",
147         "/system/lib64/",
148         depEventIds,
149         "6.0"
150     };
151     DetectPluginManager::getInstance().plugins_.emplace_back(pluginCfg);
152     EXPECT_FALSE(DetectPluginManager::getInstance().CheckPluginNameAndSize(pluginCfg));
153 }
154 
155 HWTEST_F(DetectPluginManagerTest, CheckPluginNameAndSize002, TestSize.Level1) {
156     std::unordered_set<int64_t> depEventIds;
157     DetectPluginManager::PluginCfg pluginCfg = {
158         "test.z.so",
159         "/system/lib64/",
160         depEventIds,
161         "6.0"
162     };
163     for (int i = 0; i < 20; i++) {
164         DetectPluginManager::getInstance().plugins_.emplace_back(pluginCfg);
165     }
166     EXPECT_FALSE(DetectPluginManager::getInstance().CheckPluginNameAndSize(pluginCfg));
167 }
168 }