1 /*
2  * Copyright (c) 2024 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 "session_listener_stub.h"
18 #include "avsession_log.h"
19 #include "avsession_descriptor.h"
20 #include "avsession_errors.h"
21 #include "accesstoken_kit.h"
22 #include "token_setproc.h"
23 
24 using namespace testing::ext;
25 using namespace OHOS::AVSession;
26 using namespace OHOS::Security::AccessToken;
27 
28 static uint64_t g_selfTokenId = 0;
29 static HapInfoParams g_info = {
30     .userID = 100,
31     .bundleName = "ohos.permission_test.demo",
32     .instIndex = 0,
33     .appIDDesc = "ohos.permission_test.demo",
34     .isSystemApp = true
35 };
36 
37 static HapPolicyParams g_policy = {
38     .apl = APL_NORMAL,
39     .domain = "test.domain",
40     .permList = {
41         {
42             .permissionName = "ohos.permission.MANAGE_MEDIA_RESOURCES",
43             .bundleName = "ohos.permission_test.demo",
44             .grantMode = 1,
45             .availableLevel = APL_NORMAL,
46             .label = "label",
47             .labelId = 1,
48             .description = "test",
49             .descriptionId = 1
50         }
51     },
52     .permStateList = {
53         {
54             .permissionName = "ohos.permission.MANAGE_MEDIA_RESOURCES",
55             .isGeneral = true,
56             .resDeviceID = {"local"},
57             .grantStatus = {PermissionState::PERMISSION_GRANTED},
58             .grantFlags = {1}
59         }
60     }
61 };
62 
63 class SessionListenerStubTest : public testing::Test {
64 public:
65     static void SetUpTestCase();
66     static void TearDownTestCase();
67     void SetUp() override;
68     void TearDown() override;
69 };
70 
SetUpTestCase()71 void SessionListenerStubTest::SetUpTestCase()
72 {
73     g_selfTokenId = GetSelfTokenID();
74     AccessTokenKit::AllocHapToken(g_info, g_policy);
75     AccessTokenIDEx tokenID = AccessTokenKit::GetHapTokenIDEx(g_info.userID, g_info.bundleName, g_info.instIndex);
76     SetSelfTokenID(tokenID.tokenIDEx);
77 }
78 
TearDownTestCase()79 void SessionListenerStubTest::TearDownTestCase()
80 {
81     SetSelfTokenID(g_selfTokenId);
82     auto tokenId = AccessTokenKit::GetHapTokenID(g_info.userID, g_info.bundleName, g_info.instIndex);
83     AccessTokenKit::DeleteToken(tokenId);
84 }
85 
SetUp()86 void SessionListenerStubTest::SetUp()
87 {
88 }
89 
TearDown()90 void SessionListenerStubTest::TearDown()
91 {
92 }
93 
94 class SessionListenerStubDemo : public SessionListenerStub {
OnSessionCreate(const AVSessionDescriptor & descriptor)95     void OnSessionCreate(const AVSessionDescriptor &descriptor) override {};
OnSessionRelease(const AVSessionDescriptor & descriptor)96     void OnSessionRelease(const AVSessionDescriptor &descriptor) override {};
OnTopSessionChange(const AVSessionDescriptor & descriptor)97     void OnTopSessionChange(const AVSessionDescriptor &descriptor) override {};
OnAudioSessionChecked(const int32_t uid)98     void OnAudioSessionChecked(const int32_t uid) override {};
OnDeviceAvailable(const OutputDeviceInfo & castOutputDeviceInfo)99     void OnDeviceAvailable(const OutputDeviceInfo &castOutputDeviceInfo) override {};
OnDeviceLogEvent(const DeviceLogEventCode eventId,const int64_t param)100     void OnDeviceLogEvent(const DeviceLogEventCode eventId, const int64_t param) override {};
OnDeviceOffline(const std::string & deviceId)101     void OnDeviceOffline(const std::string &deviceId) override {};
102 };
103 
104 /**
105  * @tc.name: OnRemoteRequest001
106  * @tc.desc:
107  * @tc.type: FUNC
108  */
109 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest001, TestSize.Level1)
110 {
111     SLOGI("OnRemoteRequest001 begin!");
112     uint32_t code = 0;
113     SessionListenerStubDemo sessionListenerStub;
114     OHOS::MessageParcel data;
115     OHOS::MessageParcel reply;
116     OHOS::MessageOption option;
117     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
118     EXPECT_EQ(ret, OHOS::AVSession::AVSESSION_ERROR);
119     SLOGI("OnRemoteRequest001 end!");
120 }
121 
122 /**
123  * @tc.name: OnRemoteRequest002
124  * @tc.desc:
125  * @tc.type: FUNC
126  */
127 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest002, TestSize.Level1)
128 {
129     SLOGI("OnRemoteRequest002 begin!");
130     uint32_t code = 0;
131     SessionListenerStubDemo sessionListenerStub;
132     OHOS::MessageParcel data;
133     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
134     data.WriteString("test");
135     OHOS::MessageParcel reply;
136     OHOS::MessageOption option;
137     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
138     EXPECT_EQ(ret, OHOS::ERR_NONE);
139     SLOGI("OnRemoteRequest002 end!");
140 }
141 
142 /**
143  * @tc.name: OnRemoteRequest003
144  * @tc.desc:
145  * @tc.type: FUNC
146  */
147 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest003, TestSize.Level1)
148 {
149     SLOGI("OnRemoteRequest003 begin!");
150     uint32_t code = 1;
151     SessionListenerStubDemo sessionListenerStub;
152     OHOS::MessageParcel data;
153     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
154     data.WriteString("test");
155     OHOS::MessageParcel reply;
156     OHOS::MessageOption option;
157     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
158     EXPECT_EQ(ret, OHOS::ERR_NONE);
159     SLOGI("OnRemoteRequest003 end!");
160 }
161 
162 /**
163  * @tc.name: OnRemoteRequest004
164  * @tc.desc:
165  * @tc.type: FUNC
166  */
167 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest004, TestSize.Level1)
168 {
169     SLOGI("OnRemoteRequest004 begin!");
170     uint32_t code = 2;
171     SessionListenerStubDemo sessionListenerStub;
172     OHOS::MessageParcel data;
173     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
174     data.WriteString("test");
175     OHOS::MessageParcel reply;
176     OHOS::MessageOption option;
177     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
178     EXPECT_EQ(ret, OHOS::ERR_NONE);
179     SLOGI("OnRemoteRequest004 end!");
180 }
181 
182 /**
183  * @tc.name: OnRemoteRequest005
184  * @tc.desc:
185  * @tc.type: FUNC
186  */
187 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest005, TestSize.Level1)
188 {
189     SLOGI("OnRemoteRequest005 begin!");
190     uint32_t code = 3;
191     SessionListenerStubDemo sessionListenerStub;
192     OHOS::MessageParcel data;
193     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
194     data.WriteString("test");
195     OHOS::MessageParcel reply;
196     OHOS::MessageOption option;
197     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
198     EXPECT_EQ(ret, OHOS::ERR_NONE);
199     SLOGI("OnRemoteRequest005 end!");
200 }
201 
202 /**
203  * @tc.name: OnRemoteRequest006
204  * @tc.desc:
205  * @tc.type: FUNC
206  */
207 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest006, TestSize.Level1)
208 {
209     SLOGI("OnRemoteRequest006 begin!");
210     uint32_t code = 4;
211     SessionListenerStubDemo sessionListenerStub;
212     OHOS::MessageParcel data;
213     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
214     data.WriteString("test");
215     OHOS::MessageParcel reply;
216     OHOS::MessageOption option;
217     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
218     EXPECT_EQ(ret, OHOS::ERR_NONE);
219     SLOGI("OnRemoteRequest006 end!");
220 }
221 
222 /**
223  * @tc.name: OnRemoteRequest007
224  * @tc.desc:
225  * @tc.type: FUNC
226  */
227 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest007, TestSize.Level1)
228 {
229     SLOGI("OnRemoteRequest007 begin!");
230     uint32_t code = 5;
231     SessionListenerStubDemo sessionListenerStub;
232     OHOS::MessageParcel data;
233     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
234     data.WriteString("test");
235     OHOS::MessageParcel reply;
236     OHOS::MessageOption option;
237     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
238     EXPECT_EQ(ret, OHOS::ERR_NONE);
239     SLOGI("OnRemoteRequest007 end!");
240 }
241 
242 /**
243  * @tc.name: OnRemoteRequest008
244  * @tc.desc:
245  * @tc.type: FUNC
246  */
247 static HWTEST_F(SessionListenerStubTest, OnRemoteRequest008, TestSize.Level1)
248 {
249     SLOGI("OnRemoteRequest008 begin!");
250     uint32_t code = 25;
251     SessionListenerStubDemo sessionListenerStub;
252     OHOS::MessageParcel data;
253     data.WriteInterfaceToken(ISessionListener::GetDescriptor());
254     data.WriteString("test");
255     OHOS::MessageParcel reply;
256     OHOS::MessageOption option;
257     int ret = sessionListenerStub.OnRemoteRequest(code, data, reply, option);
258     EXPECT_EQ(ret, 305);
259     SLOGI("OnRemoteRequest008 end!");
260 }