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 "avsession_log.h"
18 #include "avsession_errors.h"
19 #include "accesstoken_kit.h"
20 #include "nativetoken_kit.h"
21 #include "token_setproc.h"
22 #include "iservice_registry.h"
23 #include "avmedia_description.h"
24 #include "av_file_descriptor.h"
25 #include "system_ability_definition.h"
26 #include "avsession_pixel_map.h"
27 #include "avsession_pixel_map_adapter.h"
28 #define private public
29 #define protected public
30 #include "avcontroller_callback_proxy.h"
31 #undef protected
32 #undef private
33
34 using namespace OHOS::AVSession;
35 using namespace OHOS::Media;
36 using namespace OHOS::Security::AccessToken;
37
38 static uint64_t g_selfTokenId = 0;
39
40 static HapInfoParams g_info = {
41 .userID = 100,
42 .bundleName = "ohos.permission_test.demo",
43 .instIndex = 0,
44 .appIDDesc = "ohos.permission_test.demo",
45 .isSystemApp = true
46 };
47
48 static HapPolicyParams g_policy = {
49 .apl = APL_NORMAL,
50 .domain = "test.domain",
51 .permList = {
52 {
53 .permissionName = "ohos.permission.MANAGE_MEDIA_RESOURCES",
54 .bundleName = "ohos.permission_test.demo",
55 .grantMode = 1,
56 .availableLevel = APL_NORMAL,
57 .label = "label",
58 .labelId = 1,
59 .description = "test",
60 .descriptionId = 1
61 }
62 },
63 .permStateList = {
64 {
65 .permissionName = "ohos.permission.MANAGE_MEDIA_RESOURCES",
66 .isGeneral = true,
67 .resDeviceID = {"local"},
68 .grantStatus = {PermissionState::PERMISSION_GRANTED},
69 .grantFlags = {1}
70 }
71 }
72 };
73
74 class AVControllerCallbackProxyTest : public testing::Test {
75 public:
76 static void SetUpTestCase(void);
77 static void TearDownTestCase(void);
78 void SetUp();
79 void TearDown();
80
81 OHOS::sptr<AVControllerCallbackProxy> aVControllerCallbackProxy;
82 };
83
SetUpTestCase()84 void AVControllerCallbackProxyTest::SetUpTestCase()
85 {
86 g_selfTokenId = GetSelfTokenID();
87 AccessTokenKit::AllocHapToken(g_info, g_policy);
88 AccessTokenIDEx tokenID = AccessTokenKit::GetHapTokenIDEx(g_info.userID, g_info.bundleName, g_info.instIndex);
89 SetSelfTokenID(tokenID.tokenIDEx);
90 }
91
TearDownTestCase()92 void AVControllerCallbackProxyTest::TearDownTestCase()
93 {
94 SetSelfTokenID(g_selfTokenId);
95 auto tokenId = AccessTokenKit::GetHapTokenID(g_info.userID, g_info.bundleName, g_info.instIndex);
96 AccessTokenKit::DeleteToken(tokenId);
97 }
98
SetUp()99 void AVControllerCallbackProxyTest::SetUp()
100 {
101 auto mgr = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
102 if (mgr == nullptr) {
103 SLOGI("failed to get sa mgr");
104 return;
105 }
106 auto object = mgr->GetSystemAbility(OHOS::AVSESSION_SERVICE_ID);
107 if (object == nullptr) {
108 SLOGI("failed to get service");
109 return;
110 }
111 aVControllerCallbackProxy = OHOS::iface_cast<AVControllerCallbackProxy>(object);
112 }
113
TearDown()114 void AVControllerCallbackProxyTest::TearDown()
115 {
116 }
117
CreatePixelMap()118 static std::shared_ptr<PixelMap> CreatePixelMap()
119 {
120 int32_t pixelMapWidth = 4;
121 int32_t pixelMapHeight = 3;
122 const std::shared_ptr<PixelMap> &pixelMap = std::make_shared<PixelMap>();
123 ImageInfo info;
124 info.size.width = pixelMapWidth;
125 info.size.height = pixelMapHeight;
126 info.pixelFormat = PixelFormat::RGB_888;
127 info.colorSpace = ColorSpace::SRGB;
128 pixelMap->SetImageInfo(info);
129 int32_t rowDataSize = pixelMapWidth;
130 uint32_t bufferSize = rowDataSize * pixelMapHeight;
131 if (bufferSize <= 0) {
132 return pixelMap;
133 }
134
135 std::vector<std::uint8_t> buffer(bufferSize, 0x03);
136 pixelMap->SetPixelsAddr(buffer.data(), nullptr, bufferSize, AllocatorType::CUSTOM_ALLOC, nullptr);
137
138 return pixelMap;
139 }
140
141 static const int32_t DURATION_TIME = 40000;
GetAVMetaData()142 static OHOS::AVSession::AVMetaData GetAVMetaData()
143 {
144 OHOS::AVSession::AVMetaData g_metaData;
145 g_metaData.Reset();
146 g_metaData.SetAssetId("123");
147 g_metaData.SetTitle("Black Humor");
148 g_metaData.SetArtist("zhoujielun");
149 g_metaData.SetAuthor("zhoujielun");
150 g_metaData.SetAlbum("Jay");
151 g_metaData.SetWriter("zhoujielun");
152 g_metaData.SetComposer("zhoujielun");
153 g_metaData.SetDuration(DURATION_TIME);
154 g_metaData.SetMediaImageUri("xxxxx");
155 g_metaData.SetSubTitle("fac");
156 g_metaData.SetDescription("for friends");
157 g_metaData.SetLyric("xxxxx");
158 g_metaData.SetMediaImage(AVSessionPixelMapAdapter::ConvertToInner(CreatePixelMap()));
159 return g_metaData;
160 }
161
162 /**
163 * @tc.name: OnSessionDestroy001
164 * @tc.desc: Test OnSessionDestroy
165 * @tc.type: FUNC
166 */
HWTEST_F(AVControllerCallbackProxyTest, OnSessionDestroy001, testing::ext::TestSize.Level1)167 static HWTEST_F(AVControllerCallbackProxyTest, OnSessionDestroy001, testing::ext::TestSize.Level1)
168 {
169 SLOGI("OnSessionDestroy001, start");
170 aVControllerCallbackProxy->OnSessionDestroy();
171 SLOGI("OnSessionDestroy001, end");
172 }
173
174 /**
175 * @tc.name: OnAVCallMetaDataChange001
176 * @tc.desc: Test OnAVCallMetaDataChange
177 * @tc.type: FUNC
178 */
HWTEST_F(AVControllerCallbackProxyTest, OnAVCallMetaDataChange001, testing::ext::TestSize.Level1)179 static HWTEST_F(AVControllerCallbackProxyTest, OnAVCallMetaDataChange001, testing::ext::TestSize.Level1)
180 {
181 SLOGI("OnAVCallMetaDataChange001, start");
182 OHOS::AVSession::AVCallMetaData data;
183 aVControllerCallbackProxy->OnAVCallMetaDataChange(data);
184 SLOGI("OnAVCallMetaDataChange001, end");
185 }
186
187 /**
188 * @tc.name: OnAVCallStateChange001
189 * @tc.desc: Test OnAVCallStateChange
190 * @tc.type: FUNC
191 */
HWTEST_F(AVControllerCallbackProxyTest, OnAVCallStateChange001, testing::ext::TestSize.Level1)192 static HWTEST_F(AVControllerCallbackProxyTest, OnAVCallStateChange001, testing::ext::TestSize.Level1)
193 {
194 SLOGI("OnAVCallStateChange001, start");
195 OHOS::AVSession::AVCallState data;
196 aVControllerCallbackProxy->OnAVCallStateChange(data);
197 SLOGI("OnAVCallStateChange001, end");
198 }
199
200 /**
201 * @tc.name: OnPlaybackStateChange001
202 * @tc.desc: Test OnPlaybackStateChange
203 * @tc.type: FUNC
204 */
HWTEST_F(AVControllerCallbackProxyTest, OnPlaybackStateChange001, testing::ext::TestSize.Level1)205 static HWTEST_F(AVControllerCallbackProxyTest, OnPlaybackStateChange001, testing::ext::TestSize.Level1)
206 {
207 SLOGI("OnAVCallStateChange001, start");
208 OHOS::AVSession::AVPlaybackState data;
209 aVControllerCallbackProxy->OnPlaybackStateChange(data);
210 SLOGI("OnAVCallStateChange001, end");
211 }
212
213 /**
214 * @tc.name: OnMetaDataChange001
215 * @tc.desc: Test OnMetaDataChange
216 * @tc.type: FUNC
217 */
HWTEST_F(AVControllerCallbackProxyTest, OnMetaDataChange001, testing::ext::TestSize.Level1)218 static HWTEST_F(AVControllerCallbackProxyTest, OnMetaDataChange001, testing::ext::TestSize.Level1)
219 {
220 SLOGI("OnMetaDataChange001, start");
221 OHOS::AVSession::AVMetaData data;
222 aVControllerCallbackProxy->OnMetaDataChange(data);
223 SLOGI("OnMetaDataChange001, end");
224 }
225
226 /**
227 * @tc.name: OnMetaDataChange001
228 * @tc.desc: Test OnMetaDataChange
229 * @tc.type: FUNC
230 */
HWTEST_F(AVControllerCallbackProxyTest, OnMetaDataChange002, testing::ext::TestSize.Level1)231 static HWTEST_F(AVControllerCallbackProxyTest, OnMetaDataChange002, testing::ext::TestSize.Level1)
232 {
233 SLOGI("OnMetaDataChange002, start");
234 OHOS::AVSession::AVMetaData data = GetAVMetaData();
235 aVControllerCallbackProxy->OnMetaDataChange(data);
236 SLOGI("OnMetaDataChange002, end");
237 }
238
239 /**
240 * @tc.name: GetPixelMapBuffer001
241 * @tc.desc: Test GetPixelMapBuffer
242 * @tc.type: FUNC
243 */
HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer001, testing::ext::TestSize.Level1)244 static HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer001, testing::ext::TestSize.Level1)
245 {
246 SLOGI("GetPixelMapBuffer001, start");
247 OHOS::AVSession::AVMetaData metaData;
248 OHOS::MessageParcel parcel;
249 int32_t ret = aVControllerCallbackProxy->GetPixelMapBuffer(metaData, parcel);
250 EXPECT_EQ(ret, 0);
251 SLOGI("GetPixelMapBuffer001, end");
252 }
253
254 /**
255 * @tc.name: GetPixelMapBuffer002
256 * @tc.desc: Test GetPixelMapBuffer
257 * @tc.type: FUNC
258 */
HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer002, testing::ext::TestSize.Level1)259 static HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer002, testing::ext::TestSize.Level1)
260 {
261 SLOGI("GetPixelMapBuffer002, start");
262 OHOS::AVSession::AVMetaData metaData = GetAVMetaData();
263 OHOS::MessageParcel parcel;
264 int32_t ret = aVControllerCallbackProxy->GetPixelMapBuffer(metaData, parcel);
265
266 int32_t mediaImageLength = 0;
267 std::vector<uint8_t> mediaImageBuffer;
268 std::shared_ptr<AVSessionPixelMap> mediaPixelMap = metaData.GetMediaImage();
269 if (mediaPixelMap != nullptr) {
270 mediaImageBuffer = mediaPixelMap->GetInnerImgBuffer();
271 mediaImageLength = static_cast<int32_t>(mediaImageBuffer.size());
272 metaData.SetMediaLength(mediaImageLength);
273 }
274
275 int32_t avQueueImageLength = 0;
276 std::vector<uint8_t> avQueueImageBuffer;
277 std::shared_ptr<AVSessionPixelMap> avQueuePixelMap = metaData.GetAVQueueImage();
278 if (avQueuePixelMap != nullptr) {
279 avQueueImageBuffer = avQueuePixelMap->GetInnerImgBuffer();
280 avQueueImageLength = static_cast<int32_t>(avQueueImageBuffer.size());
281 }
282
283 int32_t retExpect = mediaImageLength + avQueueImageLength;
284 EXPECT_EQ(ret, retExpect);
285
286 SLOGI("GetPixelMapBuffer002, end");
287 }
288
289 /**
290 * @tc.name: GetPixelMapBuffer003
291 * @tc.desc: Test GetPixelMapBuffer
292 * @tc.type: FUNC
293 */
HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer003, testing::ext::TestSize.Level1)294 static HWTEST_F(AVControllerCallbackProxyTest, GetPixelMapBuffer003, testing::ext::TestSize.Level1)
295 {
296 SLOGI("GetPixelMapBuffer003, start");
297 OHOS::AVSession::AVMetaData metaData = GetAVMetaData();
298 std::shared_ptr<AVSessionPixelMap> avQueuePixelMapSet = std::make_shared<AVSessionPixelMap>();
299 std::vector<uint8_t> imgBuffer = {0, 1, 0, 1};
300 avQueuePixelMapSet->SetInnerImgBuffer(imgBuffer);
301 metaData.SetAVQueueImage(avQueuePixelMapSet);
302
303 OHOS::MessageParcel parcel;
304 int32_t ret = aVControllerCallbackProxy->GetPixelMapBuffer(metaData, parcel);
305
306 int32_t mediaImageLength = 0;
307 std::vector<uint8_t> mediaImageBuffer;
308 std::shared_ptr<AVSessionPixelMap> mediaPixelMap = metaData.GetMediaImage();
309 if (mediaPixelMap != nullptr) {
310 mediaImageBuffer = mediaPixelMap->GetInnerImgBuffer();
311 mediaImageLength = static_cast<int>(mediaImageBuffer.size());
312 metaData.SetMediaLength(mediaImageLength);
313 }
314
315 int32_t avQueueImageLength = 0;
316 std::vector<uint8_t> avQueueImageBuffer;
317 std::shared_ptr<AVSessionPixelMap> avQueuePixelMapGet = metaData.GetAVQueueImage();
318 if (avQueuePixelMapGet != nullptr) {
319 avQueueImageBuffer = avQueuePixelMapGet->GetInnerImgBuffer();
320 avQueueImageLength = static_cast<int>(avQueueImageBuffer.size());
321 }
322
323 int32_t retExpect = mediaImageLength + avQueueImageLength;
324
325 EXPECT_EQ(ret, retExpect);
326
327 SLOGI("GetPixelMapBuffer003, end");
328 }
329
330 /**
331 * @tc.name: OnActiveStateChange001
332 * @tc.desc: Test OnActiveStateChange
333 * @tc.type: FUNC
334 */
HWTEST_F(AVControllerCallbackProxyTest, OnActiveStateChange001, testing::ext::TestSize.Level1)335 static HWTEST_F(AVControllerCallbackProxyTest, OnActiveStateChange001, testing::ext::TestSize.Level1)
336 {
337 SLOGI("OnActiveStateChange001, start");
338 bool isActive = true;
339 aVControllerCallbackProxy->OnActiveStateChange(isActive);
340 SLOGI("OnActiveStateChange001, end");
341 }
342
343 /**
344 * @tc.name: OnActiveStateChange002
345 * @tc.desc: Test OnActiveStateChange
346 * @tc.type: FUNC
347 */
HWTEST_F(AVControllerCallbackProxyTest, OnActiveStateChange002, testing::ext::TestSize.Level1)348 static HWTEST_F(AVControllerCallbackProxyTest, OnActiveStateChange002, testing::ext::TestSize.Level1)
349 {
350 SLOGI("OnActiveStateChange002, start");
351 bool isActive = false;
352 aVControllerCallbackProxy->OnActiveStateChange(isActive);
353 SLOGI("OnActiveStateChange002, end");
354 }
355
356 /**
357 * @tc.name: OnValidCommandChange001
358 * @tc.desc: Test OnValidCommandChange
359 * @tc.type: FUNC
360 */
HWTEST_F(AVControllerCallbackProxyTest, OnValidCommandChange001, testing::ext::TestSize.Level1)361 static HWTEST_F(AVControllerCallbackProxyTest, OnValidCommandChange001, testing::ext::TestSize.Level1)
362 {
363 SLOGI("OnValidCommandChange001, start");
364 std::vector<int32_t> cmds = {0};
365 aVControllerCallbackProxy->OnValidCommandChange(cmds);
366 SLOGI("OnValidCommandChange001, end");
367 }
368
369 /**
370 * @tc.name: OnOutputDeviceChange001
371 * @tc.desc: Test OnOutputDeviceChange
372 * @tc.type: FUNC
373 */
HWTEST_F(AVControllerCallbackProxyTest, OnOutputDeviceChange001, testing::ext::TestSize.Level1)374 static HWTEST_F(AVControllerCallbackProxyTest, OnOutputDeviceChange001, testing::ext::TestSize.Level1)
375 {
376 SLOGI("OnOutputDeviceChange001, start");
377 int32_t connectionState = 0;
378 OHOS::AVSession::OutputDeviceInfo outputDeviceInfo;
379 aVControllerCallbackProxy->OnOutputDeviceChange(connectionState, outputDeviceInfo);
380 SLOGI("OnOutputDeviceChange001, end");
381 }
382
383 /**
384 * @tc.name: OnSessionEventChange001
385 * @tc.desc: Test OnSessionEventChange
386 * @tc.type: FUNC
387 */
HWTEST_F(AVControllerCallbackProxyTest, OnSessionEventChange001, testing::ext::TestSize.Level1)388 static HWTEST_F(AVControllerCallbackProxyTest, OnSessionEventChange001, testing::ext::TestSize.Level1)
389 {
390 SLOGI("OnSessionEventChange001, start");
391 std::string event = "";
392 OHOS::AAFwk::WantParams args;
393 aVControllerCallbackProxy->OnSessionEventChange(event, args);
394 SLOGI("OnSessionEventChange001, end");
395 }
396
397 /**
398 * @tc.name: OnQueueItemsChange001
399 * @tc.desc: Test OnQueueItemsChange
400 * @tc.type: FUNC
401 */
HWTEST_F(AVControllerCallbackProxyTest, OnQueueItemsChange001, testing::ext::TestSize.Level1)402 static HWTEST_F(AVControllerCallbackProxyTest, OnQueueItemsChange001, testing::ext::TestSize.Level1)
403 {
404 SLOGI("OnQueueItemsChange001, start");
405 std::vector<AVQueueItem> items = {};
406 aVControllerCallbackProxy->OnQueueItemsChange(items);
407 SLOGI("OnQueueItemsChange001, end");
408 }
409
410 /**
411 * @tc.name: OnQueueTitleChange001
412 * @tc.desc: Test OnQueueTitleChange
413 * @tc.type: FUNC
414 */
HWTEST_F(AVControllerCallbackProxyTest, OnQueueTitleChange001, testing::ext::TestSize.Level1)415 static HWTEST_F(AVControllerCallbackProxyTest, OnQueueTitleChange001, testing::ext::TestSize.Level1)
416 {
417 SLOGI("OnQueueTitleChange001, start");
418 std::string title = "title";
419 aVControllerCallbackProxy->OnQueueTitleChange(title);
420 SLOGI("OnQueueTitleChange001, end");
421 }
422
423 /**
424 * @tc.name: OnExtrasChange001
425 * @tc.desc: Test OnExtrasChange
426 * @tc.type: FUNC
427 */
HWTEST_F(AVControllerCallbackProxyTest, OnExtrasChange001, testing::ext::TestSize.Level1)428 static HWTEST_F(AVControllerCallbackProxyTest, OnExtrasChange001, testing::ext::TestSize.Level1)
429 {
430 SLOGI("OnExtrasChange001, start");
431 OHOS::AAFwk::WantParams extras;
432 aVControllerCallbackProxy->OnExtrasChange(extras);
433 SLOGI("OnExtrasChange001, end");
434 }