1 /*
2  * Copyright (c) 2024 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_info.h"
18 #include "audio_adapter.h"
19 #include "avsession_log.h"
20 #include "avsession_errors.h"
21 #include "focus_session_strategy.h"
22 
23 using namespace OHOS;
24 using namespace OHOS::AVSession;
25 using OHOS::AudioStandard::AudioRendererChangeInfo;
26 using OHOS::AudioStandard::RendererState;
27 
28 class FocusSessionStrategyTest : public testing::Test {
29 public:
30     static void SetUpTestCase(void);
31     static void TearDownTestCase(void);
32     void SetUp();
33     void TearDown();
34 };
35 
SetUpTestCase()36 void FocusSessionStrategyTest::SetUpTestCase()
37 {}
38 
TearDownTestCase()39 void FocusSessionStrategyTest::TearDownTestCase()
40 {}
41 
SetUp()42 void FocusSessionStrategyTest::SetUp()
43 {}
44 
TearDown()45 void FocusSessionStrategyTest::TearDown()
46 {}
47 
48 /**
49  * @tc.name: HandleAudioRenderStateChangeEvent001
50  * @tc.desc: Test IsCommandSendEnable
51  * @tc.type: FUNC
52  */
HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent001, testing::ext::TestSize.Level1)53 static HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent001, testing::ext::TestSize.Level1)
54 {
55     SLOGD("HandleAudioRenderStateChangeEvent001 begin!");
56     FocusSessionStrategy focusSessionStrategy;
57     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
58     info->clientUID = 1;
59     info->sessionId = 2;
60     info->rendererState = RendererState::RENDERER_RELEASED;
61     AudioRendererChangeInfos infos;
62     infos.push_back(std::move(info));
63 
64     focusSessionStrategy.HandleAudioRenderStateChangeEvent(infos);
65     SLOGD("HandleAudioRenderStateChangeEvent001 end!");
66 }
67 
68 /**
69  * @tc.name: HandleAudioRenderStateChangeEvent002
70  * @tc.desc: Test IsCommandSendEnable
71  * @tc.type: FUNC
72  */
HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent002, testing::ext::TestSize.Level1)73 static HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent002, testing::ext::TestSize.Level1)
74 {
75     SLOGD("HandleAudioRenderStateChangeEvent002 begin!");
76     FocusSessionStrategy focusSessionStrategy;
77     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
78     info->clientUID = 1;
79     info->sessionId = 2;
80     info->rendererState = RendererState::RENDERER_RELEASED;
81     AudioRendererChangeInfos infos;
82     infos.push_back(std::move(info));
83 
84     auto func = [](const FocusSessionStrategy::FocusSessionChangeInfo&) {};
85     focusSessionStrategy.RegisterFocusSessionChangeCallback(func);
86     focusSessionStrategy.HandleAudioRenderStateChangeEvent(infos);
87     SLOGD("HandleAudioRenderStateChangeEvent002 end!");
88 }
89 
90 /**
91  * @tc.name: HandleAudioRenderStateChangeEvent003
92  * @tc.desc: Test IsCommandSendEnable
93  * @tc.type: FUNC
94  */
HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent003, testing::ext::TestSize.Level1)95 static HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent003, testing::ext::TestSize.Level1)
96 {
97     SLOGD("HandleAudioRenderStateChangeEvent003 begin!");
98     FocusSessionStrategy focusSessionStrategy;
99     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
100     info->clientUID = 1;
101     info->sessionId = 2;
102     info->rendererState = RendererState::RENDERER_RUNNING;
103     AudioRendererChangeInfos infos;
104     infos.push_back(std::move(info));
105 
106     focusSessionStrategy.HandleAudioRenderStateChangeEvent(infos);
107     SLOGD("HandleAudioRenderStateChangeEvent003 end!");
108 }
109 
110 /**
111  * @tc.name: HandleAudioRenderStateChangeEvent004
112  * @tc.desc: Test IsCommandSendEnable
113  * @tc.type: FUNC
114  */
HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent004, testing::ext::TestSize.Level1)115 static HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent004, testing::ext::TestSize.Level1)
116 {
117     SLOGD("HandleAudioRenderStateChangeEvent004 begin!");
118     FocusSessionStrategy focusSessionStrategy;
119     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
120     info->clientUID = 1;
121     info->sessionId = 2;
122     info->rendererState = RendererState::RENDERER_RUNNING;
123     AudioRendererChangeInfos infos;
124     infos.push_back(std::move(info));
125 
126     auto func = [](const FocusSessionStrategy::FocusSessionChangeInfo&) {};
127     focusSessionStrategy.RegisterFocusSessionChangeCallback(func);
128     focusSessionStrategy.HandleAudioRenderStateChangeEvent(infos);
129     SLOGD("HandleAudioRenderStateChangeEvent004 end!");
130 }
131 
132 /**
133  * @tc.name: HandleAudioRenderStateChangeEvent005
134  * @tc.desc: Test IsCommandSendEnable
135  * @tc.type: FUNC
136  */
HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent005, testing::ext::TestSize.Level1)137 static HWTEST_F(FocusSessionStrategyTest, HandleAudioRenderStateChangeEvent005, testing::ext::TestSize.Level1)
138 {
139     SLOGD("HandleAudioRenderStateChangeEvent005 begin!");
140     FocusSessionStrategy focusSessionStrategy;
141     std::shared_ptr<AudioRendererChangeInfo> info1 = std::make_shared<AudioRendererChangeInfo>();
142     info1->clientUID = 1;
143     info1->sessionId = 2;
144     info1->rendererState = RendererState::RENDERER_RELEASED;
145 
146     std::shared_ptr<AudioRendererChangeInfo> info2 = std::make_shared<AudioRendererChangeInfo>();
147     info2->clientUID = 3;
148     info2->sessionId = 4;
149     info2->rendererState = RendererState::RENDERER_RUNNING;
150 
151     AudioRendererChangeInfos infos;
152     infos.push_back(std::move(info1));
153     infos.push_back(std::move(info2));
154 
155     auto func = [](const FocusSessionStrategy::FocusSessionChangeInfo&) {};
156     focusSessionStrategy.RegisterFocusSessionChangeCallback(func);
157     focusSessionStrategy.HandleAudioRenderStateChangeEvent(infos);
158     SLOGD("HandleAudioRenderStateChangeEvent005 end!");
159 }
160 
161 /**
162  * @tc.name: IsFocusSession001
163  * @tc.desc: Test IsFocusSession
164  * @tc.type: FUNC
165  */
HWTEST_F(FocusSessionStrategyTest, IsFocusSession001, testing::ext::TestSize.Level1)166 static HWTEST_F(FocusSessionStrategyTest, IsFocusSession001, testing::ext::TestSize.Level1)
167 {
168     SLOGD("IsFocusSession001 begin!");
169     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
170     info->clientUID = 1;
171     info->sessionId = 2;
172     info->rendererState = RendererState::RENDERER_RELEASED;
173     AudioRendererChangeInfos infos;
174     infos.push_back(std::move(info));
175     FocusSessionStrategy focusSessionStrategy;
176     auto func = [](const OHOS::AVSession::FocusSessionStrategy::FocusSessionChangeInfo&) {
177         return false;
178     };
179     focusSessionStrategy.RegisterFocusSessionSelector(func);
180     FocusSessionStrategy::FocusSessionChangeInfo sessionInfo;
181     bool ret = focusSessionStrategy.SelectFocusSession(infos, sessionInfo);
182     EXPECT_EQ(ret, false);
183     AudioRendererChangeInfo audioRendererChangeInfo;
184     audioRendererChangeInfo.clientUID = 1;
185     audioRendererChangeInfo.sessionId = 2;
186     audioRendererChangeInfo.rendererState = RendererState::RENDERER_RELEASED;
187     ret = focusSessionStrategy.IsFocusSession(audioRendererChangeInfo);
188     EXPECT_EQ(ret, false);
189     SLOGD("IsFocusSession001 end!");
190 }
191 
192 /**
193  * @tc.name: IsFocusSession002
194  * @tc.desc: Test IsFocusSession
195  * @tc.type: FUNC
196  */
HWTEST_F(FocusSessionStrategyTest, IsFocusSession002, testing::ext::TestSize.Level1)197 static HWTEST_F(FocusSessionStrategyTest, IsFocusSession002, testing::ext::TestSize.Level1)
198 {
199     SLOGD("IsFocusSession002 begin!");
200 
201     std::shared_ptr<AudioRendererChangeInfo> info = std::make_shared<AudioRendererChangeInfo>();
202     info->clientUID = 1;
203     info->sessionId = 2;
204     info->rendererState = RendererState::RENDERER_RELEASED;
205     AudioRendererChangeInfos infos;
206     infos.push_back(std::move(info));
207     FocusSessionStrategy focusSessionStrategy;
208     auto func = [](const OHOS::AVSession::FocusSessionStrategy::FocusSessionChangeInfo&) {
209         return true;
210     };
211     focusSessionStrategy.RegisterFocusSessionSelector(func);
212     FocusSessionStrategy::FocusSessionChangeInfo sessionInfo;
213     bool ret = focusSessionStrategy.SelectFocusSession(infos, sessionInfo);
214     EXPECT_EQ(ret, false);
215     AudioRendererChangeInfo audioRendererChangeInfo;
216     audioRendererChangeInfo.clientUID = 1;
217     audioRendererChangeInfo.sessionId = 2;
218     audioRendererChangeInfo.rendererState = RendererState::RENDERER_RUNNING;
219     ret = focusSessionStrategy.IsFocusSession(audioRendererChangeInfo);
220     EXPECT_EQ(ret, true);
221     SLOGD("IsFocusSession002 end!");
222 }