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(int64_t time)93 void OnFastForward(int64_t time) override {};
OnRewind(int64_t time)94 void OnRewind(int64_t time) 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 {};
OnAVCallAnswer()104 void OnAVCallAnswer() override {};
OnAVCallHangUp()105 void OnAVCallHangUp() override {};
OnAVCallToggleCallMute()106 void OnAVCallToggleCallMute() override {};
OnPlayFromAssetId(int64_t assetId)107 void OnPlayFromAssetId(int64_t assetId) override {};
108
109 ~AVSessionCallbackImpl() override;
110 };
111
OnPlay()112 void AVSessionCallbackImpl::OnPlay()
113 {
114 g_playOnCall = AVSESSION_SUCCESS;
115 SLOGI("OnPlay %{public}d", g_playOnCall);
116 }
117
OnPause()118 void AVSessionCallbackImpl::OnPause()
119 {
120 g_pauseOnCall = AVSESSION_SUCCESS;
121 SLOGI("OnPause %{public}d", g_pauseOnCall);
122 }
123
OnPlayNext()124 void AVSessionCallbackImpl::OnPlayNext()
125 {
126 g_nextOnCall = AVSESSION_SUCCESS;
127 SLOGI("OnPlayNext %{public}d", g_nextOnCall);
128 }
129
OnPlayPrevious()130 void AVSessionCallbackImpl::OnPlayPrevious()
131 {
132 g_previousOnCall = AVSESSION_SUCCESS;
133 SLOGI("OnPlayPrevious %{public}d", g_previousOnCall);
134 }
135
~AVSessionCallbackImpl()136 AVSessionCallbackImpl::~AVSessionCallbackImpl()
137 {
138 }
139
140 /**
141 * @tc.name: SendSystemAVKeyEvent001
142 * @tc.desc: verifying send system keyEvent
143 * @tc.type: FUNC
144 * @tc.require: #I5Y4MZ
145 */
146 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent001, TestSize.Level1)
147 {
148 SLOGI("SendSystemAVKeyEvent001 begin!");
149
150 g_metaData.Reset();
151 g_metaData.SetAssetId("123");
152 g_metaData.SetTitle("Black Humor");
153 g_metaData.SetArtist("zhoujielun");
154 g_metaData.SetAuthor("zhoujielun");
155 g_metaData.SetAlbum("Jay");
156 g_metaData.SetWriter("zhoujielun");
157 g_metaData.SetComposer("zhoujielun");
158 g_metaData.SetDuration(40000);
159 g_metaData.SetMediaImageUri("xxxxx");
160 g_metaData.SetSubTitle("fac");
161 g_metaData.SetDescription("for friends");
162 g_metaData.SetLyric("xxxxx");
163 avsession_->SetAVMetaData(g_metaData);
164
165 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
166 g_playbackState.SetSpeed(1.5);
167 g_playbackState.SetPosition({80000, 0});
168 g_playbackState.SetBufferedTime(60000);
169 g_playbackState.SetLoopMode(2);
170 g_playbackState.SetFavorite(true);
171 avsession_->SetAVPlaybackState(g_playbackState);
172
173 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
174 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
175
176 auto keyEvent = OHOS::MMI::KeyEvent::Create();
177 ASSERT_NE(keyEvent, nullptr);
178 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
179 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
180 OHOS::MMI::KeyEvent::KeyItem item;
181 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
182 item.SetDownTime(0);
183 item.SetPressed(true);
184 keyEvent->AddPressedKeyItems(item);
185 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
186 sleep(1);
187 EXPECT_EQ(g_pauseOnCall, AVSESSION_SUCCESS);
188 g_pauseOnCall = false;
189 SLOGI("SendSystemAVKeyEvent001 end!");
190 }
191
192 /**
193 * @tc.name: SendSystemAVKeyEvent002
194 * @tc.desc: verifying send system keyEvent
195 * @tc.type: FUNC
196 * @tc.require: #I5Y4MZ
197 */
198
199 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent002, TestSize.Level1)
200 {
201 SLOGI("SendSystemAVKeyEvent002 begin!");
202
203 g_metaData.Reset();
204 g_metaData.SetAssetId("123");
205 g_metaData.SetTitle("Black Humor");
206 g_metaData.SetArtist("zhoujielun");
207 g_metaData.SetAuthor("zhoujielun");
208 g_metaData.SetAlbum("Jay");
209 g_metaData.SetWriter("zhoujielun");
210 g_metaData.SetComposer("zhoujielun");
211 g_metaData.SetDuration(40000);
212 g_metaData.SetMediaImageUri("xxxxx");
213 g_metaData.SetSubTitle("fac");
214 g_metaData.SetDescription("for friends");
215 g_metaData.SetLyric("xxxxx");
216 avsession_->SetAVMetaData(g_metaData);
217
218 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PAUSE);
219 g_playbackState.SetSpeed(1.5);
220 g_playbackState.SetPosition({80000, 0});
221 g_playbackState.SetBufferedTime(60000);
222 g_playbackState.SetLoopMode(2);
223 g_playbackState.SetFavorite(true);
224 avsession_->SetAVPlaybackState(g_playbackState);
225
226 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
227 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
228
229 auto keyEvent = OHOS::MMI::KeyEvent::Create();
230 ASSERT_NE(keyEvent, nullptr);
231 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
232 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
233 OHOS::MMI::KeyEvent::KeyItem item;
234 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
235 item.SetDownTime(0);
236 item.SetPressed(true);
237 keyEvent->AddPressedKeyItems(item);
238 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
239 sleep(1);
240 EXPECT_EQ(g_playOnCall, AVSESSION_SUCCESS);
241 g_playOnCall = false;
242 SLOGI("SendSystemAVKeyEvent002 end!");
243 }
244
245 /**
246 * @tc.name: SendSystemAVKeyEvent003
247 * @tc.desc: verifying send system keyEvent
248 * @tc.type: FUNC
249 * @tc.require: #I5Y4MZ
250 */
251 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent003, TestSize.Level1)
252 {
253 SLOGI("SendSystemAVKeyEvent003 begin!");
254
255 g_metaData.Reset();
256 g_metaData.SetAssetId("123");
257 g_metaData.SetTitle("Black Humor");
258 g_metaData.SetArtist("zhoujielun");
259 g_metaData.SetAuthor("zhoujielun");
260 g_metaData.SetAlbum("Jay");
261 g_metaData.SetWriter("zhoujielun");
262 g_metaData.SetComposer("zhoujielun");
263 g_metaData.SetDuration(40000);
264 g_metaData.SetMediaImageUri("xxxxx");
265 g_metaData.SetSubTitle("fac");
266 g_metaData.SetDescription("for friends");
267 g_metaData.SetLyric("xxxxx");
268 avsession_->SetAVMetaData(g_metaData);
269
270 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
271 g_playbackState.SetSpeed(1.5);
272 g_playbackState.SetPosition({80000, 0});
273 g_playbackState.SetBufferedTime(60000);
274 g_playbackState.SetLoopMode(2);
275 g_playbackState.SetFavorite(true);
276 avsession_->SetAVPlaybackState(g_playbackState);
277
278 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
279 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
280
281 auto keyEvent = OHOS::MMI::KeyEvent::Create();
282 ASSERT_NE(keyEvent, nullptr);
283 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
284 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
285 OHOS::MMI::KeyEvent::KeyItem item;
286 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
287 item.SetDownTime(0);
288 item.SetPressed(true);
289 keyEvent->AddPressedKeyItems(item);
290 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
291 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
292 sleep(1);
293 EXPECT_EQ(g_nextOnCall, AVSESSION_SUCCESS);
294 g_nextOnCall = false;
295 SLOGI("SendSystemAVKeyEvent003 end!");
296 }
297
298 /**
299 * @tc.name: SendSystemAVKeyEvent004
300 * @tc.desc: verifying send system keyEvent
301 * @tc.type: FUNC
302 * @tc.require: #I5Y4MZ
303 */
304 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent004, TestSize.Level1)
305 {
306 SLOGI("SendSystemAVKeyEvent004 begin!");
307
308 g_metaData.Reset();
309 g_metaData.SetAssetId("123");
310 g_metaData.SetTitle("Black Humor");
311 g_metaData.SetArtist("zhoujielun");
312 g_metaData.SetAuthor("zhoujielun");
313 g_metaData.SetAlbum("Jay");
314 g_metaData.SetWriter("zhoujielun");
315 g_metaData.SetComposer("zhoujielun");
316 g_metaData.SetDuration(40000);
317 g_metaData.SetMediaImageUri("xxxxx");
318 g_metaData.SetSubTitle("fac");
319 g_metaData.SetDescription("for friends");
320 g_metaData.SetLyric("xxxxx");
321 avsession_->SetAVMetaData(g_metaData);
322
323 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
324 g_playbackState.SetSpeed(1.5);
325 g_playbackState.SetPosition({80000, 0});
326 g_playbackState.SetBufferedTime(60000);
327 g_playbackState.SetLoopMode(2);
328 g_playbackState.SetFavorite(true);
329 avsession_->SetAVPlaybackState(g_playbackState);
330
331 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
332 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
333
334 auto keyEvent = OHOS::MMI::KeyEvent::Create();
335 ASSERT_NE(keyEvent, nullptr);
336 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
337 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
338 OHOS::MMI::KeyEvent::KeyItem item;
339 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
340 item.SetDownTime(0);
341 item.SetPressed(true);
342 keyEvent->AddPressedKeyItems(item);
343 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
344 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
345 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
346 sleep(1);
347 EXPECT_EQ(g_previousOnCall, AVSESSION_SUCCESS);
348 g_previousOnCall = false;
349 SLOGI("SendSystemAVKeyEvent004 end!");
350 }
351
352 /**
353 * @tc.name: SendSystemAVKeyEvent005
354 * @tc.desc: verifying send system keyEvent
355 * @tc.type: FUNC
356 * @tc.require: #I5Y4MZ
357 */
358 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent005, TestSize.Level1)
359 {
360 SLOGI("SendSystemAVKeyEvent005 begin!");
361
362 g_metaData.Reset();
363 g_metaData.SetAssetId("123");
364 g_metaData.SetTitle("Black Humor");
365 g_metaData.SetArtist("zhoujielun");
366 g_metaData.SetAuthor("zhoujielun");
367 g_metaData.SetAlbum("Jay");
368 g_metaData.SetWriter("zhoujielun");
369 g_metaData.SetComposer("zhoujielun");
370 g_metaData.SetDuration(40000);
371 g_metaData.SetMediaImageUri("xxxxx");
372 g_metaData.SetSubTitle("fac");
373 g_metaData.SetDescription("for friends");
374 g_metaData.SetLyric("xxxxx");
375 avsession_->SetAVMetaData(g_metaData);
376
377 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
378 g_playbackState.SetSpeed(1.5);
379 g_playbackState.SetPosition({80000, 0});
380 g_playbackState.SetBufferedTime(60000);
381 g_playbackState.SetLoopMode(2);
382 g_playbackState.SetFavorite(true);
383 avsession_->SetAVPlaybackState(g_playbackState);
384
385 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
386 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
387
388 auto keyEvent = OHOS::MMI::KeyEvent::Create();
389 ASSERT_NE(keyEvent, nullptr);
390 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
391 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
392 OHOS::MMI::KeyEvent::KeyItem item;
393 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
394 item.SetDownTime(0);
395 item.SetPressed(true);
396 keyEvent->AddPressedKeyItems(item);
397 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
398 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
399 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
400 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
401 sleep(1);
402 EXPECT_EQ(g_previousOnCall, AVSESSION_SUCCESS);
403 g_previousOnCall = false;
404 SLOGI("SendSystemAVKeyEvent005 end!");
405 }
406
407 /**
408 * @tc.name: SendSystemAVKeyEvent006
409 * @tc.desc: verifying send system keyEvent
410 * @tc.type: FUNC
411 * @tc.require: #I5Y4MZ
412 */
413 HWTEST_F(AVSessionServiceTest, SendSystemAVKeyEvent006, TestSize.Level1)
414 {
415 SLOGI("SendSystemAVKeyEvent006 begin!");
416
417 g_metaData.Reset();
418 g_metaData.SetAssetId("123");
419 g_metaData.SetTitle("Black Humor");
420 g_metaData.SetArtist("zhoujielun");
421 g_metaData.SetAuthor("zhoujielun");
422 g_metaData.SetAlbum("Jay");
423 g_metaData.SetWriter("zhoujielun");
424 g_metaData.SetComposer("zhoujielun");
425 g_metaData.SetDuration(40000);
426 g_metaData.SetMediaImageUri("xxxxx");
427 g_metaData.SetSubTitle("fac");
428 g_metaData.SetDescription("for friends");
429 g_metaData.SetLyric("xxxxx");
430 avsession_->SetAVMetaData(g_metaData);
431
432 g_playbackState.SetState(AVPlaybackState::PLAYBACK_STATE_PLAY);
433 g_playbackState.SetSpeed(1.5);
434 g_playbackState.SetPosition({80000, 0});
435 g_playbackState.SetBufferedTime(60000);
436 g_playbackState.SetLoopMode(2);
437 g_playbackState.SetFavorite(true);
438 avsession_->SetAVPlaybackState(g_playbackState);
439
440 std::shared_ptr<AVSessionCallback> callback = std::make_shared<AVSessionCallbackImpl>();
441 EXPECT_EQ(avsession_->RegisterCallback(callback), AVSESSION_SUCCESS);
442
443 auto keyEvent = OHOS::MMI::KeyEvent::Create();
444 ASSERT_NE(keyEvent, nullptr);
445 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
446 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_DOWN);
447 OHOS::MMI::KeyEvent::KeyItem item;
448 item.SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HEADSETHOOK);
449 item.SetDownTime(0);
450 item.SetPressed(true);
451 keyEvent->AddPressedKeyItems(item);
452 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
453 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
454 sleep(1);
455 EXPECT_EQ(g_nextOnCall, AVSESSION_SUCCESS);
456 g_nextOnCall = false;
457 OHOS::MMI::InputManager::GetInstance()->SimulateInputEvent(keyEvent);
458 sleep(1);
459 EXPECT_EQ(g_pauseOnCall, AVSESSION_SUCCESS);
460 g_pauseOnCall = false;
461 SLOGI("SendSystemAVKeyEvent006 end!");
462 }