1 /*
2 * Copyright (c) 2025-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 #define private public
16 #include "admin_container_test.h"
17 #undef private
18 #include <vector>
19
20 #include "admin_container.h"
21
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace EDM {
26 namespace TEST {
27 constexpr int32_t DEFAULT_USER_ID = 100;
28 constexpr int32_t TEST_USER_ID = 101;
29
SetUp()30 void AdminContainerTest::SetUp()
31 {
32 adminContainer_ = AdminContainer::GetInstance();
33 std::unordered_map<int32_t, std::vector<std::shared_ptr<Admin>>> admins;
34 adminContainer_->InitAdmins(admins);
35 adminContainer_->ClearAdmins();
36 }
37
TearDown()38 void AdminContainerTest::TearDown()
39 {
40 std::vector<std::shared_ptr<Admin>> userAdmin;
41 adminContainer_->GetAdminCopyByUserId(DEFAULT_USER_ID, userAdmin);
42 for (const auto &admin : userAdmin) {
43 adminContainer_->DeleteAdmin(admin->adminInfo_.packageName_, DEFAULT_USER_ID);
44 }
45 adminContainer_->GetAdminCopyByUserId(TEST_USER_ID, userAdmin);
46 for (const auto &admin : userAdmin) {
47 adminContainer_->DeleteAdmin(admin->adminInfo_.packageName_, TEST_USER_ID);
48 }
49 adminContainer_->ClearAdmins();
50 }
51
52 /**
53 * @tc.name: TestGetAdminByUserId
54 * @tc.desc: Test AdminContainer::GetAdminByUserId function.
55 * @tc.type: FUNC
56 */
57 HWTEST_F(AdminContainerTest, TestGetAdminByUserId, TestSize.Level1)
58 {
59 std::vector<std::shared_ptr<Admin>> userAdmin;
60 std::vector<std::string> permissions;
61 AppExecFwk::ExtensionAbilityInfo abilityInfo;
62 abilityInfo.bundleName = "com.edm.test.demo";
63 abilityInfo.name = "testDemo";
64 EntInfo entInfo;
65 entInfo.enterpriseName = "company";
66 entInfo.description = "technology company in wuhan";
67 permissions = {"ohos.permission.EDM_TEST_PERMISSION"};
68 Admin admin(abilityInfo, AdminType::NORMAL, entInfo, permissions, false);
69 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, admin);
70 adminContainer_->GetAdminByUserId(DEFAULT_USER_ID, userAdmin);
71 ASSERT_TRUE(userAdmin.size() == 1);
72
73 admin.adminInfo_.adminType_ = AdminType::ENT;
74 admin.adminInfo_.packageName_ = "com.edm.test.demo1";
75 admin.adminInfo_.permission_ = {"ohos.permission.EDM_TEST_PERMISSION", "ohos.permission.EDM_TEST_ENT_PERMISSION"};
76 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, admin);
77 adminContainer_->GetAdminByUserId(DEFAULT_USER_ID, userAdmin);
78 ASSERT_TRUE(userAdmin.size() == 2);
79 }
80
81 /**
82 * @tc.name: TestGetAdminCopyBySubscribeEvent
83 * @tc.desc: Test AdminContainer::GetAdminCopyBySubscribeEvent function.
84 * @tc.type: FUNC
85 */
86 HWTEST_F(AdminContainerTest, TestGetAdminCopyBySubscribeEvent, TestSize.Level1)
87 {
88 AppExecFwk::ExtensionAbilityInfo abilityInfo;
89 abilityInfo.bundleName = "com.edm.test.demo";
90 abilityInfo.name = "testDemo";
91 EntInfo entInfo;
92 entInfo.enterpriseName = "company";
93 entInfo.description = "technology company in wuhan";
94 std::vector<std::string> permissions = {"ohos.permission.EDM_TEST_PERMISSION"};
95 Admin edmAdmin(abilityInfo, AdminType::NORMAL, entInfo, permissions, false);
96 edmAdmin.adminInfo_.managedEvents_ = {ManagedEvent::BUNDLE_ADDED, ManagedEvent::BUNDLE_REMOVED};
97 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
98
99 edmAdmin.adminInfo_.packageName_ = "com.edm.test.demo1";
100 edmAdmin.adminInfo_.className_ = "testDemo1";
101 edmAdmin.adminInfo_.entInfo_.enterpriseName = "company1";
102 edmAdmin.adminInfo_.entInfo_.description = "technology company in wuhan1";
103 edmAdmin.adminInfo_.managedEvents_ = {};
104 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
105
106 edmAdmin.adminInfo_.packageName_ = "com.edm.test.demo2";
107 edmAdmin.adminInfo_.className_ = "testDemo2";
108 edmAdmin.adminInfo_.entInfo_.enterpriseName = "company2";
109 edmAdmin.adminInfo_.entInfo_.description = "technology company in wuhan2";
110 edmAdmin.adminInfo_.managedEvents_ = {ManagedEvent::BUNDLE_REMOVED};
111 adminContainer_->SetAdminByUserId(TEST_USER_ID, edmAdmin);
112
113 std::unordered_map<int32_t, std::vector<std::shared_ptr<Admin>>> subscribeAdmins;
114 adminContainer_->GetAdminCopyBySubscribeEvent(ManagedEvent::BUNDLE_ADDED, subscribeAdmins);
115 ASSERT_TRUE(subscribeAdmins[DEFAULT_USER_ID].size() == 1);
116 ASSERT_TRUE(subscribeAdmins.find(TEST_USER_ID) == subscribeAdmins.end());
117 }
118
119 /**
120 * @tc.name: TestUpdateAdmin
121 * @tc.desc: Test AdminContainer::UpdateAdmin function.
122 * @tc.type: FUNC
123 */
124 HWTEST_F(AdminContainerTest, TestUpdateAdmin, TestSize.Level1)
125 {
126 std::string bundleName = "com.edm.test.demo";
127 std::string className = "testDemo";
128
129 EntInfo entInfo1;
130 entInfo1.enterpriseName = "company1";
131 entInfo1.description = "technology company in wuhan";
132 std::vector<std::string> permissions = {"ohos.permission.EDM_TEST_PERMISSION"};
133
134 Admin edmAdmin;
135 edmAdmin.adminInfo_.packageName_ = bundleName;
136 edmAdmin.adminInfo_.className_ = className;
137 edmAdmin.adminInfo_.entInfo_ = entInfo1;
138 edmAdmin.adminInfo_.permission_= permissions;
139 edmAdmin.adminInfo_.managedEvents_ = {ManagedEvent::BUNDLE_REMOVED};
140 edmAdmin.adminInfo_.parentAdminName_ = "com.edm.test.demo1";
141 edmAdmin.adminInfo_.accessiblePolicies_ = {"ploicy1"};
142 edmAdmin.adminInfo_.adminType_ = AdminType::ENT;
143 edmAdmin.adminInfo_.runningMode_ = RunningMode::DEFAULT;
144 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
145
146 EntInfo entInfo2;
147 entInfo2.enterpriseName = "company2";
148 entInfo2.description = "technology company in xian";
149 permissions = {"ohos.permission.EDM_TEST_PERMISSION_FAIL"};
150
151 Admin updateAdmin;
152 updateAdmin.adminInfo_.packageName_ = bundleName;
153 updateAdmin.adminInfo_.className_ = className;
154 updateAdmin.adminInfo_.entInfo_ = entInfo2;
155 updateAdmin.adminInfo_.permission_= permissions;
156 updateAdmin.adminInfo_.managedEvents_ = {ManagedEvent::BUNDLE_ADDED};
157 updateAdmin.adminInfo_.parentAdminName_ = "com.edm.test.demo2";
158 updateAdmin.adminInfo_.accessiblePolicies_ = {"ploicy2"};
159 updateAdmin.adminInfo_.adminType_ = AdminType::NORMAL;
160 updateAdmin.adminInfo_.runningMode_ = RunningMode::MULTI_USER;
161
162 adminContainer_->UpdateAdmin(DEFAULT_USER_ID, bundleName, CLASS_NAME | ENTI_NFO | PERMISSION | MANAGED_EVENTS |
163 PARENT_ADMIN_NAME | ACCESSIBLE_POLICIES | ADMIN_TYPE | IS_DEBUG | RUNNING_MODE, updateAdmin);
164
165 std::vector<std::shared_ptr<Admin>> userAdmin;
166 adminContainer_->GetAdminCopyByUserId(DEFAULT_USER_ID, userAdmin);
167 ASSERT_TRUE(userAdmin.size() == 1);
168 std::shared_ptr<Admin> admin = userAdmin.at(0);
169
170 ASSERT_EQ(admin->adminInfo_.className_, updateAdmin.adminInfo_.className_);
171 ASSERT_EQ(admin->adminInfo_.entInfo_.description, updateAdmin.adminInfo_.entInfo_.description);
172 ASSERT_EQ(admin->adminInfo_.entInfo_.enterpriseName, updateAdmin.adminInfo_.entInfo_.enterpriseName);
173 ASSERT_EQ(admin->adminInfo_.permission_[0], updateAdmin.adminInfo_.permission_[0]);
174 ASSERT_EQ(admin->adminInfo_.managedEvents_[0], updateAdmin.adminInfo_.managedEvents_[0]);
175 ASSERT_EQ(admin->adminInfo_.parentAdminName_, updateAdmin.adminInfo_.parentAdminName_);
176 ASSERT_EQ(admin->adminInfo_.accessiblePolicies_, updateAdmin.adminInfo_.accessiblePolicies_);
177 ASSERT_EQ(admin->adminInfo_.adminType_, updateAdmin.adminInfo_.adminType_);
178 ASSERT_EQ(admin->adminInfo_.runningMode_, updateAdmin.adminInfo_.runningMode_);
179 }
180
181 /**
182 * @tc.name: TestDeleteAdmin
183 * @tc.desc: Test AdminContainer::DeleteAdmin function.
184 * @tc.type: FUNC
185 */
186 HWTEST_F(AdminContainerTest, TestDeleteAdmin, TestSize.Level1)
187 {
188 bool res;
189 std::vector<std::shared_ptr<Admin>> userAdmin;
190 std::vector<std::string> permissions;
191 AppExecFwk::ExtensionAbilityInfo abilityInfo;
192 abilityInfo.bundleName = "com.edm.test.demo";
193 abilityInfo.name = "testDemo";
194 EntInfo entInfo;
195 entInfo.enterpriseName = "company";
196 entInfo.description = "technology company in wuhan";
197 permissions = {"ohos.permission.EDM_TEST_PERMISSION"};
198 Admin edmAdmin(abilityInfo, AdminType::NORMAL, entInfo, permissions, false);
199 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
200
201 edmAdmin.adminInfo_.adminType_ = AdminType::ENT;
202 edmAdmin.adminInfo_.packageName_ = "com.edm.test.demo1";
203 edmAdmin.adminInfo_.permission_ = {"ohos.permission.EDM_TEST_PERMISSION",
204 "ohos.permission.EDM_TEST_ENT_PERMISSION"};
205 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
206
207 res = adminContainer_->DeleteAdmin("com.edm.test.demo", DEFAULT_USER_ID);
208 ASSERT_TRUE(res);
209 adminContainer_->GetAdminCopyByUserId(DEFAULT_USER_ID, userAdmin);
210 ASSERT_TRUE(userAdmin.size() == 1);
211
212 res = adminContainer_->DeleteAdmin("com.edm.test.demo1", DEFAULT_USER_ID);
213 ASSERT_TRUE(res);
214 adminContainer_->GetAdminCopyByUserId(DEFAULT_USER_ID, userAdmin);
215 ASSERT_TRUE(userAdmin.empty());
216 }
217
218 /**
219 * @tc.name: TestSetAdminValue
220 * @tc.desc: Test AdminContainer::SetAdminByUserId function.
221 * @tc.type: FUNC
222 */
223 HWTEST_F(AdminContainerTest, TestSetAdminByUserId, TestSize.Level0)
224 {
225 std::shared_ptr<Admin> admin;
226 AppExecFwk::ExtensionAbilityInfo abilityInfo;
227 std::string bundleName = "com.edm.test.demo";
228 abilityInfo.bundleName = bundleName;
229 abilityInfo.name = "testDemo";
230 EntInfo entInfo;
231 entInfo.enterpriseName = "company";
232 entInfo.description = "technology company in wuhan";
233 std::vector<std::string> permissions {"ohos.permission.EDM_TEST_ENT_PERMISSION"};
234 Admin edmAdmin(abilityInfo, AdminType::NORMAL, entInfo, permissions, false);
235 adminContainer_->SetAdminByUserId(DEFAULT_USER_ID, edmAdmin);
236 std::vector<std::shared_ptr<Admin>> userAdmin;
237 adminContainer_->GetAdminCopyByUserId(DEFAULT_USER_ID, userAdmin);
238 ASSERT_EQ(userAdmin.size(), 1);
239 ASSERT_EQ(userAdmin[0]->adminInfo_.packageName_, bundleName);
240 }
241 } // namespace TEST
242 } // namespace EDM
243 } // namespace OHOS