1 /*
2 * Copyright (c) 2022 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
18 #include "access_token.h"
19 #include "accesstoken_kit.h"
20 #include "app_manager_access_client.h"
21 #include "app_manager_access_proxy.h"
22 #include "app_state_data.h"
23 #define private public
24 #include "audio_manager_privacy_client.h"
25 #undef private
26 #include "audio_manager_privacy_proxy.h"
27 #ifdef AUDIO_FRAMEWORK_ENABLE
28 #include "audio_policy_ipc_interface_code.h"
29 #endif
30 #include "camera_manager_privacy_client.h"
31 #include "camera_manager_privacy_proxy.h"
32 #include "token_setproc.h"
33
34 using namespace testing::ext;
35
36 namespace OHOS {
37 namespace Security {
38 namespace AccessToken {
39 class SensitiveManagerServiceTest : public testing::Test {
40 public:
41 static void SetUpTestCase();
42 static void TearDownTestCase();
43 void SetUp();
44 void TearDown();
45 };
46 static AccessTokenID g_selfTokenId = 0;
47 static PermissionStateFull g_testState1 = {
48 .permissionName = "ohos.permission.RUNNING_STATE_OBSERVER",
49 .isGeneral = true,
50 .resDeviceID = {"local"},
51 .grantStatus = {PermissionState::PERMISSION_GRANTED},
52 .grantFlags = {1}
53 };
54
55 static PermissionStateFull g_testState2 = {
56 .permissionName = "ohos.permission.MANAGE_CAMERA_CONFIG",
57 .isGeneral = true,
58 .resDeviceID = {"local"},
59 .grantStatus = {PermissionState::PERMISSION_GRANTED},
60 .grantFlags = {1}
61 };
62
63 static PermissionStateFull g_testState3 = {
64 .permissionName = "ohos.permission.GET_RUNNING_INFO",
65 .isGeneral = true,
66 .resDeviceID = {"local"},
67 .grantStatus = {PermissionState::PERMISSION_GRANTED},
68 .grantFlags = {1}
69 };
70
71 static PermissionStateFull g_testState4 = {
72 .permissionName = "ohos.permission.MANAGE_AUDIO_CONFIG",
73 .isGeneral = true,
74 .resDeviceID = {"local"},
75 .grantStatus = {PermissionState::PERMISSION_GRANTED},
76 .grantFlags = {1}
77 };
78
79 static HapPolicyParams g_PolicyPrams1 = {
80 .apl = APL_NORMAL,
81 .domain = "test.domain.A",
82 .permList = {},
83 .permStateList = {g_testState1, g_testState2, g_testState3, g_testState4}
84 };
85
86 static HapInfoParams g_InfoParms1 = {
87 .userID = 1,
88 .bundleName = "ohos.privacy_test.bundleA",
89 .instIndex = 0,
90 .appIDDesc = "privacy_test.bundleA"
91 };
92
93 static HapInfoParams g_infoManagerTestSystemInfoParms = {
94 .userID = 1,
95 .bundleName = "ohos.privacy_test.bundleB",
96 .instIndex = 0,
97 .appIDDesc = "privacy_test.bundleB",
98 .isSystemApp = true
99 };
SetUpTestCase()100 void SensitiveManagerServiceTest::SetUpTestCase()
101 {
102 g_selfTokenId = GetSelfTokenID();
103 }
104
TearDownTestCase()105 void SensitiveManagerServiceTest::TearDownTestCase()
106 {
107 }
108
SetUp()109 void SensitiveManagerServiceTest::SetUp()
110 {
111 AccessTokenKit::AllocHapToken(g_InfoParms1, g_PolicyPrams1);
112 AccessTokenID tokenId = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID,
113 g_InfoParms1.bundleName,
114 g_InfoParms1.instIndex);
115 EXPECT_EQ(0, SetSelfTokenID(tokenId));
116 }
117
TearDown()118 void SensitiveManagerServiceTest::TearDown()
119 {
120 AccessTokenID tokenID = AccessTokenKit::GetHapTokenID(g_InfoParms1.userID,
121 g_InfoParms1.bundleName,
122 g_InfoParms1.instIndex);
123 AccessTokenKit::DeleteToken(tokenID);
124 EXPECT_EQ(0, SetSelfTokenID(g_selfTokenId));
125 }
126
127 /*
128 * @tc.name: SetMicroMuteTest001
129 * @tc.desc: test set/get mute staus of microphone
130 * @tc.type: FUNC
131 * @tc.require: issueI5RWXF
132 */
HWTEST_F(SensitiveManagerServiceTest, SetMicroMuteTest001, TestSize.Level1)133 HWTEST_F(SensitiveManagerServiceTest, SetMicroMuteTest001, TestSize.Level1)
134 {
135 bool initMute = AudioManagerPrivacyClient::GetInstance().GetPersistentMicMuteState();
136
137 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMutePersistent(false, PolicyType::PRIVACY);
138 EXPECT_EQ(false, AudioManagerPrivacyClient::GetInstance().GetPersistentMicMuteState());
139
140 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMutePersistent(true, PolicyType::PRIVACY);
141 EXPECT_EQ(true, AudioManagerPrivacyClient::GetInstance().GetPersistentMicMuteState());
142
143 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMutePersistent(false, PolicyType::PRIVACY);
144 EXPECT_EQ(false, AudioManagerPrivacyClient::GetInstance().GetPersistentMicMuteState());
145
146 AudioManagerPrivacyClient::GetInstance().SetMicrophoneMutePersistent(initMute, PolicyType::PRIVACY);
147 }
148
149 /*
150 * @tc.name: SetCameraMuteTest001
151 * @tc.desc: test set/get mute staus of camera
152 * @tc.type: FUNC
153 * @tc.require: issueI5RWXF
154 */
HWTEST_F(SensitiveManagerServiceTest, SetCameraMuteTest001, TestSize.Level1)155 HWTEST_F(SensitiveManagerServiceTest, SetCameraMuteTest001, TestSize.Level1)
156 {
157 AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("privacy_service");
158 EXPECT_EQ(0, SetSelfTokenID(tokenId));
159
160 bool initMute = CameraManagerPrivacyClient::GetInstance().IsCameraMuted();
161
162 CameraManagerPrivacyClient::GetInstance().MuteCameraPersist(PolicyType::PRIVACY, false);
163 EXPECT_EQ(false, CameraManagerPrivacyClient::GetInstance().IsCameraMuted());
164
165 CameraManagerPrivacyClient::GetInstance().MuteCameraPersist(PolicyType::PRIVACY, true);
166 EXPECT_EQ(true, CameraManagerPrivacyClient::GetInstance().IsCameraMuted());
167
168 CameraManagerPrivacyClient::GetInstance().MuteCameraPersist(PolicyType::PRIVACY, false);
169 EXPECT_EQ(false, CameraManagerPrivacyClient::GetInstance().IsCameraMuted());
170
171 CameraManagerPrivacyClient::GetInstance().MuteCameraPersist(PolicyType::PRIVACY, initMute);
172 }
173
174 /*
175 * @tc.name: RegisterAppObserverTest001
176 * @tc.desc: test RegisterApplicationStateObserver with Callback is nullptr.
177 * @tc.type: FUNC
178 * @tc.require: issueI5RWXF
179 */
HWTEST_F(SensitiveManagerServiceTest, RegisterAppObserverTest001, TestSize.Level1)180 HWTEST_F(SensitiveManagerServiceTest, RegisterAppObserverTest001, TestSize.Level1)
181 {
182 ASSERT_NE(0, AppManagerAccessClient::GetInstance().RegisterApplicationStateObserver(nullptr));
183 ASSERT_NE(0, AppManagerAccessClient::GetInstance().UnregisterApplicationStateObserver(nullptr));
184 }
185
186 /*
187 * @tc.name: RegisterAppObserverTest002
188 * @tc.desc: test RegisterApplicationStateObserver with callback is not nullptr
189 * @tc.type: FUNC
190 * @tc.require: issueI5RWXF
191 */
HWTEST_F(SensitiveManagerServiceTest, RegisterAppObserverTest002, TestSize.Level1)192 HWTEST_F(SensitiveManagerServiceTest, RegisterAppObserverTest002, TestSize.Level1)
193 {
194 AccessTokenID tokenId = AccessTokenKit::GetNativeTokenId("privacy_service");
195 EXPECT_EQ(0, SetSelfTokenID(tokenId));
196
197 sptr<ApplicationStateObserverStub> listener = new(std::nothrow) ApplicationStateObserverStub();
198 ASSERT_NE(listener, nullptr);
199 ASSERT_EQ(0, AppManagerAccessClient::GetInstance().RegisterApplicationStateObserver(listener));
200
201 std::vector<AppStateData> list;
202 ASSERT_EQ(0, AppManagerAccessClient::GetInstance().GetForegroundApplications(list));
203 for (size_t i = 0; i < list.size(); ++i) {
204 ASSERT_NE(tokenId, list[i].accessTokenId);
205 }
206
207 ASSERT_EQ(0, AppManagerAccessClient::GetInstance().UnregisterApplicationStateObserver(listener));
208 }
209 } // namespace AccessToken
210 } // namespace Security
211 } // namespace OHOS
212