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_->screenCaptureCb_ = std::make_shared<ScreenCaptureServerUnittestCallback>();
42     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
43         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
44     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
45     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
46     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
47         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
48         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
49     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
50     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
51     sleep(RECORDER_TIME);
52     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
53     // avoid crash
54     screenCaptureServer_->screenCaptureCb_ = nullptr;
55 }
56 
57 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_002, TestSize.Level2)
58 {
59     SetValidConfig();
60     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
61     screenCaptureServer_->screenCaptureCb_ = std::make_shared<ScreenCaptureServerUnittestCallback>();
62     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
63         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
64     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
65     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
66     screenCaptureServer_->innerAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
67         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
68         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
69     screenCaptureServer_->innerAudioCapture_->bundleName_ = ScreenRecorderBundleName;
70     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
71     sleep(RECORDER_TIME);
72     ASSERT_EQ(screenCaptureServer_->innerAudioCapture_->Stop(), MSERR_OK);
73     screenCaptureServer_->innerAudioCapture_->OnStartFailed(
74         ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, SCREEN_CAPTURE_ERR_UNKNOWN);
75     // avoid crash
76     screenCaptureServer_->screenCaptureCb_ = nullptr;
77 }
78 
79 HWTEST_F(ScreenCaptureServerFunctionTest, AudioCapturerWrapperStart_003, TestSize.Level2)
80 {
81     SetValidConfig();
82     ASSERT_EQ(InitStreamScreenCaptureServer(), MSERR_OK);
83     screenCaptureServer_->screenCaptureCb_ = std::make_shared<ScreenCaptureServerUnittestCallback>();
84     screenCaptureServer_->audioSource_ = std::make_unique<AudioDataSource>(
85         AVScreenCaptureMixMode::MIX_MODE, screenCaptureServer_.get());
86     screenCaptureServer_->captureCallback_ = std::make_shared<ScreenRendererAudioStateChangeCallback>();
87     screenCaptureServer_->captureCallback_->SetAudioSource(screenCaptureServer_->audioSource_);
88     screenCaptureServer_->micAudioCapture_ = std::make_shared<AudioCapturerWrapper>(
89         screenCaptureServer_->captureConfig_.audioInfo.innerCapInfo, screenCaptureServer_->screenCaptureCb_,
90         std::string("OS_InnerAudioCapture"), screenCaptureServer_->contentFilter_);
91     screenCaptureServer_->micAudioCapture_->bundleName_ = ScreenRecorderBundleName;
92     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Start(screenCaptureServer_->appInfo_), MSERR_OK);
93     sleep(RECORDER_TIME);
94     ASSERT_EQ(screenCaptureServer_->micAudioCapture_->Stop(), MSERR_OK);
95     screenCaptureServer_->micAudioCapture_->OnStartFailed(
96         ScreenCaptureErrorType::SCREEN_CAPTURE_ERROR_INTERNAL, SCREEN_CAPTURE_ERR_UNKNOWN);
97     // avoid crash
98     screenCaptureServer_->screenCaptureCb_ = nullptr;
99 }
100 } // Media
101 } // OHOS