1/*
2 * Copyright (c) 2021-2021 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/plugins/ffmpeg_adapter/audio_decoder/audio_ffmpeg_decoder_plugin.h"
18#include "plugin/common/plugin_caps_builder.h"
19
20namespace OHOS {
21namespace Media {
22namespace Test {
23using namespace Plugin;
24using namespace Ffmpeg;
25using namespace testing::ext;
26std::shared_ptr<CodecPlugin> AuFfmpegDecoderCreator(const std::string& name)
27{
28    return std::make_shared<AudioFfmpegDecoderPlugin>(name);
29}
30
31HWTEST(AudioFfmpegDecoderPluginTest, test_Init, TestSize.Level1)
32{
33    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
34    ASSERT_EQ(Status::ERROR_UNSUPPORTED_FORMAT, aDecoderPlugin->Init());
35}
36
37HWTEST(AudioFfmpegDecoderPluginTest, test_Prepare, TestSize.Level1)
38{
39    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
40    ASSERT_EQ(Status::ERROR_WRONG_STATE, aDecoderPlugin->Prepare());
41}
42
43HWTEST(AudioFfmpegDecoderPluginTest, test_Reset, TestSize.Level1)
44{
45    std::shared_ptr<CodecPlugin> aEncoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
46    ASSERT_EQ(Status::OK, aEncoderPlugin->Reset());
47}
48
49HWTEST(AudioFfmpegDecoderPluginTest, test_Start, TestSize.Level1)
50{
51    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
52    ASSERT_EQ(Status::ERROR_WRONG_STATE, aDecoderPlugin->Start());
53}
54
55HWTEST(AudioFfmpegDecoderPluginTest, test_Stop, TestSize.Level1)
56{
57    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
58    ASSERT_EQ(Status::OK, aDecoderPlugin->Stop());
59}
60
61HWTEST(AudioFfmpegDecoderPluginTest, test_SetParameter, TestSize.Level1)
62{
63    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
64    ValueType value = 128;
65    ASSERT_EQ(Status::OK, aDecoderPlugin->SetParameter(Tag::AUDIO_SAMPLE_PER_FRAME, &value));
66}
67
68HWTEST(AudioFfmpegDecoderPluginTest, test_GetParameter, TestSize.Level1)
69{
70    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
71    ValueType value;
72    ASSERT_EQ(Status::ERROR_INVALID_PARAMETER, aDecoderPlugin->GetParameter(Tag::REQUIRED_OUT_BUFFER_CNT, value));
73}
74
75HWTEST(AudioFfmpegDecoderPluginTest, test_Flush, TestSize.Level1)
76{
77    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
78    ASSERT_EQ(Status::OK, aDecoderPlugin->Flush());
79}
80
81HWTEST(AudioFfmpegDecoderPluginTest, test_QueInputBuffer, TestSize.Level1)
82{
83    std::shared_ptr<CodecPlugin> aDecoderPlugin = AuFfmpegDecoderCreator("AudioFfmpegDecoderPluginTest");
84    std::shared_ptr<Buffer> inputBuffer = std::make_shared<Buffer>(BufferMetaType::AUDIO);
85    int32_t timeoutMs = 100;
86    ASSERT_EQ(Status::ERROR_INVALID_DATA, aDecoderPlugin->QueueInputBuffer(inputBuffer, timeoutMs));
87    uint32_t size = 16;
88    inputBuffer->AllocMemory(nullptr, size);
89    ASSERT_EQ(Status::ERROR_WRONG_STATE, aDecoderPlugin->QueueInputBuffer(inputBuffer, timeoutMs));
90    inputBuffer->flag = 1;
91    ASSERT_EQ(Status::ERROR_WRONG_STATE, aDecoderPlugin->QueueInputBuffer(inputBuffer, timeoutMs));
92}
93
94} //namespace Test
95} //namespace Media
96} //namespace OHOS