• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }