1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
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 <dlfcn.h>
17 #include <gtest/gtest.h>
18 #include <iomanip>
19 #include <sys/time.h>
20 #include <sys/types.h>
21 #include <ctime>
22 #include <unistd.h>
23 #include <vector>
24 
25 #include "logging.h"
26 #include "memory_data_plugin.h"
27 #include "plugin_module_api.h"
28 #include "sample_plugin.h"
29 #include "stream_plugin.h"
30 
31 using namespace testing::ext;
32 
33 namespace {
34 constexpr uint32_t MAX_BUFFER_SIZE = 4 * 1024 * 1024;
35 std::mutex g_taskMutex;
36 std::unique_ptr<MemoryDataPlugin> memoryPlugin = nullptr;
37 std::unique_ptr<StreamPlugin> streamPlugin = nullptr;
38 std::unique_ptr<SamplePlugin> samplePlugin = nullptr;
39 
40 class PluginModuleApiTest : public ::testing::Test {
41 public:
42     PluginModuleCallbacks* memoryCallbacks_;
43     PluginModuleCallbacks* sampleCallbacks_;
44     PluginModuleCallbacks* streamCallbacks_;
45 
46     PluginModuleStruct memoryModule_;
47     PluginModuleStruct sampleModule_;
48     PluginModuleStruct streamModule_;
49 
50     WriterStruct* writer_;
51 protected:
SetUpTestCase()52     static void SetUpTestCase() {}
TearDownTestCase()53     static void TearDownTestCase() {}
54 
SetUp()55     void SetUp()
56     {
57         memoryCallbacks_ = nullptr;
58         sampleCallbacks_ = nullptr;
59         streamCallbacks_ = nullptr;
60         memoryModule_ = {memoryCallbacks_, "memory-plugin", "1.01", MAX_BUFFER_SIZE};
61         sampleModule_ = {sampleCallbacks_, "sample-plugin", "1.01", MAX_BUFFER_SIZE};
62         streamModule_ = {streamCallbacks_, "stream-plugin", "1.01", MAX_BUFFER_SIZE};
63         writer_ = nullptr;
64     }
65 
66     bool PollPluginStub(MemoryDataPlugin& plugin, MemoryConfig& protoConfig, MemoryData& protoData);
67     bool StreamPluginStub(StreamPlugin& plugin, StreamConfig& protoConfig, StreamData& protoData);
68     // memory
69     static int MemDataPluginSessionStart(const uint8_t* configData, uint32_t configSize);
70     static int MemPluginReportResult(uint8_t* bufferData, uint32_t bufferSize);
71     static int MemPluginSessionStop();
72 
73     // stream
74     static int StreamPluginSessionStart(const uint8_t* configData, uint32_t configSize);
75     static int StreamPluginSessionStop();
76     static int StreamRegisterWriterStruct(WriterStruct* writer);
77     static long Write(WriterStruct* writer, const void* data, size_t size);
78     static bool Flush(WriterStruct* writer);
79 
80     // sample
81     static int SamplePluginSessionStart(const uint8_t* configData, uint32_t configSize);
82     static int SamplePluginReportResult(uint8_t* bufferData, uint32_t bufferSize);
83     static int SamplePluginSessionStop();
84     void SetSampleConfig(std::vector<uint8_t>& configData, uint32_t& configSize);
85     void SetMemoryConfig(std::vector<uint8_t>& configData, uint32_t& configSize);
86     void SetStreamConfig(std::vector<uint8_t>& configData, uint32_t& configSize);
87 };
88 
89 // memory
MemDataPluginSessionStart(const uint8_t* configData, uint32_t configSize)90 int PluginModuleApiTest::MemDataPluginSessionStart(const uint8_t* configData, uint32_t configSize)
91 {
92     std::lock_guard<std::mutex> guard(g_taskMutex);
93     memoryPlugin = std::make_unique<MemoryDataPlugin>();
94     return memoryPlugin->Start(configData, configSize);
95 }
96 
MemPluginReportResult(uint8_t* bufferData, uint32_t bufferSize)97 int PluginModuleApiTest::MemPluginReportResult(uint8_t* bufferData, uint32_t bufferSize)
98 {
99     std::lock_guard<std::mutex> guard(g_taskMutex);
100     return memoryPlugin->Report(bufferData, bufferSize);
101 }
102 
MemPluginSessionStop()103 int PluginModuleApiTest::MemPluginSessionStop()
104 {
105     std::lock_guard<std::mutex> guard(g_taskMutex);
106     CHECK_TRUE(memoryPlugin != nullptr, -1, "memoryPlugin is null!!!");
107     memoryPlugin->Stop();
108     memoryPlugin = nullptr;
109     return 0;
110 }
111 
112 // stream
StreamPluginSessionStart(const uint8_t* configData, uint32_t configSize)113 int PluginModuleApiTest::StreamPluginSessionStart(const uint8_t* configData, uint32_t configSize)
114 {
115     std::lock_guard<std::mutex> guard(g_taskMutex);
116     CHECK_TRUE(streamPlugin != nullptr, -1, "PluginStub::start plugin fail!!!");
117     return streamPlugin->Start(configData, configSize);
118 }
119 
StreamPluginSessionStop()120 int PluginModuleApiTest::StreamPluginSessionStop()
121 {
122     std::lock_guard<std::mutex> guard(g_taskMutex);
123     streamPlugin->Stop();
124     streamPlugin = nullptr;
125     return 0;
126 }
127 
StreamRegisterWriterStruct(WriterStruct* writer)128 int PluginModuleApiTest::StreamRegisterWriterStruct(WriterStruct* writer)
129 {
130     std::lock_guard<std::mutex> guard(g_taskMutex);
131     streamPlugin = std::make_unique<StreamPlugin>();
132     streamPlugin->SetWriter(writer);
133     return 0;
134 }
135 
136 // write
Write(WriterStruct* writer, const void* data, size_t size)137 long PluginModuleApiTest::Write(WriterStruct* writer, const void* data, size_t size)
138 {
139     PROFILER_LOG_INFO(LOG_CORE, "PluginModuleApiTest::Write no implementation !");
140     return 0;
141 }
142 
Flush(WriterStruct* writer)143 bool PluginModuleApiTest::Flush(WriterStruct* writer)
144 {
145     PROFILER_LOG_INFO(LOG_CORE, "PluginModuleApiTest::Write no implementation !");
146     return true;
147 }
148 
149 // sample
SamplePluginSessionStart(const uint8_t* configData, uint32_t configSize)150 int PluginModuleApiTest::SamplePluginSessionStart(const uint8_t* configData, uint32_t configSize)
151 {
152     std::lock_guard<std::mutex> guard(g_taskMutex);
153     samplePlugin = std::make_unique<SamplePlugin>();
154     return samplePlugin->Start(configData, configSize);
155 }
156 
SamplePluginReportResult(uint8_t* bufferData, uint32_t bufferSize)157 int PluginModuleApiTest::SamplePluginReportResult(uint8_t* bufferData, uint32_t bufferSize)
158 {
159     std::lock_guard<std::mutex> guard(g_taskMutex);
160     return samplePlugin->Report(bufferData, bufferSize);
161 }
162 
SamplePluginSessionStop()163 int PluginModuleApiTest::SamplePluginSessionStop()
164 {
165     std::lock_guard<std::mutex> guard(g_taskMutex);
166     samplePlugin->Stop();
167     samplePlugin = nullptr;
168     return 0;
169 }
170 
SetSampleConfig(std::vector<uint8_t>& configData, uint32_t& configSize)171 void PluginModuleApiTest::SetSampleConfig(std::vector<uint8_t>& configData, uint32_t& configSize)
172 {
173     SampleConfig protoConfig;
174     protoConfig.set_pid(1);
175     // serialize
176     protoConfig.SerializeToArray(configData.data(), configData.size());
177     configSize = protoConfig.ByteSizeLong();
178 }
179 
SetMemoryConfig(std::vector<uint8_t>& configData, uint32_t& configSize)180 void PluginModuleApiTest::SetMemoryConfig(std::vector<uint8_t>& configData, uint32_t& configSize)
181 {
182     MemoryConfig protoConfig;
183     protoConfig.set_report_process_mem_info(true);
184     protoConfig.add_pid(1);
185     // serialize
186     protoConfig.SerializeToArray(configData.data(), configSize);
187     configSize = protoConfig.ByteSizeLong();
188 }
189 
SetStreamConfig(std::vector<uint8_t>& configData, uint32_t& configSize)190 void PluginModuleApiTest::SetStreamConfig(std::vector<uint8_t>& configData, uint32_t& configSize)
191 {
192     StreamConfig protoConfig;
193     protoConfig.set_pid(1);
194     // serialize
195     protoConfig.SerializeToArray(configData.data(), configSize);
196     configSize = protoConfig.ByteSizeLong();
197 }
198 
199 // 流式调用写接口
HWTEST_F(PluginModuleApiTest, StreamPluginRegister1, TestSize.Level1)200 HWTEST_F(PluginModuleApiTest, StreamPluginRegister1, TestSize.Level1)
201 {
202     PluginModuleCallbacks callbacks = {
203         StreamPluginSessionStart,
204         0,
205         StreamPluginSessionStop,
206         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
207     };
208     streamCallbacks_ = &callbacks;
209 
210     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
211     EXPECT_EQ(streamCallbacks_->onRegisterWriterStruct(writer_), 0);
212     EXPECT_NE(streamPlugin, nullptr);
213 
214     EXPECT_EQ(streamPlugin->resultWriter_, nullptr);
215 }
216 
217 // 流式调用写接口
HWTEST_F(PluginModuleApiTest, StreamPluginRegister2, TestSize.Level1)218 HWTEST_F(PluginModuleApiTest, StreamPluginRegister2, TestSize.Level1)
219 {
220     PluginModuleCallbacks callbacks = {
221         StreamPluginSessionStart,
222         0,
223         StreamPluginSessionStop,
224         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
225     };
226     streamCallbacks_ = &callbacks;
227 
228     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
229     WriterStruct writer = {
230         Write,
231         Flush,
232     };
233     writer_ = &writer;
234     EXPECT_EQ(streamCallbacks_->onRegisterWriterStruct(writer_), 0);
235     EXPECT_NE(streamPlugin, nullptr);
236 
237     EXPECT_NE(streamPlugin->resultWriter_, nullptr);
238     EXPECT_NE(streamPlugin->resultWriter_->write, nullptr);
239 }
240 
241 // 流式调用写接口
HWTEST_F(PluginModuleApiTest, StreamPluginRegister3, TestSize.Level1)242 HWTEST_F(PluginModuleApiTest, StreamPluginRegister3, TestSize.Level1)
243 {
244     PluginModuleCallbacks callbacks = {
245         StreamPluginSessionStart,
246         0,
247         StreamPluginSessionStop,
248         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
249     };
250     streamCallbacks_ = &callbacks;
251 
252     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
253     WriterStruct writer = {
254         Write,
255         Flush,
256     };
257     writer_ = &writer;
258     EXPECT_EQ(streamCallbacks_->onRegisterWriterStruct(writer_), 0);
259     EXPECT_NE(streamPlugin, nullptr);
260 
261     EXPECT_NE(streamPlugin->resultWriter_, nullptr);
262     EXPECT_NE(streamPlugin->resultWriter_->write, nullptr);
263     EXPECT_NE(streamPlugin->resultWriter_->flush, nullptr);
264 }
265 
266 // 轮询式调用写接口
HWTEST_F(PluginModuleApiTest, SamplePluginRegister, TestSize.Level1)267 HWTEST_F(PluginModuleApiTest, SamplePluginRegister, TestSize.Level1)
268 {
269     PluginModuleCallbacks callbacks = {
270         SamplePluginSessionStart,
271         SamplePluginReportResult,
272         SamplePluginSessionStop,
273         0,
274     };
275     sampleCallbacks_ = &callbacks;
276 
277     EXPECT_EQ(sampleCallbacks_->onRegisterWriterStruct, nullptr);
278     EXPECT_EQ(samplePlugin, nullptr);
279 }
280 
HWTEST_F(PluginModuleApiTest, MemPluginRegister, TestSize.Level1)281 HWTEST_F(PluginModuleApiTest, MemPluginRegister, TestSize.Level1)
282 {
283     PluginModuleCallbacks callbacks = {
284         MemDataPluginSessionStart,
285         MemPluginReportResult,
286         MemPluginSessionStop,
287         0,
288     };
289     memoryCallbacks_ = &callbacks;
290 
291     EXPECT_EQ(memoryCallbacks_->onRegisterWriterStruct, nullptr);
292     EXPECT_EQ(memoryPlugin, nullptr);
293 }
294 
295 // 流式插件正常启动
HWTEST_F(PluginModuleApiTest, StreamPluginStartSucc, TestSize.Level1)296 HWTEST_F(PluginModuleApiTest, StreamPluginStartSucc, TestSize.Level1)
297 {
298     PluginModuleCallbacks callbacks = {
299         StreamPluginSessionStart,
300         0,
301         StreamPluginSessionStop,
302         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
303     };
304     streamCallbacks_ = &callbacks;
305 
306     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
307     WriterStruct writer = {
308         Write,
309         Flush,
310     };
311     writer_ = &writer;
312     streamCallbacks_->onRegisterWriterStruct(writer_);
313     EXPECT_NE(streamPlugin, nullptr);
314 
315     EXPECT_NE(streamCallbacks_->onPluginSessionStart, nullptr);
316     uint32_t configLen = MAX_BUFFER_SIZE;
317     std::vector<uint8_t> configData(configLen);
318     SetStreamConfig(configData, configLen);
319     EXPECT_EQ(streamCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
320 
321     streamCallbacks_->onPluginSessionStop();
322 }
323 
324 // 流式异常启动
HWTEST_F(PluginModuleApiTest, StreamPluginStartFail, TestSize.Level1)325 HWTEST_F(PluginModuleApiTest, StreamPluginStartFail, TestSize.Level1)
326 {
327     PluginModuleCallbacks callbacks = {
328         StreamPluginSessionStart,
329         0,
330         StreamPluginSessionStop,
331         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
332     };
333     streamCallbacks_ = &callbacks;
334 
335     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
336     WriterStruct writer;
337     writer_ = &writer;
338     streamCallbacks_->onRegisterWriterStruct(writer_);
339     EXPECT_NE(streamPlugin, nullptr);
340 
341     EXPECT_NE(streamCallbacks_->onPluginSessionStart, nullptr);
342     std::vector<uint8_t> configData(MAX_BUFFER_SIZE);
343     EXPECT_EQ(streamCallbacks_->onPluginSessionStart(configData.data(), configData.size()), -1);
344 }
345 
346 // 轮询式异常启动
HWTEST_F(PluginModuleApiTest, SamplePluginStartFail, TestSize.Level1)347 HWTEST_F(PluginModuleApiTest, SamplePluginStartFail, TestSize.Level1)
348 {
349     PluginModuleCallbacks callbacks = {
350         SamplePluginSessionStart,
351         SamplePluginReportResult,
352         SamplePluginSessionStop,
353         0,
354     };
355     sampleCallbacks_ = &callbacks;
356 
357     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
358     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(nullptr, 0), -1);
359     EXPECT_NE(samplePlugin, nullptr);
360 }
361 
362 // 轮询式插件正常启动
HWTEST_F(PluginModuleApiTest, SamplePluginStartSucc, TestSize.Level1)363 HWTEST_F(PluginModuleApiTest, SamplePluginStartSucc, TestSize.Level1)
364 {
365     PluginModuleCallbacks callbacks = {
366         SamplePluginSessionStart,
367         SamplePluginReportResult,
368         SamplePluginSessionStop,
369         0,
370     };
371     sampleCallbacks_ = &callbacks;
372 
373     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
374     uint32_t configLen = MAX_BUFFER_SIZE;
375     std::vector<uint8_t> configData(configLen); // config
376     SetSampleConfig(configData, configLen);
377     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
378     EXPECT_NE(samplePlugin, nullptr);
379 
380     sampleCallbacks_->onPluginSessionStop();
381 }
382 
383 // 多个插件启动
HWTEST_F(PluginModuleApiTest, MultPluginStart, TestSize.Level1)384 HWTEST_F(PluginModuleApiTest, MultPluginStart, TestSize.Level1)
385 {
386     PluginModuleCallbacks callbacks = {
387         SamplePluginSessionStart,
388         SamplePluginReportResult,
389         SamplePluginSessionStop,
390         0,
391     };
392     PluginModuleCallbacks memCallbacks = {
393         MemDataPluginSessionStart,
394         MemPluginReportResult,
395         MemPluginSessionStop,
396         0,
397     };
398     sampleCallbacks_ = &callbacks;
399     memoryCallbacks_ = &memCallbacks;
400     uint32_t configLen = MAX_BUFFER_SIZE;
401 
402     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
403     std::vector<uint8_t> sampleConfigData(configLen);
404     SetSampleConfig(sampleConfigData, configLen);
405     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(sampleConfigData.data(), configLen), 0);
406     EXPECT_NE(samplePlugin, nullptr);
407     sampleCallbacks_->onPluginSessionStop();
408 
409     EXPECT_NE(memoryCallbacks_->onPluginSessionStart, nullptr);
410     configLen = MAX_BUFFER_SIZE;
411     std::vector<uint8_t> memoryConfigData(configLen);
412     SetMemoryConfig(memoryConfigData, configLen);
413     EXPECT_EQ(memoryCallbacks_->onPluginSessionStart(memoryConfigData.data(), configLen), 0);
414     EXPECT_NE(memoryPlugin, nullptr);
415     memoryCallbacks_->onPluginSessionStop();
416 }
417 
418 // 流式上报
HWTEST_F(PluginModuleApiTest, StreamPluginReport, TestSize.Level1)419 HWTEST_F(PluginModuleApiTest, StreamPluginReport, TestSize.Level1)
420 {
421     PluginModuleCallbacks callbacks = {
422         StreamPluginSessionStart,
423         0,
424         StreamPluginSessionStop,
425         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
426     };
427     streamCallbacks_ = &callbacks;
428 
429     EXPECT_EQ(streamCallbacks_->onPluginReportResult, nullptr);
430 }
431 
432 // 轮询式上报
HWTEST_F(PluginModuleApiTest, SamplePluginReport, TestSize.Level1)433 HWTEST_F(PluginModuleApiTest, SamplePluginReport, TestSize.Level1)
434 {
435     PluginModuleCallbacks callbacks = {
436         SamplePluginSessionStart,
437         SamplePluginReportResult,
438         SamplePluginSessionStop,
439         0,
440     };
441     sampleCallbacks_ = &callbacks;
442 
443     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
444     uint32_t configLen = MAX_BUFFER_SIZE;
445     std::vector<uint8_t> configData(configLen);
446     SetSampleConfig(configData, configLen);
447     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
448     EXPECT_NE(samplePlugin, nullptr);
449 
450     EXPECT_NE(sampleCallbacks_->onPluginReportResult, nullptr);
451     std::vector<uint8_t> buffer(MAX_BUFFER_SIZE);
452     EXPECT_NE(sampleCallbacks_->onPluginReportResult(buffer.data(), buffer.size()), 0);
453     sampleCallbacks_->onPluginSessionStop();
454 }
455 
HWTEST_F(PluginModuleApiTest, MemoryPluginReport, TestSize.Level1)456 HWTEST_F(PluginModuleApiTest, MemoryPluginReport, TestSize.Level1)
457 {
458     PluginModuleCallbacks callbacks = {
459         MemDataPluginSessionStart,
460         MemPluginReportResult,
461         MemPluginSessionStop,
462         0,
463     };
464     memoryCallbacks_ = &callbacks;
465 
466     EXPECT_NE(memoryCallbacks_->onPluginSessionStart, nullptr);
467     uint32_t configLen = MAX_BUFFER_SIZE;
468     std::vector<uint8_t> configData(configLen);
469     SetMemoryConfig(configData, configLen);
470     EXPECT_EQ(memoryCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
471     EXPECT_NE(memoryPlugin, nullptr);
472 
473     EXPECT_NE(memoryCallbacks_->onPluginReportResult, nullptr);
474     std::vector<uint8_t> buffer(MAX_BUFFER_SIZE);
475     EXPECT_NE(memoryCallbacks_->onPluginReportResult(buffer.data(), buffer.size()), 0);
476     memoryCallbacks_->onPluginSessionStop();
477 }
478 
479 // 多个插件上报
HWTEST_F(PluginModuleApiTest, MultPluginReport1, TestSize.Level1)480 HWTEST_F(PluginModuleApiTest, MultPluginReport1, TestSize.Level1)
481 {
482     PluginModuleCallbacks callbacks = {
483         SamplePluginSessionStart,
484         SamplePluginReportResult,
485         SamplePluginSessionStop,
486         0,
487     };
488     sampleCallbacks_ = &callbacks;
489     uint32_t configLen = MAX_BUFFER_SIZE;
490 
491     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
492     std::vector<uint8_t> sampleConfigData(configLen);
493     SetSampleConfig(sampleConfigData, configLen);
494     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(sampleConfigData.data(), configLen), 0);
495     EXPECT_NE(samplePlugin, nullptr);
496     EXPECT_NE(sampleCallbacks_->onPluginReportResult, nullptr);
497     std::vector<uint8_t> sampleBuffer(MAX_BUFFER_SIZE);
498     EXPECT_NE(sampleCallbacks_->onPluginReportResult(sampleBuffer.data(), sampleBuffer.size()), 0);
499 
500     PluginModuleCallbacks memCallbacks = {
501         MemDataPluginSessionStart,
502         MemPluginReportResult,
503         MemPluginSessionStop,
504         0,
505     };
506     memoryCallbacks_ = &memCallbacks;
507 
508     configLen = MAX_BUFFER_SIZE;
509     EXPECT_NE(memoryCallbacks_->onPluginSessionStart, nullptr);
510     std::vector<uint8_t> memoryConfigData(configLen);
511     SetMemoryConfig(memoryConfigData, configLen);
512     EXPECT_EQ(memoryCallbacks_->onPluginSessionStart(memoryConfigData.data(), configLen), 0);
513     EXPECT_NE(memoryPlugin, nullptr);
514     EXPECT_NE(memoryCallbacks_->onPluginReportResult, nullptr);
515     std::vector<uint8_t> memoryBuffer(MAX_BUFFER_SIZE);
516     EXPECT_NE(memoryCallbacks_->onPluginReportResult(memoryBuffer.data(), memoryBuffer.size()), 0);
517 
518     sampleCallbacks_->onPluginSessionStop();
519     memoryCallbacks_->onPluginSessionStop();
520 }
521 
HWTEST_F(PluginModuleApiTest, MultPluginReport2, TestSize.Level1)522 HWTEST_F(PluginModuleApiTest, MultPluginReport2, TestSize.Level1)
523 {
524     PluginModuleCallbacks callbacks = {
525         SamplePluginSessionStart,
526         SamplePluginReportResult,
527         SamplePluginSessionStop,
528         0,
529     };
530     sampleCallbacks_ = &callbacks;
531     uint32_t configLen = MAX_BUFFER_SIZE;
532 
533     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
534     std::vector<uint8_t> sampleConfigData(configLen);
535     SetSampleConfig(sampleConfigData, configLen);
536     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(sampleConfigData.data(), configLen), 0);
537     EXPECT_NE(samplePlugin, nullptr);
538     EXPECT_NE(sampleCallbacks_->onPluginReportResult, nullptr);
539     std::vector<uint8_t> sampleBuffer(MAX_BUFFER_SIZE);
540     EXPECT_NE(sampleCallbacks_->onPluginReportResult(sampleBuffer.data(), sampleBuffer.size()), 0);
541 
542     PluginModuleCallbacks streamCallbacks = {
543         StreamPluginSessionStart,
544         0,
545         StreamPluginSessionStop,
546         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
547     };
548     streamCallbacks_ = &streamCallbacks;
549 
550     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
551     WriterStruct writer = {
552         Write,
553         Flush,
554     };
555     writer_ = &writer;
556     streamCallbacks_->onRegisterWriterStruct(writer_);
557     EXPECT_NE(streamPlugin, nullptr);
558     EXPECT_NE(streamPlugin->resultWriter_, nullptr);
559     EXPECT_NE(streamPlugin->resultWriter_->write, nullptr);
560     EXPECT_NE(streamPlugin->resultWriter_->flush, nullptr);
561 
562     EXPECT_NE(streamCallbacks_->onPluginSessionStart, nullptr);
563     configLen = MAX_BUFFER_SIZE;
564     std::vector<uint8_t> configData(configLen);
565     SetStreamConfig(configData, configLen);
566     EXPECT_EQ(streamCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
567 
568     sampleCallbacks_->onPluginSessionStop();
569     streamCallbacks_->onPluginSessionStop();
570 }
571 
572 // 流式插件停止
HWTEST_F(PluginModuleApiTest, StreamPluginStop, TestSize.Level1)573 HWTEST_F(PluginModuleApiTest, StreamPluginStop, TestSize.Level1)
574 {
575     PluginModuleCallbacks callbacks = {
576         StreamPluginSessionStart,
577         0,
578         StreamPluginSessionStop,
579         (RegisterWriterStructCallback)StreamRegisterWriterStruct,
580     };
581     streamCallbacks_ = &callbacks;
582 
583     EXPECT_NE(streamCallbacks_->onRegisterWriterStruct, nullptr);
584     streamCallbacks_->onRegisterWriterStruct(writer_);
585     EXPECT_NE(streamPlugin, nullptr);
586 
587     EXPECT_NE(streamCallbacks_->onPluginSessionStart, nullptr);
588     std::vector<uint8_t> configData(1);
589     streamCallbacks_->onPluginSessionStart(configData.data(), configData.size());
590 
591     EXPECT_NE(streamCallbacks_->onPluginSessionStop, nullptr);
592     EXPECT_EQ(streamCallbacks_->onPluginSessionStop(), 0);
593 }
594 
595 // 轮询式插件停止
HWTEST_F(PluginModuleApiTest, SamplePluginStop, TestSize.Level1)596 HWTEST_F(PluginModuleApiTest, SamplePluginStop, TestSize.Level1)
597 {
598     PluginModuleCallbacks callbacks = {
599         SamplePluginSessionStart,
600         SamplePluginReportResult,
601         SamplePluginSessionStop,
602         0,
603     };
604     sampleCallbacks_ = &callbacks;
605 
606     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
607     uint32_t configLen = MAX_BUFFER_SIZE;
608     std::vector<uint8_t> configData(configLen);
609     SetSampleConfig(configData, configLen);
610     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(configData.data(), configLen), 0);
611     EXPECT_NE(samplePlugin, nullptr);
612 
613     EXPECT_NE(sampleCallbacks_->onPluginSessionStop, nullptr);
614     EXPECT_EQ(sampleCallbacks_->onPluginSessionStop(), 0);
615 }
616 
HWTEST_F(PluginModuleApiTest, MemoryPluginStop, TestSize.Level1)617 HWTEST_F(PluginModuleApiTest, MemoryPluginStop, TestSize.Level1)
618 {
619     PluginModuleCallbacks callbacks = {
620         MemDataPluginSessionStart,
621         MemPluginReportResult,
622         MemPluginSessionStop,
623         0,
624     };
625     memoryCallbacks_ = &callbacks;
626 
627     EXPECT_NE(memoryCallbacks_->onPluginSessionStart, nullptr);
628     uint32_t configLen = MAX_BUFFER_SIZE;
629     std::vector<uint8_t> memoryConfigData(configLen);
630     SetMemoryConfig(memoryConfigData, configLen);
631     EXPECT_EQ(memoryCallbacks_->onPluginSessionStart(memoryConfigData.data(), configLen), 0);
632     EXPECT_NE(memoryPlugin, nullptr);
633 
634     EXPECT_NE(memoryCallbacks_->onPluginSessionStop, nullptr);
635     EXPECT_EQ(memoryCallbacks_->onPluginSessionStop(), 0);
636 }
637 
638 // 多个插件停止
HWTEST_F(PluginModuleApiTest, MultPluginStop, TestSize.Level1)639 HWTEST_F(PluginModuleApiTest, MultPluginStop, TestSize.Level1)
640 {
641     PluginModuleCallbacks callbacks = {
642         SamplePluginSessionStart,
643         SamplePluginReportResult,
644         SamplePluginSessionStop,
645         0,
646     };
647     PluginModuleCallbacks memCallbacks = {
648         MemDataPluginSessionStart,
649         MemPluginReportResult,
650         MemPluginSessionStop,
651         0,
652     };
653     sampleCallbacks_ = &callbacks;
654     memoryCallbacks_ = &memCallbacks;
655     uint32_t configLen = MAX_BUFFER_SIZE;
656 
657     EXPECT_NE(sampleCallbacks_->onPluginSessionStart, nullptr);
658     std::vector<uint8_t> sampleConfigData(configLen);
659     SetSampleConfig(sampleConfigData, configLen);
660     EXPECT_EQ(sampleCallbacks_->onPluginSessionStart(sampleConfigData.data(), configLen), 0);
661     EXPECT_NE(samplePlugin, nullptr);
662 
663     EXPECT_NE(memoryCallbacks_->onPluginSessionStart, nullptr);
664     configLen = MAX_BUFFER_SIZE;
665     std::vector<uint8_t> memoryConfigData(configLen);
666     SetMemoryConfig(memoryConfigData, configLen);
667     EXPECT_EQ(memoryCallbacks_->onPluginSessionStart(memoryConfigData.data(), configLen), 0);
668     EXPECT_NE(memoryPlugin, nullptr);
669 
670     EXPECT_EQ(sampleCallbacks_->onPluginSessionStop(), 0);
671     EXPECT_EQ(memoryCallbacks_->onPluginSessionStop(), 0);
672 }
673 
674 // 异常停止
HWTEST_F(PluginModuleApiTest, PluginAbnormalStop, TestSize.Level1)675 HWTEST_F(PluginModuleApiTest, PluginAbnormalStop, TestSize.Level1)
676 {
677     PluginModuleCallbacks callbacks = {
678         MemDataPluginSessionStart,
679         MemPluginReportResult,
680         MemPluginSessionStop,
681         0,
682     };
683     memoryCallbacks_ = &callbacks;
684 
685     EXPECT_NE(memoryCallbacks_->onPluginSessionStop, nullptr);
686     EXPECT_EQ(memoryCallbacks_->onPluginSessionStop(), -1);
687 }
688 } // namespace