• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2023 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 "plugin/common/any.h"
18 #include "plugin/plugins/source/audio_capture/audio_capture_plugin.h"
19 #include "plugin/plugins/source/audio_capture/audio_type_translate.h"
20 
21 using namespace testing::ext;
22 
23 namespace OHOS {
24 namespace Media {
25 namespace Test {
26 using namespace Plugin;
27 using namespace AuCapturePlugin;
28 using namespace AudioStandard;
29 
30 #define MAX_TYPE 9
31 #define MP4_URL "http://www.w3school.com.cn/i/movie.mp4"
32 
33 class AudioCaptureCallback : public Callback {
34 public:
OnEvent(const PluginEvent & event)35     void OnEvent(const PluginEvent &event)
36     {
37         ASSERT_TRUE(static_cast<int>(event.type) >= 0);
38         ASSERT_TRUE(static_cast<int>(event.type) <= MAX_TYPE);
39     }
40 };
41 
42 HWTEST(AudioCaptureTest, testAudioCapturePluginErrorBranch, TestSize.Level1)
43 {
44     auto str = std::make_shared<std::string>("audio");
45     auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str());
46     ASSERT_TRUE(audioCapture != nullptr);
47 
48     auto status = audioCapture->Init();
49     ASSERT_TRUE(status == Status::OK);
50 
51     auto prepareStatus = audioCapture->Prepare();
52     ASSERT_TRUE(prepareStatus == Status::OK);
53 
54     auto deInitStatus = audioCapture->Deinit();
55     ASSERT_TRUE(deInitStatus == Status::OK);
56 
57     auto resetStatus = audioCapture->Reset();
58     ASSERT_FALSE(resetStatus == Status::OK);
59 
60     auto prepare = audioCapture->Prepare();
61     ASSERT_FALSE(prepare == Status::OK);
62 
63     auto startStatus = audioCapture->Start();
64     ASSERT_FALSE(startStatus == Status::OK);
65 
66     auto stopStatus = audioCapture->Stop();
67     ASSERT_TRUE(stopStatus == Status::OK);
68 }
69 
70 HWTEST(AudioCaptureTest, testAudioCapturePluginStart, TestSize.Level1)
71 {
72     auto str = std::make_shared<std::string>("audio");
73     auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str());
74     ASSERT_TRUE(audioCapture != nullptr);
75 
76     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_44100);
77     audioCapture->SetParameter(Tag::AUDIO_CHANNELS, STEREO);
78     audioCapture->SetParameter(Tag::MEDIA_BITRATE, 3000);
79     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S32LE);
80     audioCapture->SetParameter(Tag::APP_TOKEN_ID, 2000);
81     audioCapture->SetParameter(Tag::APP_UID, 300);
82     audioCapture->SetParameter(Tag::APP_PID, 1000);
83     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 60);
84 
85     auto initStatus = audioCapture->Init();
86     ASSERT_TRUE(initStatus == Status::OK);
87 
88     auto prepareSt = audioCapture->Prepare();
89     ASSERT_TRUE(prepareSt == Status::OK);
90 
91     auto resetStatus2 = audioCapture->Reset();
92     ASSERT_TRUE(resetStatus2 == Status::OK);
93 
94     auto stopStatus2 = audioCapture->Stop();
95     ASSERT_TRUE(stopStatus2 == Status::OK);
96 
97     auto startStatus2 = audioCapture->Start();
98     ASSERT_TRUE(startStatus2 == Status::ERROR_UNKNOWN);
99 
100     auto source = std::make_shared<MediaSource>(MP4_URL);
101     auto sourceSt = audioCapture->SetSource(source);
102     ASSERT_TRUE(sourceSt == Status::ERROR_UNIMPLEMENTED);
103 
104     AudioCaptureCallback pluginCallback {};
105     auto audioSt = audioCapture->SetCallback(&pluginCallback);
106     ASSERT_TRUE(audioSt == Status::ERROR_UNIMPLEMENTED);
107 
108     auto prepareSt2 = audioCapture->Prepare();
109     ASSERT_TRUE(prepareSt2 == Status::OK);
110 
111     auto startStatus3 = audioCapture->Start();
112     ASSERT_TRUE(startStatus3 == Status::ERROR_UNKNOWN);
113 }
114 
115 HWTEST(AudioCaptureTest, testAudioCapturePlugin, TestSize.Level1)
116 {
117     auto str = std::make_shared<std::string>("audio");
118     auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str());
119     ASSERT_TRUE(audioCapture != nullptr);
120 
121     auto initStatus = audioCapture->Init();
122     ASSERT_TRUE(initStatus == Status::OK);
123 
124     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_8000);
125     audioCapture->SetParameter(Tag::AUDIO_CHANNELS, MONO);
126     audioCapture->SetParameter(Tag::MEDIA_BITRATE, 16666);
127     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S16LE);
128     audioCapture->SetParameter(Tag::APP_TOKEN_ID, 100000);
129     audioCapture->SetParameter(Tag::APP_UID, 200);
130     audioCapture->SetParameter(Tag::APP_PID, 100);
131     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 30);
132 
133     auto source = std::make_shared<MediaSource>(MP4_URL);
134     auto sourceSt = audioCapture->SetSource(source);
135     ASSERT_TRUE(sourceSt == Status::ERROR_UNIMPLEMENTED);
136 
137     auto prepareSt2 = audioCapture->Prepare();
138     ASSERT_TRUE(prepareSt2 == Status::OK);
139 
140     auto startStatus3 = audioCapture->Start();
141     ASSERT_TRUE(startStatus3 == Status::ERROR_UNKNOWN);
142 
143     uint64_t size;
144     auto sizeStatus = audioCapture->GetSize(size);
145     ASSERT_TRUE(size == 1024);
146     ASSERT_TRUE(sizeStatus == Status::OK);
147 
148     std::shared_ptr<Buffer> buffer = std::make_shared<Buffer>(BufferMetaType::AUDIO);
149     size_t expectedLe = 10;
150     auto readStatus = audioCapture->Read(buffer, expectedLe);
151     ASSERT_TRUE(readStatus == Status::ERROR_AGAIN);
152 
153     Seekable seekable = audioCapture->GetSeekable();
154     ASSERT_EQ(Seekable::UNSEEKABLE, seekable);
155     Status seekSt = audioCapture->SeekTo(300);
156     ASSERT_EQ(seekSt, Status::ERROR_UNIMPLEMENTED);
157 
158     auto deInitStatus = audioCapture->Deinit();
159     ASSERT_TRUE(deInitStatus == Status::OK);
160 }
161 
162 HWTEST(AudioCaptureTest, testGetParams, TestSize.Level1)
163 {
164     auto str = std::make_shared<std::string>("audio");
165     auto audioCapture = std::make_shared<AudioCapturePlugin>(str->c_str());
166     ASSERT_TRUE(audioCapture != nullptr);
167 
168     ValueType value;
169     audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value);
170 
171     auto initStatus = audioCapture->Init();
172     ASSERT_TRUE(initStatus == Status::OK);
173 
174     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_RATE, AudioSamplingRate::SAMPLE_RATE_8000);
175     audioCapture->SetParameter(Tag::AUDIO_CHANNELS, MONO);
176     audioCapture->SetParameter(Tag::MEDIA_BITRATE, 16666);
177     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_FORMAT, SAMPLE_S16LE);
178     audioCapture->SetParameter(Tag::APP_TOKEN_ID, 100000);
179     audioCapture->SetParameter(Tag::APP_UID, 200);
180     audioCapture->SetParameter(Tag::APP_PID, 100);
181     audioCapture->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, 30);
182 
183     audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value);
184     ASSERT_TRUE(value.HasValue());
185 
186     audioCapture->GetParameter(Tag::AUDIO_CHANNELS, value);
187     ASSERT_TRUE(value.HasValue());
188 
189     audioCapture->GetParameter(Tag::MEDIA_BITRATE, value);
190     ASSERT_TRUE(value.HasValue());
191 
192     audioCapture->GetParameter(Tag::AUDIO_SAMPLE_FORMAT, value);
193     ASSERT_TRUE(value.HasValue());
194 
195     audioCapture->GetParameter(Tag::AUDIO_CHANNEL_LAYOUT, value);
196     ASSERT_TRUE(value.HasValue());
197 
198     audioCapture->GetParameter(Tag::AUDIO_OUTPUT_CHANNELS, value);
199     ASSERT_TRUE(value.HasValue());
200 
201     audioCapture->GetParameter(Tag::AUDIO_SAMPLE_RATE, value);
202     ASSERT_TRUE(value.HasValue());
203 }
204 
205 HWTEST(AudioTypeTranslateTest, testSampleRateNum2Enum, TestSize.Level1)
206 {
207     AudioSamplingRate val;
208     auto res = SampleRateNum2Enum(8000, val);
209     ASSERT_TRUE(val == AudioStandard::SAMPLE_RATE_8000);
210     ASSERT_TRUE(res);
211 
212     auto res2 = SampleRateNum2Enum(9000, val);
213     ASSERT_FALSE(res2);
214 
215     OHOS::AudioStandard::AudioSampleFormat aFmt;
216     auto sampleRes = PluginFmt2SampleFmt(AudioSampleFormat::S16, aFmt);
217     ASSERT_EQ(aFmt, AudioStandard::SAMPLE_S16LE);
218     ASSERT_TRUE(sampleRes);
219 
220     auto sampleRes2 = PluginFmt2SampleFmt(AudioSampleFormat::S24P, aFmt);
221     ASSERT_FALSE(sampleRes2);
222 
223     OHOS::AudioStandard::AudioChannel enumVal;
224     auto channelRes = ChannelNumNum2Enum(1, enumVal);
225     ASSERT_EQ(enumVal, AudioStandard::MONO);
226     ASSERT_TRUE(channelRes);
227 
228     auto channelRes2 = ChannelNumNum2Enum(3, enumVal);
229     ASSERT_FALSE(channelRes2);
230 
231     auto status = Error2Status(OHOS::ERR_OK);
232     ASSERT_EQ(status, Status::OK);
233 
234     auto status2 = Error2Status(OHOS::ERR_OVERFLOW);
235     ASSERT_EQ(status2, Status::ERROR_UNKNOWN);
236 
237     auto status3 = Error2Status(30);
238     ASSERT_EQ(status3, Status::ERROR_UNKNOWN);
239 }
240 
241 } // namespace Test
242 } // namespace Media
243 } // namespace OHOS
244