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 }