1 /*
2 * Copyright (c) 2022-2023 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 <memory>
18
19 #include "avsession_log.h"
20 #include "input_manager.h"
21 #include "key_event.h"
22 #include "avsession_manager.h"
23 #include "avsession_errors.h"
24 #include "avmeta_data.h"
25 #include "avplayback_state.h"
26 #include "avmedia_description.h"
27 #include "avqueue_item.h"
28 #include "avsession_log.h"
29 #include "nativetoken_kit.h"
30 #include "token_setproc.h"
31 #include "accesstoken_kit.h"
32
33 using namespace testing::ext;
34 using namespace OHOS::AVSession;
35 using namespace OHOS::Security::AccessToken;
36
37
38 static AVMetaData g_metaData;
39 static AVPlaybackState g_playbackState;
40 static char g_testSessionTag[] = "test";
41 static char g_testBundleName[] = "test.ohos.avsession";
42 static char g_testAbilityName[] = "test.ability";
43 static int32_t g_playOnCall = AVSESSION_ERROR;
44 static int32_t g_pauseOnCall = AVSESSION_ERROR;
45 static int32_t g_nextOnCall = AVSESSION_ERROR;
46 static int32_t g_previousOnCall = AVSESSION_ERROR;
47
48 class AVSessionServiceTest : public testing::Test {
49 public:
50 static void SetUpTestCase();
51 static void TearDownTestCase();
52 void SetUp() override;
53 void TearDown() override;
54
55 std::shared_ptr<AVSession> avsession_ = nullptr;
56 };
57
SetUpTestCase()58 void AVSessionServiceTest::SetUpTestCase()
59 {
60 }
61
TearDownTestCase()62 void AVSessionServiceTest::TearDownTestCase()
63 {
64 }
65
SetUp()66 void AVSessionServiceTest::SetUp()
67 {
68 OHOS::AppExecFwk::ElementName elementName;
69 elementName.SetBundleName(g_testBundleName);
70 elementName.SetAbilityName(g_testAbilityName);
71 avsession_ = AVSessionManager::GetInstance().CreateSession(g_testSessionTag, AVSession::SESSION_TYPE_AUDIO,
72 elementName);
73 ASSERT_NE(avsession_, nullptr);
74 avsession_->Activate();
75 }
76
TearDown()77 void AVSessionServiceTest::TearDown()
78 {
79 [[maybe_unused]] int32_t ret = AVSESSION_ERROR;
80 if (avsession_ != nullptr) {
81 ret = avsession_->Destroy();
82 avsession_ = nullptr;
83 }
84 }
85
86 class AVSessionCallbackImpl : public AVSessionCallback {
87 public:
88 void OnPlay() override;
89 void OnPause() override;
OnStop()90 void OnStop() override {};
91 void OnPlayNext() override;
92 void OnPlayPrevious() override;
OnFastForward()93 void OnFastForward() override {};
OnRewind()94 void OnRewind() override {};
OnSeek(int64_t time)95 void OnSeek(int64_t time) override {};
OnSetSpeed(double speed)96 void OnSetSpeed(double speed) override {};
OnSetLoopMode(int32_t loopMode)97 void OnSetLoopMode(int32_t loopMode) override {};
OnToggleFavorite(const std::string & mediaId)98 void OnToggleFavorite(const std::string& mediaId) override {};
OnMediaKeyEvent(const OHOS::MMI::KeyEvent & keyEvent)99 void OnMediaKeyEvent(const OHOS::MMI::KeyEvent& keyEvent) override {};
OnOutputDeviceChange(const int32_t connectionState,const OHOS::AVSession::OutputDeviceInfo & outputDeviceInfo)100 void OnOutputDeviceChange(const int32_t connectionState,
101 const OHOS::AVSession::OutputDeviceInfo& outputDeviceInfo) override {};
OnCommonCommand(const std::string & commonCommand,const OHOS::AAFwk::WantParams & commandArgs)102 void OnCommonCommand(const std::string& commonCommand, const OHOS::AAFwk::WantParams& commandArgs) override {};
OnSkipToQueueItem(int32_t itemId)103 void OnSkipToQueueItem(int32_t itemId) override {};
104
105 ~AVSessionCallbackImpl() override;
106 };
107
OnPlay()108 void AVSessionCallbackImpl::OnPlay()
109 {
110 g_playOnCall = AVSESSION_SUCCESS;
111 SLOGI("OnPlay %{public}d", g_playOnCall);
112 }
113
OnPause()114 void AVSessionCallbackImpl::OnPause()
115 {
116 g_pauseOnCall = AVSESSION_SUCCESS;
117 SLOGI("OnPause %{public}d", g_pauseOnCall);
118 }
119
OnPlayNext()120 void AVSessionCallbackImpl::OnPlayNext()
121 {
122 g_nextOnCall = AVSESSION_SUCCESS;
123 SLOGI("OnPlayNext %{public}d", g_nextOnCall);
124 }
125
OnPlayPrevious()126 void AVSessionCallbackImpl::OnPlayPrevious()
127 {
128 g_previousOnCall = AVSESSION_SUCCESS;
129 SLOGI("OnPlayPrevious %{public}d", g_previousOnCall);
130 }
131
~AVSessionCallbackImpl()132 AVSessionCallbackImpl::~AVSessionCallbackImpl()
133 {
134 }
135
136 /**
137 * @tc.name: SendSystemAVKeyEvent001
138 * @tc.desc: verifying send system keyEvent
139 * @tc.type: FUNC
140 * @tc.require: #I5Y4MZ
141 */
142 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent001, TestSize.Level1)
143 {
144 SLOGI("SendSystemAVKeyEvent001 begin!");
145
146 g_metaData.Reset();
147 g_metaData.SetAssetId("123");
148 g_metaData.SetTitle("Black Humor");
149 g_metaData.SetArtist("zhoujielun");
150 g_metaData.SetAuthor("zhoujielun");
151 g_metaData.SetAlbum("Jay");
152 g_metaData.SetWriter("zhoujielun");
153 g_metaData.SetComposer("zhoujielun");
154 g_metaData.SetDuration(40000);
155 g_metaData.SetMediaImageUri("xxxxx");
156 g_metaData.SetSubTitle("fac");
157 g_metaData.SetDescription("for friends");
158 g_metaData.SetLyric("xxxxx");
159 avsession_->SetAVMetaData(g_metaData);
160
161 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
162 g_playbackState.SetSpeed(1.5);
163 g_playbackState.SetPosition({80000, 0});
164 g_playbackState.SetBufferedTime(60000);
165 g_playbackState.SetLoopMode(2);
166 g_playbackState.SetFavorite(true);
167 avsession_->SetAVPlaybackState(g_playbackState);
168
169 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
170 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
171
172 auto keyEvent = OHOS::MMI::KeyEvent::Create();
173 ASSERT_NE(keyEvent, nullptr);
174 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
175 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
176 OHOS::MMI::KeyEvent::KeyItem item;
177 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
178 item.SetDownTime(0);
179 item.SetPressed(true);
180 keyEvent->AddPressedKeyItems(item);
181 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
182 sleep(1);
183 EXPECT_EQ(g_pauseOnCall, AVSESSION_SUCCESS);
184 g_pauseOnCall = false;
185 SLOGI("SendSystemAVKeyEvent001 end!");
186 }
187
188 /**
189 * @tc.name: SendSystemAVKeyEvent002
190 * @tc.desc: verifying send system keyEvent
191 * @tc.type: FUNC
192 * @tc.require: #I5Y4MZ
193 */
194
195 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent002, TestSize.Level1)
196 {
197 SLOGI("SendSystemAVKeyEvent002 begin!");
198
199 g_metaData.Reset();
200 g_metaData.SetAssetId("123");
201 g_metaData.SetTitle("Black Humor");
202 g_metaData.SetArtist("zhoujielun");
203 g_metaData.SetAuthor("zhoujielun");
204 g_metaData.SetAlbum("Jay");
205 g_metaData.SetWriter("zhoujielun");
206 g_metaData.SetComposer("zhoujielun");
207 g_metaData.SetDuration(40000);
208 g_metaData.SetMediaImageUri("xxxxx");
209 g_metaData.SetSubTitle("fac");
210 g_metaData.SetDescription("for friends");
211 g_metaData.SetLyric("xxxxx");
212 avsession_->SetAVMetaData(g_metaData);
213
214 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PAUSE);
215 g_playbackState.SetSpeed(1.5);
216 g_playbackState.SetPosition({80000, 0});
217 g_playbackState.SetBufferedTime(60000);
218 g_playbackState.SetLoopMode(2);
219 g_playbackState.SetFavorite(true);
220 avsession_->SetAVPlaybackState(g_playbackState);
221
222 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
223 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
224
225 auto keyEvent = OHOS::MMI::KeyEvent::Create();
226 ASSERT_NE(keyEvent, nullptr);
227 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
228 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
229 OHOS::MMI::KeyEvent::KeyItem item;
230 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
231 item.SetDownTime(0);
232 item.SetPressed(true);
233 keyEvent->AddPressedKeyItems(item);
234 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
235 sleep(1);
236 EXPECT_EQ(g_playOnCall, AVSESSION_SUCCESS);
237 g_playOnCall = false;
238 SLOGI("SendSystemAVKeyEvent002 end!");
239 }
240
241 /**
242 * @tc.name: SendSystemAVKeyEvent003
243 * @tc.desc: verifying send system keyEvent
244 * @tc.type: FUNC
245 * @tc.require: #I5Y4MZ
246 */
247 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent003, TestSize.Level1)
248 {
249 SLOGI("SendSystemAVKeyEvent003 begin!");
250
251 g_metaData.Reset();
252 g_metaData.SetAssetId("123");
253 g_metaData.SetTitle("Black Humor");
254 g_metaData.SetArtist("zhoujielun");
255 g_metaData.SetAuthor("zhoujielun");
256 g_metaData.SetAlbum("Jay");
257 g_metaData.SetWriter("zhoujielun");
258 g_metaData.SetComposer("zhoujielun");
259 g_metaData.SetDuration(40000);
260 g_metaData.SetMediaImageUri("xxxxx");
261 g_metaData.SetSubTitle("fac");
262 g_metaData.SetDescription("for friends");
263 g_metaData.SetLyric("xxxxx");
264 avsession_->SetAVMetaData(g_metaData);
265
266 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
267 g_playbackState.SetSpeed(1.5);
268 g_playbackState.SetPosition({80000, 0});
269 g_playbackState.SetBufferedTime(60000);
270 g_playbackState.SetLoopMode(2);
271 g_playbackState.SetFavorite(true);
272 avsession_->SetAVPlaybackState(g_playbackState);
273
274 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
275 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
276
277 auto keyEvent = OHOS::MMI::KeyEvent::Create();
278 ASSERT_NE(keyEvent, nullptr);
279 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
280 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
281 OHOS::MMI::KeyEvent::KeyItem item;
282 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
283 item.SetDownTime(0);
284 item.SetPressed(true);
285 keyEvent->AddPressedKeyItems(item);
286 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
287 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
288 sleep(1);
289 EXPECT_EQ(g_nextOnCall, AVSESSION_SUCCESS);
290 g_nextOnCall = false;
291 SLOGI("SendSystemAVKeyEvent003 end!");
292 }
293
294 /**
295 * @tc.name: SendSystemAVKeyEvent004
296 * @tc.desc: verifying send system keyEvent
297 * @tc.type: FUNC
298 * @tc.require: #I5Y4MZ
299 */
300 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent004, TestSize.Level1)
301 {
302 SLOGI("SendSystemAVKeyEvent004 begin!");
303
304 g_metaData.Reset();
305 g_metaData.SetAssetId("123");
306 g_metaData.SetTitle("Black Humor");
307 g_metaData.SetArtist("zhoujielun");
308 g_metaData.SetAuthor("zhoujielun");
309 g_metaData.SetAlbum("Jay");
310 g_metaData.SetWriter("zhoujielun");
311 g_metaData.SetComposer("zhoujielun");
312 g_metaData.SetDuration(40000);
313 g_metaData.SetMediaImageUri("xxxxx");
314 g_metaData.SetSubTitle("fac");
315 g_metaData.SetDescription("for friends");
316 g_metaData.SetLyric("xxxxx");
317 avsession_->SetAVMetaData(g_metaData);
318
319 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
320 g_playbackState.SetSpeed(1.5);
321 g_playbackState.SetPosition({80000, 0});
322 g_playbackState.SetBufferedTime(60000);
323 g_playbackState.SetLoopMode(2);
324 g_playbackState.SetFavorite(true);
325 avsession_->SetAVPlaybackState(g_playbackState);
326
327 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
328 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
329
330 auto keyEvent = OHOS::MMI::KeyEvent::Create();
331 ASSERT_NE(keyEvent, nullptr);
332 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
333 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
334 OHOS::MMI::KeyEvent::KeyItem item;
335 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
336 item.SetDownTime(0);
337 item.SetPressed(true);
338 keyEvent->AddPressedKeyItems(item);
339 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
340 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
341 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
342 sleep(1);
343 EXPECT_EQ(g_previousOnCall, AVSESSION_SUCCESS);
344 g_previousOnCall = false;
345 SLOGI("SendSystemAVKeyEvent004 end!");
346 }
347
348 /**
349 * @tc.name: SendSystemAVKeyEvent005
350 * @tc.desc: verifying send system keyEvent
351 * @tc.type: FUNC
352 * @tc.require: #I5Y4MZ
353 */
354 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent005, TestSize.Level1)
355 {
356 SLOGI("SendSystemAVKeyEvent005 begin!");
357
358 g_metaData.Reset();
359 g_metaData.SetAssetId("123");
360 g_metaData.SetTitle("Black Humor");
361 g_metaData.SetArtist("zhoujielun");
362 g_metaData.SetAuthor("zhoujielun");
363 g_metaData.SetAlbum("Jay");
364 g_metaData.SetWriter("zhoujielun");
365 g_metaData.SetComposer("zhoujielun");
366 g_metaData.SetDuration(40000);
367 g_metaData.SetMediaImageUri("xxxxx");
368 g_metaData.SetSubTitle("fac");
369 g_metaData.SetDescription("for friends");
370 g_metaData.SetLyric("xxxxx");
371 avsession_->SetAVMetaData(g_metaData);
372
373 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
374 g_playbackState.SetSpeed(1.5);
375 g_playbackState.SetPosition({80000, 0});
376 g_playbackState.SetBufferedTime(60000);
377 g_playbackState.SetLoopMode(2);
378 g_playbackState.SetFavorite(true);
379 avsession_->SetAVPlaybackState(g_playbackState);
380
381 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
382 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
383
384 auto keyEvent = OHOS::MMI::KeyEvent::Create();
385 ASSERT_NE(keyEvent, nullptr);
386 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
387 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
388 OHOS::MMI::KeyEvent::KeyItem item;
389 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
390 item.SetDownTime(0);
391 item.SetPressed(true);
392 keyEvent->AddPressedKeyItems(item);
393 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
394 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
395 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
396 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
397 sleep(1);
398 EXPECT_EQ(g_previousOnCall, AVSESSION_SUCCESS);
399 g_previousOnCall = false;
400 SLOGI("SendSystemAVKeyEvent005 end!");
401 }
402
403 /**
404 * @tc.name: SendSystemAVKeyEvent006
405 * @tc.desc: verifying send system keyEvent
406 * @tc.type: FUNC
407 * @tc.require: #I5Y4MZ
408 */
409 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent006, TestSize.Level1)
410 {
411 SLOGI("SendSystemAVKeyEvent006 begin!");
412
413 g_metaData.Reset();
414 g_metaData.SetAssetId("123");
415 g_metaData.SetTitle("Black Humor");
416 g_metaData.SetArtist("zhoujielun");
417 g_metaData.SetAuthor("zhoujielun");
418 g_metaData.SetAlbum("Jay");
419 g_metaData.SetWriter("zhoujielun");
420 g_metaData.SetComposer("zhoujielun");
421 g_metaData.SetDuration(40000);
422 g_metaData.SetMediaImageUri("xxxxx");
423 g_metaData.SetSubTitle("fac");
424 g_metaData.SetDescription("for friends");
425 g_metaData.SetLyric("xxxxx");
426 avsession_->SetAVMetaData(g_metaData);
427
428 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
429 g_playbackState.SetSpeed(1.5);
430 g_playbackState.SetPosition({80000, 0});
431 g_playbackState.SetBufferedTime(60000);
432 g_playbackState.SetLoopMode(2);
433 g_playbackState.SetFavorite(true);
434 avsession_->SetAVPlaybackState(g_playbackState);
435
436 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
437 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
438
439 auto keyEvent = OHOS::MMI::KeyEvent::Create();
440 ASSERT_NE(keyEvent, nullptr);
441 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
442 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
443 OHOS::MMI::KeyEvent::KeyItem item;
444 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
445 item.SetDownTime(0);
446 item.SetPressed(true);
447 keyEvent->AddPressedKeyItems(item);
448 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
449 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
450 sleep(1);
451 EXPECT_EQ(g_nextOnCall, AVSESSION_SUCCESS);
452 g_nextOnCall = false;
453 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
454 sleep(1);
455 EXPECT_EQ(g_pauseOnCall, AVSESSION_SUCCESS);
456 g_pauseOnCall = false;
457 SLOGI("SendSystemAVKeyEvent006 end!");
458 }