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