1fa7767c5Sopenharmony_ci/*
2fa7767c5Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License.
5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at
6fa7767c5Sopenharmony_ci *
7fa7767c5Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8fa7767c5Sopenharmony_ci *
9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and
13fa7767c5Sopenharmony_ci * limitations under the License.
14fa7767c5Sopenharmony_ci */
15fa7767c5Sopenharmony_ci
16fa7767c5Sopenharmony_ci#include "gtest/gtest.h"
17fa7767c5Sopenharmony_ci#include "plugin_manager.h"
18fa7767c5Sopenharmony_ci#include "plugin_types.h"
19fa7767c5Sopenharmony_ci
20fa7767c5Sopenharmony_ci#define private public
21fa7767c5Sopenharmony_ci#define protected public
22fa7767c5Sopenharmony_ci
23fa7767c5Sopenharmony_ci#include "plugins/UtSourceTest1.h"
24fa7767c5Sopenharmony_ci#include "plugins/UtSourceTest2.h"
25fa7767c5Sopenharmony_ci
26fa7767c5Sopenharmony_ciusing namespace std;
27fa7767c5Sopenharmony_ciusing namespace testing::ext;
28fa7767c5Sopenharmony_ciusing namespace OHOS::Media::Plugin;
29fa7767c5Sopenharmony_ci
30fa7767c5Sopenharmony_cinamespace OHOS {
31fa7767c5Sopenharmony_cinamespace Media {
32fa7767c5Sopenharmony_cinamespace Test {
33fa7767c5Sopenharmony_ciusing namespace OHOS::Media::Plugin;
34fa7767c5Sopenharmony_ci
35fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, ListPlugins_case4, TestSize.Level1)
36fa7767c5Sopenharmony_ci{
37fa7767c5Sopenharmony_ci    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::DEMUXER);
38fa7767c5Sopenharmony_ci    ASSERT_TRUE(plugins.size() > 1);
39fa7767c5Sopenharmony_ci    for (const auto & plugin : plugins) {
40fa7767c5Sopenharmony_ci        ASSERT_NE(plugin, "");
41fa7767c5Sopenharmony_ci    }
42fa7767c5Sopenharmony_ci}
43fa7767c5Sopenharmony_ci
44fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, ListPlugins_case5, TestSize.Level1)
45fa7767c5Sopenharmony_ci{
46fa7767c5Sopenharmony_ci    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::AUDIO_DECODER);
47fa7767c5Sopenharmony_ci    ASSERT_TRUE(plugins.size() > 1);
48fa7767c5Sopenharmony_ci    for (const auto & plugin : plugins) {
49fa7767c5Sopenharmony_ci        ASSERT_NE(plugin, "");
50fa7767c5Sopenharmony_ci    }
51fa7767c5Sopenharmony_ci}
52fa7767c5Sopenharmony_ci
53fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, ListPlugins_case6, TestSize.Level1)
54fa7767c5Sopenharmony_ci{
55fa7767c5Sopenharmony_ci    std::vector<std::string> plugins = PluginManager::Instance().ListPlugins(PluginType::AUDIO_SINK);
56fa7767c5Sopenharmony_ci    ASSERT_FALSE(plugins.size() > 1);
57fa7767c5Sopenharmony_ci}
58fa7767c5Sopenharmony_ci
59fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, ListPlugins_case7, TestSize.Level1)
60fa7767c5Sopenharmony_ci{
61fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().ListPlugins(PluginType::INVALID_TYPE).empty());
62fa7767c5Sopenharmony_ci}
63fa7767c5Sopenharmony_ci
64fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, ListPlugins_case8, TestSize.Level1)
65fa7767c5Sopenharmony_ci{
66fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().ListPlugins(PluginType(256)).empty());
67fa7767c5Sopenharmony_ci}
68fa7767c5Sopenharmony_ci
69fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, GetPluginInfo_case1, TestSize.Level1)
70fa7767c5Sopenharmony_ci{
71fa7767c5Sopenharmony_ci    std::shared_ptr<PluginInfo> info = PluginManager::Instance().GetPluginInfo(
72fa7767c5Sopenharmony_ci            PluginType::SOURCE, "UtSourceTest1");
73fa7767c5Sopenharmony_ci    ASSERT_FALSE(info != nullptr);
74fa7767c5Sopenharmony_ci}
75fa7767c5Sopenharmony_ci
76fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, GetPluginInfo_case2, TestSize.Level1)
77fa7767c5Sopenharmony_ci{
78fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::SOURCE, "UtSourceTest3") == nullptr);
79fa7767c5Sopenharmony_ci}
80fa7767c5Sopenharmony_ci
81fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, GetPluginInfo_case3, TestSize.Level1)
82fa7767c5Sopenharmony_ci{
83fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::SOURCE, "") == nullptr);
84fa7767c5Sopenharmony_ci}
85fa7767c5Sopenharmony_ci
86fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, GetPluginInfo_case4, TestSize.Level1)
87fa7767c5Sopenharmony_ci{
88fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType::INVALID_TYPE, "") == nullptr);
89fa7767c5Sopenharmony_ci}
90fa7767c5Sopenharmony_ci
91fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, GetPluginInfo_case5, TestSize.Level1)
92fa7767c5Sopenharmony_ci{
93fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().GetPluginInfo(PluginType(256), "") == nullptr);
94fa7767c5Sopenharmony_ci}
95fa7767c5Sopenharmony_ci
96fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateSourcePlugin_case2, TestSize.Level1)
97fa7767c5Sopenharmony_ci{
98fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateSourcePlugin("UtSourceTest3") == nullptr);
99fa7767c5Sopenharmony_ci}
100fa7767c5Sopenharmony_ci
101fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateSourcePlugin_case3, TestSize.Level1)
102fa7767c5Sopenharmony_ci{
103fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateSourcePlugin("") == nullptr);
104fa7767c5Sopenharmony_ci}
105fa7767c5Sopenharmony_ci
106fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateDemuxerPlugin_case2, TestSize.Level1)
107fa7767c5Sopenharmony_ci{
108fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateDemuxerPlugin("UtDemuxerTest3") == nullptr);
109fa7767c5Sopenharmony_ci}
110fa7767c5Sopenharmony_ci
111fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateDemuxerPlugin_case3, TestSize.Level1)
112fa7767c5Sopenharmony_ci{
113fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateDemuxerPlugin("") == nullptr);
114fa7767c5Sopenharmony_ci}
115fa7767c5Sopenharmony_ci
116fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateCodecPlugin_case2, TestSize.Level1)
117fa7767c5Sopenharmony_ci{
118fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateCodecPlugin("UtCodecTest3", PluginType::AUDIO_DECODER) == nullptr);
119fa7767c5Sopenharmony_ci}
120fa7767c5Sopenharmony_ci
121fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateCodecPlugin_case3, TestSize.Level1)
122fa7767c5Sopenharmony_ci{
123fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateCodecPlugin("", PluginType::AUDIO_DECODER) == nullptr);
124fa7767c5Sopenharmony_ci}
125fa7767c5Sopenharmony_ci
126fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateAudioSinkPlugin_case2, TestSize.Level1)
127fa7767c5Sopenharmony_ci{
128fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateAudioSinkPlugin("UtAudioSinkTest3") == nullptr);
129fa7767c5Sopenharmony_ci}
130fa7767c5Sopenharmony_ci
131fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, CreateAudioSinkPlugin_case3, TestSize.Level1)
132fa7767c5Sopenharmony_ci{
133fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().CreateAudioSinkPlugin("") == nullptr);
134fa7767c5Sopenharmony_ci}
135fa7767c5Sopenharmony_ci
136fa7767c5Sopenharmony_ciclass UtDataSourceHelperTest1 : public DataSourceHelper {
137fa7767c5Sopenharmony_cipublic:
138fa7767c5Sopenharmony_ci    ~UtDataSourceHelperTest1() override = default;
139fa7767c5Sopenharmony_ci
140fa7767c5Sopenharmony_ci    Status ReadAt(int64_t offset, std::shared_ptr<Buffer> &buffer, size_t expectedLen) override
141fa7767c5Sopenharmony_ci    {
142fa7767c5Sopenharmony_ci        buffer->GetMemory()->Write(reinterpret_cast<const uint8_t *>("UtPlugin"), 8);
143fa7767c5Sopenharmony_ci        return Status::OK;
144fa7767c5Sopenharmony_ci    }
145fa7767c5Sopenharmony_ci
146fa7767c5Sopenharmony_ci    Status GetSize(uint64_t &size) override
147fa7767c5Sopenharmony_ci    {
148fa7767c5Sopenharmony_ci        return Status::OK;
149fa7767c5Sopenharmony_ci    }
150fa7767c5Sopenharmony_ci
151fa7767c5Sopenharmony_ci    OHOS::Media::Plugin::Seekable GetSeekable() override
152fa7767c5Sopenharmony_ci    {
153fa7767c5Sopenharmony_ci        return OHOS::Media::Plugin::Seekable::SEEKABLE;
154fa7767c5Sopenharmony_ci    }
155fa7767c5Sopenharmony_ci};
156fa7767c5Sopenharmony_ci
157fa7767c5Sopenharmony_ciclass UtDataSourceHelperTest2 : public DataSourceHelper {
158fa7767c5Sopenharmony_cipublic:
159fa7767c5Sopenharmony_ci    ~UtDataSourceHelperTest2() override = default;
160fa7767c5Sopenharmony_ci
161fa7767c5Sopenharmony_ci    Status ReadAt(int64_t offset, std::shared_ptr<Buffer> &buffer, size_t expectedLen) override
162fa7767c5Sopenharmony_ci    {
163fa7767c5Sopenharmony_ci        buffer->GetMemory()->Write(reinterpret_cast<const uint8_t *>("12345678"), 8);
164fa7767c5Sopenharmony_ci        return Status::OK;
165fa7767c5Sopenharmony_ci    }
166fa7767c5Sopenharmony_ci
167fa7767c5Sopenharmony_ci    Status GetSize(uint64_t &size) override
168fa7767c5Sopenharmony_ci    {
169fa7767c5Sopenharmony_ci        return Status::OK;
170fa7767c5Sopenharmony_ci    }
171fa7767c5Sopenharmony_ci
172fa7767c5Sopenharmony_ci    OHOS::Media::Plugin::Seekable GetSeekable() override
173fa7767c5Sopenharmony_ci    {
174fa7767c5Sopenharmony_ci        return OHOS::Media::Plugin::Seekable::SEEKABLE;
175fa7767c5Sopenharmony_ci    }
176fa7767c5Sopenharmony_ci};
177fa7767c5Sopenharmony_ci
178fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, Sniffer_case2, TestSize.Level1)
179fa7767c5Sopenharmony_ci{
180fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest1",
181fa7767c5Sopenharmony_ci                                                  std::make_shared<UtDataSourceHelperTest2>()) == 0);
182fa7767c5Sopenharmony_ci}
183fa7767c5Sopenharmony_ci
184fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, Sniffer_case3, TestSize.Level1)
185fa7767c5Sopenharmony_ci{
186fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest3",
187fa7767c5Sopenharmony_ci                                                  std::make_shared<UtDataSourceHelperTest1>()) == 0);
188fa7767c5Sopenharmony_ci}
189fa7767c5Sopenharmony_ci
190fa7767c5Sopenharmony_ciHWTEST(TestPluginManager, Sniffer_case4, TestSize.Level1)
191fa7767c5Sopenharmony_ci{
192fa7767c5Sopenharmony_ci    ASSERT_TRUE(PluginManager::Instance().Sniffer("UtDemuxerTest1", nullptr) == 0);
193fa7767c5Sopenharmony_ci}
194fa7767c5Sopenharmony_ci} // namespace Test
195fa7767c5Sopenharmony_ci} // namespace Media
196fa7767c5Sopenharmony_ci} // namespace OHOS
197