1 /*
2  * Copyright (c) 2022 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 "audio_adapter.h"
18 #include "avsession_errors.h"
19 #include "avsession_log.h"
20 #include "audio_info.h"
21 
22 using namespace testing::ext;
23 using namespace OHOS::AVSession;
24 using OHOS::AudioStandard::AudioRendererChangeInfo;
25 using OHOS::AudioStandard::RendererState;
26 
27 class AudioAdapterTest : public testing::Test {
28 public:
29     static void SetUpTestCase(void);
30     static void TearDownTestCase(void);
31     void SetUp();
32     void TearDown();
33 
34     static constexpr int32_t TEST_CLIENT_UID = 1;
35     static constexpr int32_t TEST_SESSION_ID = 2;
36 };
37 
SetUpTestCase()38 void AudioAdapterTest::SetUpTestCase()
39 {}
40 
TearDownTestCase()41 void AudioAdapterTest::TearDownTestCase()
42 {}
43 
SetUp()44 void AudioAdapterTest::SetUp()
45 {}
46 
TearDown()47 void AudioAdapterTest::TearDown()
48 {}
49 
50 /**
51 * @tc.name: OnRendererStateChange001
52 * @tc.desc: verifying the renderer state listener
53 * @tc.type: FUNC
54 * @tc.require: AR000H31KJ
55 */
56 static HWTEST(AudioAdapterTest, OnRendererStateChange001, TestSize.Level1)
57 {
58     SLOGI("OnRendererStateChange001 begin!");
59     std::unique_ptr<AudioRendererChangeInfo> info = std::make_unique<AudioRendererChangeInfo>();
60     info->clientUID = AudioAdapterTest::TEST_CLIENT_UID;
61     info->sessionId = AudioAdapterTest::TEST_SESSION_ID;
62     info->rendererState = RendererState::RENDERER_RELEASED;
63     AudioRendererChangeInfos infosExpected;
64     infosExpected.push_back(std::move(info));
65     AudioRendererChangeInfos infosActual;
66 
67     AudioAdapter::GetInstance().Init();
__anon549dab870102(const AudioRendererChangeInfos& infos) 68     AudioAdapter::GetInstance().AddStreamRendererStateListener([&infosActual](const AudioRendererChangeInfos& infos) {
69         SLOGI("AddStreamRendererStateListener start!");
70         for (const auto& info : infos) {
71             std::unique_ptr<AudioRendererChangeInfo> infoActual = std::make_unique<AudioRendererChangeInfo>();
72             *infoActual = *info;
73             infosActual.push_back(std::move(infoActual));
74         }
75         SLOGI("AddStreamRendererStateListener end!");
76     });
77     AudioAdapter::GetInstance().OnRendererStateChange(infosExpected);
78 
79     ASSERT_NE(infosActual.size(), 0);
80     const auto& infoExpected = infosExpected[0];
81     const auto& infoActual = infosActual[0];
82     EXPECT_EQ(infoExpected->clientUID, infoActual->clientUID);
83     EXPECT_EQ(infoExpected->sessionId, infoActual->sessionId);
84     EXPECT_EQ(infoExpected->rendererState, infoActual->rendererState);
85     SLOGI("OnRendererStateChange001 end!");
86 }
87 
88 /**
89 * @tc.name: PauseAudioStream002
90 * @tc.desc: pause audio stream for valid uid TEST_CLIENT_UID
91 * @tc.type: FUNC
92 * @tc.require: AR000H31KJ
93 */
94 static HWTEST(AudioAdapterTest, PauseAudioStream001, TestSize.Level1)
95 {
96     SLOGI("PauseAudioStream001 begin!");
97     std::unique_ptr<AudioRendererChangeInfo> info = std::make_unique<AudioRendererChangeInfo>();
98     info->clientUID = AudioAdapterTest::TEST_CLIENT_UID;
99     info->sessionId = AudioAdapterTest::TEST_SESSION_ID;
100     info->rendererState = RendererState::RENDERER_RELEASED;
101     AudioRendererChangeInfos infosExpected;
102     infosExpected.push_back(std::move(info));
103     AudioRendererChangeInfos infosActual;
104 
105     AudioAdapter::GetInstance().Init();
__anon549dab870202(const AudioRendererChangeInfos& infos) 106     AudioAdapter::GetInstance().AddStreamRendererStateListener([&infosActual](const AudioRendererChangeInfos& infos) {
107         SLOGI("AddStreamRendererStateListener start!");
108         for (const auto& info : infos) {
109             std::unique_ptr<AudioRendererChangeInfo> infoActual = std::make_unique<AudioRendererChangeInfo>();
110             *infoActual = *info;
111             infosActual.push_back(std::move(infoActual));
112         }
113         SLOGI("AddStreamRendererStateListener end!");
114     });
115     auto ret = AudioAdapter::GetInstance().PauseAudioStream(AudioAdapterTest::TEST_CLIENT_UID);
116     EXPECT_NE(ret, AVSESSION_ERROR_BASE);
117     SLOGI("PauseAudioStream001 end!");
118 }