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     static constexpr int32_t TEST_SESSION_FAIL_ID = -1;
37 };
38 
SetUpTestCase()39 void AudioAdapterTest::SetUpTestCase()
40 {}
41 
TearDownTestCase()42 void AudioAdapterTest::TearDownTestCase()
43 {}
44 
SetUp()45 void AudioAdapterTest::SetUp()
46 {}
47 
TearDown()48 void AudioAdapterTest::TearDown()
49 {}
50 
51 /**
52 * @tc.name: OnRendererStateChange001
53 * @tc.desc: verifying the renderer state listener
54 * @tc.type: FUNC
55 * @tc.require: AR000H31KJ
56 */
HWTEST(AudioAdapterTest, OnRendererStateChange001, TestSize.Level1)57 static HWTEST(AudioAdapterTest, OnRendererStateChange001, TestSize.Level1)
58 {
59     SLOGI("OnRendererStateChange001 begin!");
60     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
61     info->clientUID = AudioAdapterTest::TEST_CLIENT_UID;
62     info->sessionId = AudioAdapterTest::TEST_SESSION_ID;
63     info->rendererState = RendererState::RENDERER_RELEASED;
64     AudioRendererChangeInfos infosExpected;
65     infosExpected.push_back(std::move(info));
66     AudioRendererChangeInfos infosActual;
67 
68     AudioAdapter::GetInstance().Init();
69     AudioAdapter::GetInstance().AddStreamRendererStateListener([&infosActual](const AudioRendererChangeInfos& infos) {
70         SLOGI("AddStreamRendererStateListener start!");
71         for (const auto& info : infos) {
72             std::shared_ptr<AudioRendererChangeInfo> infoActual = std::make_shared<AudioRendererChangeInfo>();
73             *infoActual = *info;
74             infosActual.push_back(std::move(infoActual));
75         }
76         SLOGI("AddStreamRendererStateListener end!");
77     });
78     AudioAdapter::GetInstance().OnRendererStateChange(infosExpected);
79 
80     ASSERT_NE(infosActual.size(), 0);
81     const auto& infoExpected = infosExpected[0];
82     const auto& infoActual = infosActual[0];
83     EXPECT_EQ(infoExpected->clientUID, infoActual->clientUID);
84     EXPECT_EQ(infoExpected->sessionId, infoActual->sessionId);
85     EXPECT_EQ(infoExpected->rendererState, infoActual->rendererState);
86     SLOGI("OnRendererStateChange001 end!");
87 }
88 
89 /**
90 * @tc.name: MuteAudioStream001
91 * @tc.desc: mute audio stream for valid uid TEST_CLIENT_UID
92 * @tc.type: FUNC
93 * @tc.require: AR000H31KJ
94 */
HWTEST(AudioAdapterTest, MuteAudioStream001, TestSize.Level1)95 static HWTEST(AudioAdapterTest, MuteAudioStream001, TestSize.Level1)
96 {
97     SLOGI("MuteAudioStream001 begin!");
98     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
99     info->clientUID = AudioAdapterTest::TEST_CLIENT_UID;
100     info->sessionId = AudioAdapterTest::TEST_SESSION_ID;
101     info->rendererState = RendererState::RENDERER_RELEASED;
102     AudioRendererChangeInfos infosExpected;
103     infosExpected.push_back(std::move(info));
104     AudioRendererChangeInfos infosActual;
105 
106     AudioAdapter::GetInstance().Init();
107     AudioAdapter::GetInstance().AddStreamRendererStateListener([&infosActual](const AudioRendererChangeInfos& infos) {
108         SLOGI("AddStreamRendererStateListener start!");
109         for (const auto& info : infos) {
110             std::shared_ptr<AudioRendererChangeInfo> infoActual = std::make_shared<AudioRendererChangeInfo>();
111             *infoActual = *info;
112             infosActual.push_back(std::move(infoActual));
113         }
114         SLOGI("AddStreamRendererStateListener end!");
115     });
116     auto ret = AudioAdapter::GetInstance().MuteAudioStream(AudioAdapterTest::TEST_CLIENT_UID);
117     EXPECT_NE(ret, AVSESSION_ERROR_BASE);
118 }
119 
120 /**
121 * @tc.name: UnMuteAudioStream001
122 * @tc.desc: unmute audio stream for valid uid TEST_CLIENT_UID
123 * @tc.type: FUNC
124 * @tc.require: AR000H31KJ
125 */
HWTEST(AudioAdapterTest, UnMuteAudioStream001, TestSize.Level1)126 static HWTEST(AudioAdapterTest, UnMuteAudioStream001, TestSize.Level1)
127 {
128     SLOGI("UnMuteAudioStream001 begin!");
129     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
130     info->clientUID = AudioAdapterTest::TEST_CLIENT_UID;
131     info->sessionId = AudioAdapterTest::TEST_SESSION_ID;
132     info->rendererState = RendererState::RENDERER_RELEASED;
133     AudioRendererChangeInfos infosExpected;
134     infosExpected.push_back(std::move(info));
135     AudioRendererChangeInfos infosActual;
136 
137     AudioAdapter::GetInstance().Init();
138     AudioAdapter::GetInstance().AddStreamRendererStateListener([&infosActual](const AudioRendererChangeInfos& infos) {
139         SLOGI("AddStreamRendererStateListener start!");
140         for (const auto& info : infos) {
141             std::shared_ptr<AudioRendererChangeInfo> infoActual = std::make_shared<AudioRendererChangeInfo>();
142             *infoActual = *info;
143             infosActual.push_back(std::move(infoActual));
144         }
145         SLOGI("AddStreamRendererStateListener end!");
146     });
147     auto ret = AudioAdapter::GetInstance().UnMuteAudioStream(AudioAdapterTest::TEST_CLIENT_UID);
148     EXPECT_NE(ret, AVSESSION_ERROR_BASE);
149 }
150 
151 /**
152 * @tc.name: GetRendererRunning001
153 * @tc.desc: Test GetRendererRunning
154 * @tc.type: FUNC
155 * @tc.require: AR000H31KJ
156 */
HWTEST(AudioAdapterTest, GetRendererRunning001, TestSize.Level1)157 static HWTEST(AudioAdapterTest, GetRendererRunning001, TestSize.Level1)
158 {
159     SLOGI("GetRendererRunning001 begin!");
160     AudioAdapter::GetInstance().Init();
161     AudioAdapter::GetInstance().GetRendererRunning(AudioAdapterTest::TEST_CLIENT_UID);
162     SLOGI("GetRendererRunning001 end!");
163 }
164 
165 /**
166 * @tc.name: GetRendererRunning002
167 * @tc.desc: Test GetRendererRunning
168 * @tc.type: FUNC
169 * @tc.require: AR000H31KJ
170 */
HWTEST(AudioAdapterTest, GetRendererRunning002, TestSize.Level1)171 static HWTEST(AudioAdapterTest, GetRendererRunning002, TestSize.Level1)
172 {
173     SLOGI("GetRendererRunning002 begin!");
174     AudioAdapter::GetInstance().Init();
175     AudioAdapter::GetInstance().GetRendererRunning(AudioAdapterTest::TEST_SESSION_FAIL_ID);
176     SLOGI("GetRendererRunning002 end!");
177 }
178 
179 /**
180 * @tc.name: PauseAudioStream001
181 * @tc.desc: Test GetRendererRunning
182 * @tc.type: FUNC
183 * @tc.require: AR000H31KJ
184 */
HWTEST(AudioAdapterTest, PauseAudioStream001, TestSize.Level1)185 static HWTEST(AudioAdapterTest, PauseAudioStream001, TestSize.Level1)
186 {
187     SLOGD("PauseAudioStream001 begin!");
188     AudioAdapter::GetInstance().Init();
189     int32_t uid = 10001;
190     OHOS::AudioStandard::StreamUsage streamUsage {};
191     int32_t ret = AudioAdapter::GetInstance().PauseAudioStream(uid, streamUsage);
192     EXPECT_EQ(ret, AVSESSION_SUCCESS);
193     SLOGD("PauseAudioStream001 end!");
194 }