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