• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <unistd.h>
17 #include <sys/stat.h>
18 #include "screen_capture_server_function_unittest.h"
19 #include "ui_extension_ability_connection.h"
20 #include "image_source.h"
21 #include "image_type.h"
22 #include "pixel_map.h"
23 #include "media_log.h"
24 #include "media_errors.h"
25 #include "media_utils.h"
26 #include "uri_helper.h"
27 #include "media_dfx.h"
28 #include "scope_guard.h"
29 #include "param_wrapper.h"
30 
31 using namespace testing::ext;
32 using namespace OHOS::Media::ScreenCaptureTestParam;
33 using namespace OHOS::Media;
34 
35 namespace OHOS {
36 namespace Media {
37 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_001, TestSize.Level2)
38 {
39     SetValidConfig();
40     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
41     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
42         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
43     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
44     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
45     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
46         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
47         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
48     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
49     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
50     sleep(RECORDER_TIME);
51     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
52 }
53 
54 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_002, TestSize.Level2)
55 {
56     SetValidConfig();
57     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
58     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
59         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
60     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
61     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
62     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
63         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
64         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
65     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
66     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
67     sleep(RECORDER_TIME);
68     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
69     screenCaptureServer_->innerAudioCapture_->OnStartFailed(
70         ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, SCREEN_CAPTURE_ERR_UNKNOWN);
71 }
72 
73 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_003, TestSize.Level2)
74 {
75     SetValidConfig();
76     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
77     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
78         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
79     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
80     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
81     screenCaptureServer_->micAudioCapture_ = std::make_shared<MicAudioCapturerWrapper>(
82         screenCaptureServer_->captureConfig_.audioInfo.micCapInfo, screenCaptureServer_->screenCaptureCb_,
83         std::string("OS_MicAudioCapture"), screenCaptureServer_->contentFilter_);
84     screenCaptureServer_->micAudioCapture_->bundleName_ = ScreenRecorderBundleName;
85     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
86     sleep(RECORDER_TIME);
87     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Stop(), MSERR_OK);
88     screenCaptureServer_->micAudioCapture_->OnStartFailed(
89         ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, SCREEN_CAPTURE_ERR_UNKNOWN);
90 }
91 
92 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_004, TestSize.Level2)
93 {
94     SetValidConfig();
95     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
96     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
97         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
98     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
99     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
100     screenCaptureServer_->micAudioCapture_ = std::make_shared<MicAudioCapturerWrapper>(
101         screenCaptureServer_->captureConfig_.audioInfo.micCapInfo, screenCaptureServer_->screenCaptureCb_,
102         std::string("OS_MicAudioCapture"), screenCaptureServer_->contentFilter_);
103     screenCaptureServer_->micAudioCapture_->bundleName_ = ScreenRecorderBundleName;
104     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
105     sleep(RECORDER_TIME);
106     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Stop(), MSERR_OK);
107     screenCaptureServer_->micAudioCapture_->screenCaptureCb_ = nullptr;
108     screenCaptureServer_->micAudioCapture_->OnStartFailed(
109         ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, SCREEN_CAPTURE_ERR_UNKNOWN);
110 }
111 
112 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperPause_001, TestSize.Level2)
113 {
114     SetValidConfig();
115     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
116     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
117         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
118     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
119     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
120     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
121         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
122         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
123     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
124     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
125     sleep(RECORDER_TIME);
126     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
127     sleep(RECORDER_TIME);
128     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Resume(), MSERR_OK);
129     sleep(RECORDER_TIME);
130     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
131 }
132 
133 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperPause_002, TestSize.Level2)
134 {
135     SetValidConfig();
136     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
137     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
138         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
139     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
140     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
141     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
142         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
143         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
144     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
145     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
146     sleep(RECORDER_TIME);
147     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
148     sleep(RECORDER_TIME);
149     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
150     sleep(RECORDER_TIME);
151     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Resume(), MSERR_OK);
152     sleep(RECORDER_TIME);
153     ASSERT_NE(screenCaptureServer_->innerAudioCapture_->Resume(), MSERR_OK);
154     sleep(RECORDER_TIME);
155     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
156 }
157 
158 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperPause_003, TestSize.Level2)
159 {
160     SetValidConfig();
161     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
162     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
163         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
164     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
165     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
166     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
167         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
168         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
169     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
170     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
171     sleep(RECORDER_TIME);
172     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
173     sleep(RECORDER_TIME);
174     screenCaptureServer_->innerAudioCapture_->isRunning_.store(true);
175     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
176     sleep(RECORDER_TIME);
177     screenCaptureServer_->innerAudioCapture_->isRunning_.store(true);
178     screenCaptureServer_->innerAudioCapture_->audioCapturer_->Stop();
179     screenCaptureServer_->innerAudioCapture_->audioCapturer_->Release();
180     screenCaptureServer_->innerAudioCapture_->audioCapturer_ = nullptr;
181     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Pause(), MSERR_OK);
182     sleep(RECORDER_TIME);
183     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
184 }
185 
186 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperRelativeSleep_001, TestSize.Level2)
187 {
188     SetValidConfig();
189     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
190     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
191         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
192     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
193     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
194     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
195         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
196         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
197     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->RelativeSleep(1), MSERR_OK);
198 }
199 
200 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperOnInterrupt_001, TestSize.Level2)
201 {
202     SetValidConfig();
203     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
204     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
205         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
206     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
207     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
208     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
209         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
210         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
211     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
212     AudioStandard::InterruptEvent interruptEvent;
213     screenCaptureServer_->innerAudioCapture_->audioCaptureCallback_->OnInterrupt(interruptEvent);
214     sleep(RECORDER_TIME);
215     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
216 }
217 
218 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperUpdateAudioCapturerConfig_001, TestSize.Level2)
219 {
220     SetValidConfig();
221     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
222     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
223         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
224     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
225     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
226     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
227         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
228         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
229     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
230     ScreenCaptureContentFilter filter;
231     filter.filteredAudioContents.insert(AVScreenCaptureFilterableAudioContent::SCREEN_CAPTURE_CURRENT_APP_AUDIO);
232     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
233     screenCaptureServer_->innerAudioCapture_->UpdateAudioCapturerConfig(filter);
234     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
235 }
236 
237 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperUpdateAudioCapturerConfig_002, TestSize.Level2)
238 {
239     SetValidConfig();
240     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
241     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
242         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
243     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
244     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
245     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
246         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
247         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
248     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
249     ScreenCaptureContentFilter filter;
250     filter.filteredAudioContents.insert(AVScreenCaptureFilterableAudioContent::SCREEN_CAPTURE_NOTIFICATION_AUDIO);
251     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
252     screenCaptureServer_->innerAudioCapture_->UpdateAudioCapturerConfig(filter);
253     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
254 }
255 
256 #ifdef SUPPORT_CALL
257 /**
258 * @tc.name: AudioCapturerWrapperInTelCall_001
259 * @tc.desc: start audio capture wrapper during telephone call
260 * @tc.type: FUNC
261 */
262 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStartInTelCall_001, TestSize.Level2)
263 {
264     SetValidConfig();
265     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
266     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
267         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
268     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
269     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
270     screenCaptureServer_->micAudioCapture_ = std::make_shared<MicAudioCapturerWrapper>(
271         screenCaptureServer_->captureConfig_.audioInfo.micCapInfo, screenCaptureServer_->screenCaptureCb_,
272         std::string("OS_MicAudioCapture"), screenCaptureServer_->contentFilter_);
273     screenCaptureServer_->micAudioCapture_->SetIsInTelCall(true);
274     ASSERT_NE(screenCaptureServer_->micAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
275     screenCaptureServer_->micAudioCapture_->screenCaptureCb_ = nullptr;
276 }
277 
278 /**
279 * @tc.name: AudioCapturerWrapperInTelCall_002
280 * @tc.desc: resume audio capture wrapper during telephone call
281 * @tc.type: FUNC
282 */
283 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperInTelCall_002, TestSize.Level2)
284 {
285     SetValidConfig();
286     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
287     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
288         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
289     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
290     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
291     screenCaptureServer_->micAudioCapture_ = std::make_shared<MicAudioCapturerWrapper>(
292         screenCaptureServer_->captureConfig_.audioInfo.micCapInfo, screenCaptureServer_->screenCaptureCb_,
293         std::string("OS_MicAudioCapture"), screenCaptureServer_->contentFilter_);
294     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
295     sleep(RECORDER_TIME);
296     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Pause(), MSERR_OK);
297     sleep(RECORDER_TIME);
298     screenCaptureServer_->micAudioCapture_->SetIsInTelCall(true);
299     sleep(RECORDER_TIME);
300     ASSERT_NE(screenCaptureServer_->micAudioCapture_->Resume(), MSERR_OK);
301 }
302 #endif
303 } // Media
304 } // OHOS