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