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