1 /*
2  * Copyright (c) 2022-2023 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 
16 #include <gtest/gtest.h>
17 #include <string>
18 #include <vector>
19 #define private public
20 #define protected public
21 #include "iplugin.h"
22 #undef protected
23 #undef private
24 #include "func_code.h"
25 #include "iplugin_mock.h"
26 
27 using namespace testing::ext;
28 using namespace testing;
29 
30 namespace OHOS {
31 namespace EDM {
32 namespace TEST {
33 class IPluginTest : public testing::Test {
34 protected:
SetUp()35     void SetUp() override {}
36 
TearDown()37     void TearDown() override {}
38 };
39 
40 /**
41  * @tc.name: TestIsGlobalPolicy
42  * @tc.desc: Test IsGlobalPolicy func.
43  * @tc.type: FUNC
44  */
45 HWTEST_F(IPluginTest, TestIsGlobalPolicy, TestSize.Level1)
46 {
47     IPluginMock iplugin1;
48     EXPECT_TRUE(iplugin1.IsGlobalPolicy());
49     iplugin1.MockSetPolicyName("test");
50     std::string mergeJsonData;
51     ErrCode err = iplugin1.MergePolicyData("com.edm.test.demo", mergeJsonData);
52     EXPECT_TRUE(err == ERR_OK);
53     MessageParcel reply;
54     err = iplugin1.WritePolicyToParcel("name:test", reply);
55     EXPECT_TRUE(err == ERR_OK);
56 }
57 
58 /**
59  * @tc.name: TestPolicyPermissionConfig
60  * @tc.desc: Test PolicyPermissionConfig struct.
61  * @tc.type: FUNC
62  */
63 HWTEST_F(IPluginTest, TestPolicyPermissionConfig, TestSize.Level1)
64 {
65     IPlugin::PolicyPermissionConfig config1 = IPlugin::PolicyPermissionConfig();
66     EXPECT_TRUE(config1.permissionType == IPlugin::PermissionType::UNKNOWN);
67     EXPECT_TRUE(config1.apiType == IPlugin::ApiType::UNKNOWN);
68 
69     IPlugin::PolicyPermissionConfig config2 = IPlugin::PolicyPermissionConfig("test_permission",
70         IPlugin::PermissionType::SUPER_DEVICE_ADMIN, IPlugin::ApiType::PUBLIC);
71     EXPECT_TRUE(config2.permission == "test_permission");
72     EXPECT_TRUE(config2.permissionType == IPlugin::PermissionType::SUPER_DEVICE_ADMIN);
73     EXPECT_TRUE(config2.apiType == IPlugin::ApiType::PUBLIC);
74 
75     std::map<std::string, std::string> perms;
76     perms.insert(std::make_pair("tag1", "permission1"));
77     perms.insert(std::make_pair("tag2", "permission2"));
78     IPlugin::PolicyPermissionConfig config3 = IPlugin::PolicyPermissionConfig(perms,
79         IPlugin::PermissionType::NORMAL_DEVICE_ADMIN, IPlugin::ApiType::SYSTEM);
80     EXPECT_TRUE(config3.tagPermissions.size() == 2);
81     EXPECT_TRUE(config3.permissionType == IPlugin::PermissionType::NORMAL_DEVICE_ADMIN);
82     EXPECT_TRUE(config3.apiType == IPlugin::ApiType::SYSTEM);
83 }
84 
85 /**
86  * @tc.name: TestGetApiType
87  * @tc.desc: Test GetApiType func.
88  * @tc.type: FUNC
89  */
90 HWTEST_F(IPluginTest, TestGetApiType, TestSize.Level1)
91 {
92     FuncOperateType operaType = FuncOperateType::GET;
93     IPluginMock::ApiType ret;
94 
95     std::map<FuncOperateType, IPluginMock::PolicyPermissionConfig> permissionMap1;
96     IPluginMock::PolicyPermissionConfig permissionConfig1;
97     std::unique_ptr<IPlugin> iplugin1 = std::make_unique<IPluginMock>();
98     permissionMap1[operaType] = permissionConfig1;
99     iplugin1->permissionMap_ = permissionMap1;
100     iplugin1->permissionConfig_ = permissionConfig1;
101     ret = iplugin1->GetApiType(operaType);
102     EXPECT_TRUE(ret == IPluginMock::ApiType::UNKNOWN);
103 
104     std::map<FuncOperateType, IPluginMock::PolicyPermissionConfig> permissionMap2;
105     IPluginMock::PolicyPermissionConfig permissionConfig2;
106     std::unique_ptr<IPlugin> iplugin2 = std::make_unique<IPluginMock>();
107     iplugin2->permissionMap_ = permissionMap2;
108     permissionConfig2.apiType = IPluginMock::ApiType::PUBLIC;
109     iplugin2->permissionConfig_ = permissionConfig2;
110     ret = iplugin2->GetApiType(operaType);
111     EXPECT_TRUE(ret == IPluginMock::ApiType::PUBLIC);
112 
113     std::map<FuncOperateType, IPluginMock::PolicyPermissionConfig> permissionMap3;
114     IPluginMock::PolicyPermissionConfig permissionConfig3;
115     std::unique_ptr<IPlugin> iplugin3 = std::make_unique<IPluginMock>();
116     permissionConfig3.apiType = IPluginMock::ApiType::PUBLIC;
117     permissionMap3[operaType] = permissionConfig3;
118     iplugin3->permissionMap_ = permissionMap3;
119     ret = iplugin3->GetApiType(operaType);
120     EXPECT_TRUE(ret == IPluginMock::ApiType::PUBLIC);
121 
122     std::map<FuncOperateType, IPluginMock::PolicyPermissionConfig> permissionMap4;
123     IPluginMock::PolicyPermissionConfig permissionConfig4;
124     std::unique_ptr<IPlugin> iplugin4 = std::make_unique<IPluginMock>();
125     permissionConfig4.apiType = IPluginMock::ApiType::UNKNOWN;
126     permissionMap4[operaType] = permissionConfig4;
127     iplugin4->permissionConfig_ = permissionConfig4;
128     ret = iplugin4->GetApiType(operaType);
129     EXPECT_TRUE(ret == IPluginMock::ApiType::UNKNOWN);
130 }
131 
132 /**
133  * @tc.name: TestGetPermissionWhenIfEstablished
134  * @tc.desc: Test GetPermission func when The If Condition is Met.
135  * @tc.type: FUNC
136  */
137 HWTEST_F(IPluginTest, TestGetPermissionWhenIfEstablished, TestSize.Level1)
138 {
139     FuncOperateType operaType = FuncOperateType::GET;
140     std::string permissionTag = "permissionTag";
141     std::map<FuncOperateType, IPluginMock::PolicyPermissionConfig> permissionMap;
142     IPluginMock::PolicyPermissionConfig permissionConfig;
143     std::unique_ptr<IPlugin> iplugin = std::make_unique<IPluginMock>();
144 
145     permissionMap[operaType] = permissionConfig;
146     iplugin->permissionMap_ = permissionMap;
147     iplugin->permissionConfig_ = permissionConfig;
148     std::string ret = iplugin->GetPermission(operaType, permissionTag);
149     std::string checkRet = NONE_PERMISSION_MATCH;
150     EXPECT_TRUE(ret == checkRet);
151 }
152 
153 /**
154  * @tc.name: TestSetExtensionPlugin
155  * @tc.desc: Test SetExtensionPlugin func.
156  * @tc.type: FUNC
157  */
158 HWTEST_F(IPluginTest, TestSetExtensionPlugin, TestSize.Level1)
159 {
160     std::shared_ptr<IPlugin> extensionPlugin = std::make_shared<IPluginMock>();
161     std::unique_ptr<IPlugin> iplugin = std::make_unique<IPluginMock>();
162     iplugin->SetExtensionPlugin(extensionPlugin);
163     EXPECT_TRUE(extensionPlugin == iplugin->GetExtensionPlugin());
164 }
165 
166 /**
167  * @tc.name: TestSetExecuteStrategy
168  * @tc.desc: Test SetExecuteStrategy func.
169  * @tc.type: FUNC
170  */
171 HWTEST_F(IPluginTest, TestSetExecuteStrategy, TestSize.Level1)
172 {
173     std::shared_ptr<IPluginExecuteStrategy> strategy = std::make_shared<IPluginExecuteStrategy>();
174     std::unique_ptr<IPlugin> iplugin = std::make_unique<IPluginMock>();
175     iplugin->SetExecuteStrategy(strategy);
176     EXPECT_TRUE(strategy == iplugin->GetExecuteStrategy());
177 }
178 
179 /**
180  * @tc.name: TestSetPluginType
181  * @tc.desc: Test SetPluginType func.
182  * @tc.type: FUNC
183  */
184 HWTEST_F(IPluginTest, TestSetPluginType, TestSize.Level1)
185 {
186     IPluginMock::PluginType type = IPluginMock::PluginType::BASIC;
187     std::unique_ptr<IPlugin> iplugin = std::make_unique<IPluginMock>();
188     iplugin->SetPluginType(type);
189     EXPECT_TRUE(type == iplugin->GetPluginType());
190 }
191 } // namespace TEST
192 } // namespace EDM
193 } // namespace OHOS