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