• 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(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 }