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_manager.h"
18#include "plugin_types.h"
19
20#define private public
21#define protected public
22
23#include "plugins/UtSourceTest1.h"
24#include "plugins/UtSourceTest2.h"
25
26using namespace std;
27using namespace testing::ext;
28using namespace OHOS::Media::Plugin;
29
30namespace OHOS {
31namespace Media {
32namespace Test {
33using namespace OHOS::Media::Plugin;
34
35HWTEST(TestPluginManager, ListPlugins_case4, TestSize.Level1)
36{
37    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::DEMUXER);
38    ASSERT_TRUE(plugins.size() > 1);
39    for (const auto & plugin : plugins) {
40        ASSERT_NE(plugin, "");
41    }
42}
43
44HWTEST(TestPluginManager, ListPlugins_case5, TestSize.Level1)
45{
46    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::AUDIO_DECODER);
47    ASSERT_TRUE(plugins.size() > 1);
48    for (const auto & plugin : plugins) {
49        ASSERT_NE(plugin, "");
50    }
51}
52
53HWTEST(TestPluginManager, ListPlugins_case6, TestSize.Level1)
54{
55    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::AUDIO_SINK);
56    ASSERT_FALSE(plugins.size() > 1);
57}
58
59HWTEST(TestPluginManager, ListPlugins_case7, TestSize.Level1)
60{
61    ASSERT_TRUE(PluginManager::Instance().ListPlugins(PluginType::INVALID_TYPE).empty());
62}
63
64HWTEST(TestPluginManager, ListPlugins_case8, TestSize.Level1)
65{
66    ASSERT_TRUE(PluginManager::Instance().ListPlugins(PluginType(256)).empty());
67}
68
69HWTEST(TestPluginManager, GetPluginInfo_case1, TestSize.Level1)
70{
71    std::shared_ptr<PluginInfo> info = PluginManager::Instance().GetPluginInfo(
72            PluginType::SOURCE, "UtSourceTest1");
73    ASSERT_FALSE(info != nullptr);
74}
75
76HWTEST(TestPluginManager, GetPluginInfo_case2, TestSize.Level1)
77{
78    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::SOURCE, "UtSourceTest3") == nullptr);
79}
80
81HWTEST(TestPluginManager, GetPluginInfo_case3, TestSize.Level1)
82{
83    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::SOURCE, "") == nullptr);
84}
85
86HWTEST(TestPluginManager, GetPluginInfo_case4, TestSize.Level1)
87{
88    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::INVALID_TYPE, "") == nullptr);
89}
90
91HWTEST(TestPluginManager, GetPluginInfo_case5, TestSize.Level1)
92{
93    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType(256), "") == nullptr);
94}
95
96HWTEST(TestPluginManager, CreateSourcePlugin_case2, TestSize.Level1)
97{
98    ASSERT_TRUE(PluginManager::Instance().CreateSourcePlugin("UtSourceTest3") == nullptr);
99}
100
101HWTEST(TestPluginManager, CreateSourcePlugin_case3, TestSize.Level1)
102{
103    ASSERT_TRUE(PluginManager::Instance().CreateSourcePlugin("") == nullptr);
104}
105
106HWTEST(TestPluginManager, CreateDemuxerPlugin_case2, TestSize.Level1)
107{
108    ASSERT_TRUE(PluginManager::Instance().CreateDemuxerPlugin("UtDemuxerTest3") == nullptr);
109}
110
111HWTEST(TestPluginManager, CreateDemuxerPlugin_case3, TestSize.Level1)
112{
113    ASSERT_TRUE(PluginManager::Instance().CreateDemuxerPlugin("") == nullptr);
114}
115
116HWTEST(TestPluginManager, CreateCodecPlugin_case2, TestSize.Level1)
117{
118    ASSERT_TRUE(PluginManager::Instance().CreateCodecPlugin("UtCodecTest3", PluginType::AUDIO_DECODER) == nullptr);
119}
120
121HWTEST(TestPluginManager, CreateCodecPlugin_case3, TestSize.Level1)
122{
123    ASSERT_TRUE(PluginManager::Instance().CreateCodecPlugin("", PluginType::AUDIO_DECODER) == nullptr);
124}
125
126HWTEST(TestPluginManager, CreateAudioSinkPlugin_case2, TestSize.Level1)
127{
128    ASSERT_TRUE(PluginManager::Instance().CreateAudioSinkPlugin("UtAudioSinkTest3") == nullptr);
129}
130
131HWTEST(TestPluginManager, CreateAudioSinkPlugin_case3, TestSize.Level1)
132{
133    ASSERT_TRUE(PluginManager::Instance().CreateAudioSinkPlugin("") == nullptr);
134}
135
136class UtDataSourceHelperTest1 : public DataSourceHelper {
137public:
138    ~UtDataSourceHelperTest1() override = default;
139
140    Status ReadAt(int64_t offset, std::shared_ptr<Buffer> &buffer, size_t expectedLen) override
141    {
142        buffer->GetMemory()->Write(reinterpret_cast<const uint8_t *>("UtPlugin"), 8);
143        return Status::OK;
144    }
145
146    Status GetSize(uint64_t &size) override
147    {
148        return Status::OK;
149    }
150
151    OHOS::Media::Plugin::Seekable GetSeekable() override
152    {
153        return OHOS::Media::Plugin::Seekable::SEEKABLE;
154    }
155};
156
157class UtDataSourceHelperTest2 : public DataSourceHelper {
158public:
159    ~UtDataSourceHelperTest2() override = default;
160
161    Status ReadAt(int64_t offset, std::shared_ptr<Buffer> &buffer, size_t expectedLen) override
162    {
163        buffer->GetMemory()->Write(reinterpret_cast<const uint8_t *>("12345678"), 8);
164        return Status::OK;
165    }
166
167    Status GetSize(uint64_t &size) override
168    {
169        return Status::OK;
170    }
171
172    OHOS::Media::Plugin::Seekable GetSeekable() override
173    {
174        return OHOS::Media::Plugin::Seekable::SEEKABLE;
175    }
176};
177
178HWTEST(TestPluginManager, Sniffer_case2, TestSize.Level1)
179{
180    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest1",
181                                                  std::make_shared<UtDataSourceHelperTest2>()) == 0);
182}
183
184HWTEST(TestPluginManager, Sniffer_case3, TestSize.Level1)
185{
186    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest3",
187                                                  std::make_shared<UtDataSourceHelperTest1>()) == 0);
188}
189
190HWTEST(TestPluginManager, Sniffer_case4, TestSize.Level1)
191{
192    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest1", nullptr) == 0);
193}
194} // namespace Test
195} // namespace Media
196} // namespace OHOS
197