• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <cstring>
17 #include <gtest/gtest.h>
18 
19 #include "plugin_service_types.pb.h"
20 #include "share_memory_block.h"
21 
22 using namespace testing::ext;
23 
24 namespace {
25 constexpr size_t ARRAYSIZE = 1024;
26 constexpr int PAGE_SIZE = 4096;
27 constexpr int NUM_FOUR = 4;
28 constexpr int NUM_FIVE = 5;
29 
30 class SharedMemoryBlockTest : public testing::Test {
31 public:
SetUpTestCase()32     static void SetUpTestCase() {}
TearDownTestCase()33     static void TearDownTestCase() {}
34 
SetUp()35     void SetUp() {}
TearDown()36     void TearDown() {}
37 };
38 
39 /**
40  * @tc.name: share memory
41  * @tc.desc: read lock.
42  * @tc.type: FUNC
43  */
44 HWTEST_F(SharedMemoryBlockTest, ReadLock, TestSize.Level1)
45 {
46     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
47     ASSERT_TRUE(shareMemoryBlock.Valid());
48 
49     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
50 }
51 
52 /**
53  * @tc.name: share memory
54  * @tc.desc: get name.
55  * @tc.type: FUNC
56  */
57 HWTEST_F(SharedMemoryBlockTest, GetName, TestSize.Level1)
58 {
59     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
60     ASSERT_TRUE(shareMemoryBlock.Valid());
61 
62     shareMemoryBlock.GetName();
63 
64     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
65 }
66 
67 /**
68  * @tc.name: share memory
69  * @tc.desc: get size.
70  * @tc.type: FUNC
71  */
72 HWTEST_F(SharedMemoryBlockTest, GetSize, TestSize.Level1)
73 {
74     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
75     ASSERT_TRUE(shareMemoryBlock.Valid());
76 
77     shareMemoryBlock.GetSize();
78 
79     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
80 }
81 
82 /**
83  * @tc.name: share memory
84  * @tc.desc: get file descriptor.
85  * @tc.type: FUNC
86  */
87 HWTEST_F(SharedMemoryBlockTest, GetfileDescriptor, TestSize.Level1)
88 {
89     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
90     ASSERT_TRUE(shareMemoryBlock.Valid());
91 
92     shareMemoryBlock.GetfileDescriptor();
93 
94     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
95 }
96 
97 /**
98  * @tc.name: share memory
99  * @tc.desc: Shared memory type test.
100  * @tc.type: FUNC
101  */
102 HWTEST_F(SharedMemoryBlockTest, DROP_NONE, TestSize.Level1)
103 {
104     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
105     ASSERT_TRUE(shareMemoryBlock.Valid());
106 
107     shareMemoryBlock.SetReusePolicy(ShareMemoryBlock::ReusePolicy::DROP_NONE);
108 
109     int8_t data[ARRAYSIZE];
110     for (int i = 0; i < NUM_FIVE; i++) {
111         *((uint32_t*)data) = i;
112         shareMemoryBlock.PutRaw(data, ARRAYSIZE);
113     }
114     int8_t* p = shareMemoryBlock.GetFreeMemory(ARRAYSIZE);
115     ASSERT_TRUE(p == nullptr);
116 
117     do {
118         p = const_cast<int8_t*>(shareMemoryBlock.GetDataPoint());
119     } while (shareMemoryBlock.Next() && shareMemoryBlock.GetDataSize() > 0);
120 
121     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
122 }
123 
124 /**
125  * @tc.name: share memory
126  * @tc.desc: Shared memory type test.
127  * @tc.type: FUNC
128  */
129 HWTEST_F(SharedMemoryBlockTest, DROP_OLD, TestSize.Level1)
130 {
131     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
132     ASSERT_TRUE(shareMemoryBlock.Valid());
133 
134     shareMemoryBlock.SetReusePolicy(ShareMemoryBlock::ReusePolicy::DROP_OLD);
135 
136     int8_t data[ARRAYSIZE];
137     for (int i = 0; i < NUM_FIVE; i++) {
138         *((uint32_t*)data) = i;
139         shareMemoryBlock.PutRaw(data, ARRAYSIZE);
140     }
141     int8_t* p = shareMemoryBlock.GetFreeMemory(ARRAYSIZE);
142     ASSERT_TRUE(p != nullptr);
143 
144     do {
145         p = const_cast<int8_t*>(shareMemoryBlock.GetDataPoint());
146     } while (shareMemoryBlock.Next() && shareMemoryBlock.GetDataSize() > 0);
147 
148     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
149 }
150 
151 /**
152  * @tc.name: share memory
153  * @tc.desc: put protobuf.
154  * @tc.type: FUNC
155  */
156 HWTEST_F(SharedMemoryBlockTest, PutMessage, TestSize.Level1)
157 {
158     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
159     ASSERT_TRUE(shareMemoryBlock.Valid());
160     ASSERT_TRUE(shareMemoryBlock.GetDataSize() == 0);
161 
162     NotifyResultResponse response;
163     response.set_status(ResponseStatus::OK);
164     ASSERT_TRUE(shareMemoryBlock.PutMessage(response, "test"));
165     EXPECT_EQ(shareMemoryBlock.GetDataSize(), response.ByteSizeLong());
166     response.ParseFromArray(shareMemoryBlock.GetDataPoint(), shareMemoryBlock.GetDataSize());
167     ASSERT_TRUE(response.status() == ResponseStatus::OK);
168 
169     // 调用next移动指针,取值正常
170     shareMemoryBlock.Next();
171     NotifyResultResponse response2;
172     response2.set_status(ResponseStatus::OK);
173     ASSERT_TRUE(shareMemoryBlock.PutMessage(response2, "test"));
174     EXPECT_EQ(shareMemoryBlock.GetDataSize(), response2.ByteSizeLong());
175     response2.ParseFromArray(shareMemoryBlock.GetDataPoint(), shareMemoryBlock.GetDataSize());
176     EXPECT_TRUE(response2.status() == ResponseStatus::OK);
177 
178     // 调用next,设置空message
179     shareMemoryBlock.Next();
180     NotifyResultRequest request;
181     ASSERT_TRUE(shareMemoryBlock.PutMessage(request, "test"));
182     EXPECT_EQ(shareMemoryBlock.GetDataSize(), request.ByteSizeLong());
183 
184     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
185 }
186 
187 /**
188  * @tc.name: share memory
189  * @tc.desc: Shared memory PutMessage abnormal test.
190  * @tc.type: FUNC
191  */
192 HWTEST_F(SharedMemoryBlockTest, PutMessageAbnormal, TestSize.Level1)
193 {
194     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
195     ASSERT_TRUE(shareMemoryBlock.Valid());
196     ASSERT_TRUE(shareMemoryBlock.GetDataSize() == 0);
197 
198     NotifyResultResponse response;
199     response.set_status(ResponseStatus::OK);
200     ASSERT_TRUE(shareMemoryBlock.PutMessage(response, "test"));
201     EXPECT_EQ(shareMemoryBlock.GetDataSize(), response.ByteSizeLong());
202     response.ParseFromArray(shareMemoryBlock.GetDataPoint(), shareMemoryBlock.GetDataSize());
203     ASSERT_TRUE(response.status() == ResponseStatus::OK);
204 
205     // 不调用next无法移动指针,取值出错
206     NotifyResultResponse response2;
207     response2.set_status(ResponseStatus::ERR);
208     ASSERT_TRUE(shareMemoryBlock.PutMessage(response2, "test"));
209     EXPECT_EQ(shareMemoryBlock.GetDataSize(), response2.ByteSizeLong());
210     EXPECT_EQ(shareMemoryBlock.GetDataSize(), response.ByteSizeLong());
211     response2.ParseFromArray(shareMemoryBlock.GetDataPoint(), shareMemoryBlock.GetDataSize());
212     EXPECT_FALSE(response2.status() == ResponseStatus::ERR);
213     EXPECT_TRUE(response2.status() == ResponseStatus::OK);
214 
215     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
216 }
217 
218 /**
219  * @tc.name: share memory
220  * @tc.desc: Shared memory PutRaw abnormal test.
221  * @tc.type: FUNC
222  */
223 HWTEST_F(SharedMemoryBlockTest, PutRawAbnormal, TestSize.Level1)
224 {
225     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
226     ASSERT_TRUE(shareMemoryBlock.Valid());
227 
228     ASSERT_FALSE(shareMemoryBlock.PutRaw(nullptr, ARRAYSIZE));
229     ASSERT_NE(shareMemoryBlock.GetFreeMemory(ARRAYSIZE), nullptr);
230 
231     int8_t data[ARRAYSIZE];
232     ASSERT_FALSE(shareMemoryBlock.PutRaw(data, 0));
233     ASSERT_NE(shareMemoryBlock.GetFreeMemory(0), nullptr);
234 
235     ASSERT_FALSE(shareMemoryBlock.PutRaw(data, PAGE_SIZE + 1));
236     ASSERT_EQ(shareMemoryBlock.GetFreeMemory(PAGE_SIZE + 1), nullptr);
237 
238     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
239 }
240 
function(const int8_t data[],uint32_t size)241 bool function(const int8_t data[], uint32_t size)
242 {
243     auto pluginData = std::make_shared<ProfilerPluginData>();
244     const int len = 6;
245     return pluginData->ParseFromArray(reinterpret_cast<const char*>(data), len);
246 }
247 
functionErr(const int8_t data[],uint32_t size)248 bool functionErr(const int8_t data[], uint32_t size)
249 {
250     auto pluginData = std::make_shared<ProfilerPluginData>();
251     return pluginData->ParseFromArray(reinterpret_cast<const char*>(data), PAGE_SIZE);
252 }
253 
254 /**
255  * @tc.name: share memory
256  * @tc.desc: Shared memory TakeData test.
257  * @tc.type: FUNC
258  */
259 HWTEST_F(SharedMemoryBlockTest, TakeData, TestSize.Level1)
260 {
261     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
262     ASSERT_TRUE(shareMemoryBlock.Valid());
263 
264     // 不匹配的空message
265     NotifyResultRequest request;
266     ASSERT_TRUE(shareMemoryBlock.PutMessage(request, "test"));
267     ASSERT_TRUE(shareMemoryBlock.GetDataSize() == 0);
268     EXPECT_FALSE(shareMemoryBlock.TakeData(function));
269 
270     // 不匹配的非空message
271     shareMemoryBlock.Next();
272     NotifyResultResponse response;
273     response.set_status(ResponseStatus::OK);
274     ASSERT_TRUE(shareMemoryBlock.PutMessage(response, "test"));
275     EXPECT_FALSE(shareMemoryBlock.GetDataSize() == 0);
276     EXPECT_FALSE(shareMemoryBlock.TakeData(function));
277 
278     // 匹配的空message
279     shareMemoryBlock.Next();
280     ProfilerPluginData data;
281     ASSERT_TRUE(shareMemoryBlock.PutMessage(data, "test"));
282     ASSERT_TRUE(shareMemoryBlock.GetDataSize() == 0);
283     EXPECT_FALSE(shareMemoryBlock.TakeData(function));
284 
285     // 匹配的非空message, 但DataSize设置为大值
286     shareMemoryBlock.Next();
287     data.set_name("test");
288     ASSERT_TRUE(shareMemoryBlock.PutMessage(data, "test"));
289     EXPECT_FALSE(shareMemoryBlock.GetDataSize() == 0);
290     EXPECT_FALSE(shareMemoryBlock.TakeData(functionErr));
291 
292     // 匹配的非空message,正确的DataSize
293     shareMemoryBlock.Next();
294     data.set_name("test");
295     ASSERT_TRUE(shareMemoryBlock.PutMessage(data, "test"));
296     EXPECT_FALSE(shareMemoryBlock.GetDataSize() == 0);
297     EXPECT_TRUE(shareMemoryBlock.TakeData(function));
298 
299     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
300 }
301 
302 /**
303  * @tc.name: share memory PutRawTimeout
304  * @tc.desc: Shared memory type test.
305  * @tc.type: FUNC
306  */
307 HWTEST_F(SharedMemoryBlockTest, PutRawTimeout, TestSize.Level1)
308 {
309     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
310     ASSERT_TRUE(shareMemoryBlock.Valid());
311     shareMemoryBlock.SetReusePolicy(ShareMemoryBlock::ReusePolicy::DROP_OLD);
312     int8_t data[ARRAYSIZE];
313     for (int i = 0; i < NUM_FIVE; i++) {
314         *((uint32_t*)data) = i;
315         shareMemoryBlock.PutRawTimeout(data, ARRAYSIZE);
316     }
317     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
318 }
319 /**
320  * @tc.name: share memory PutWithPayloadTimeout
321  * @tc.desc: Shared memory type test.
322  * @tc.type: FUNC
323  */
324 HWTEST_F(SharedMemoryBlockTest, PutWithPayloadTimeout, TestSize.Level1)
325 {
326     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
327     ASSERT_TRUE(shareMemoryBlock.Valid());
328     shareMemoryBlock.SetReusePolicy(ShareMemoryBlock::ReusePolicy::DROP_OLD);
329     int8_t data[ARRAYSIZE];
330     int8_t header[ARRAYSIZE];
331     for (int i = 0; i < NUM_FIVE; i++) {
332         *((uint32_t*)data) = i;
333         *((uint32_t*)header) = i + 1;
334         shareMemoryBlock.PutWithPayloadTimeout(header, ARRAYSIZE, data, ARRAYSIZE);
335     }
336     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
337 }
338 
339 /**
340  * @tc.name: share memory PutWithPayloadSync
341  * @tc.desc: Shared memory type test.
342  * @tc.type: FUNC
343  */
344 HWTEST_F(SharedMemoryBlockTest, PutWithPayloadSync, TestSize.Level1)
345 {
346     ShareMemoryBlock shareMemoryBlock("testname", 8192);
347     ASSERT_TRUE(shareMemoryBlock.Valid());
348     shareMemoryBlock.SetReusePolicy(ShareMemoryBlock::ReusePolicy::DROP_OLD);
349     int8_t data[ARRAYSIZE];
350     int8_t header[ARRAYSIZE];
351     const int size = 2;
352     for (int i = 0; i < size; i++) {
353         *((uint32_t*)data) = i;
354         *((uint32_t*)header) = i + 1;
355         shareMemoryBlock.PutWithPayloadSync(header, ARRAYSIZE, data, ARRAYSIZE, nullptr);
356     }
357     ASSERT_TRUE(shareMemoryBlock.ReleaseBlock());
358 }
359 
360 /**
361  * @tc.name: share memory
362  * @tc.desc: Shared memory GetMemory test with no write data.
363  * @tc.type: FUNC
364  */
365 HWTEST_F(SharedMemoryBlockTest, GetMemory, TestSize.Level1)
366 {
367     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
368     ASSERT_TRUE(shareMemoryBlock.Valid());
369 
370     // There are only 12 bytes left in shared memory.
371     const int expectedSize = 12;
372     int usedSize = PAGE_SIZE - sizeof(ShareMemoryBlock::BlockHeader) - NUM_FOUR - expectedSize;
373     shareMemoryBlock.UseMemory(usedSize);
374     shareMemoryBlock.ResetPos();
375 
376     uint8_t* memory = nullptr;
377     uint32_t offset = 0;
378     const int fieldSize = 10;
379     auto ret = shareMemoryBlock.GetMemory(fieldSize, &memory, &offset);
380     EXPECT_FALSE(ret);
381     EXPECT_EQ(memory, nullptr);
382     EXPECT_EQ(offset, 0);
383 
384     memory = nullptr;
385     offset = 0;
386     ret = shareMemoryBlock.GetMemory(NUM_FOUR, &memory, &offset);
387     EXPECT_TRUE(ret);
388     EXPECT_NE(memory, nullptr);
389     EXPECT_EQ(offset, NUM_FOUR);
390 }
391 
392 /**
393  * @tc.name: share memory
394  * @tc.desc: Shared memory GetMemory test with write data.
395  * @tc.type: FUNC
396  */
397 HWTEST_F(SharedMemoryBlockTest, GetMemoryAndWriteData, TestSize.Level1)
398 {
399     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
400     ASSERT_TRUE(shareMemoryBlock.Valid());
401 
402     // There are only 20 bytes left in shared memory.
403     const int expectedSize = 20;
404     int usedSize = PAGE_SIZE - sizeof(ShareMemoryBlock::BlockHeader) - NUM_FOUR - expectedSize;
405     shareMemoryBlock.UseMemory(usedSize);
406     shareMemoryBlock.ResetPos();
407     // False data, return true is in order to offset the rp.
__anon3da124c10202(const int8_t data[], uint32_t size) 408     auto ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
409         return true;
410     });
411     EXPECT_TRUE(ret);
412 
413     uint8_t* memory = nullptr;
414     uint32_t offset = 0;
415     const int len = 6;
416     ret = shareMemoryBlock.GetMemory(len, &memory, &offset);
417     EXPECT_TRUE(ret);
418     ASSERT_NE(memory, nullptr);
419     EXPECT_EQ(offset, NUM_FOUR);
420     const uint8_t data[] = {0x0A, 0x04, 0x31, 0x32, 0x33, 0x34};
421     ret = memcpy_s(memory, len, data, len);
422     EXPECT_EQ(ret, EOK);
423     shareMemoryBlock.UseMemory(len);
424     shareMemoryBlock.ResetPos();
425 
426     // offset rp to be equal to wp.
__anon3da124c10302(const int8_t data[], uint32_t size) 427     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
428         return true;
429     });
430     EXPECT_TRUE(ret);
431 
432     // rp == wp, in order to move wp until wp is less than rp.
433     memory = nullptr;
434     offset = 0;
435     const int fieldSize1 = 100;
436     ret = shareMemoryBlock.GetMemory(fieldSize1, &memory, &offset);
437     EXPECT_TRUE(ret);
438     EXPECT_NE(memory, nullptr);
439     EXPECT_EQ(offset, NUM_FOUR);
440     shareMemoryBlock.UseMemory(fieldSize1);
441     shareMemoryBlock.ResetPos();
442 
443     // rp > wp
444     memory = nullptr;
445     offset = 0;
446     const int fieldSize2 = 1000;
447     ret = shareMemoryBlock.GetMemory(fieldSize2, &memory, &offset);
448     EXPECT_TRUE(ret);
449     EXPECT_NE(memory, nullptr);
450     EXPECT_EQ(offset, NUM_FOUR);
451 }
452 
453 /**
454  * @tc.name: share memory
455  * @tc.desc: Shared memory TakeDataOptimize test.
456  * @tc.type: FUNC
457  */
458 HWTEST_F(SharedMemoryBlockTest, TakeDataOptimize, TestSize.Level1)
459 {
460     ShareMemoryBlock shareMemoryBlock("testname", PAGE_SIZE);
461     ASSERT_TRUE(shareMemoryBlock.Valid());
462 
463     // There are only 21 bytes left in shared memory.
464     const int expectedSize = 21;
465     int usedSize = PAGE_SIZE - sizeof(ShareMemoryBlock::BlockHeader) - NUM_FOUR - expectedSize;
466     shareMemoryBlock.UseMemory(usedSize);
467     shareMemoryBlock.ResetPos();
468 
469     ProfilerPluginData pluginData;
470     // False data, Parsing failed, return true is in order to offset the rp
__anon3da124c10402(const int8_t data[], uint32_t size) 471     auto ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
472         int retval = pluginData.ParseFromArray(reinterpret_cast<const char*>(data), size);
473         EXPECT_FALSE(retval);
474         return true;
475     });
476     EXPECT_TRUE(ret);
477     EXPECT_STREQ(pluginData.name().c_str(), "");
478 
479     uint8_t* memory = nullptr;
480     uint32_t offset = 0;
481     const int len = 7;
482     ret = shareMemoryBlock.GetMemory(len, &memory, &offset);
483     EXPECT_TRUE(ret);
484     ASSERT_NE(memory, nullptr);
485     EXPECT_EQ(offset, NUM_FOUR);
486     const uint8_t data[] = {0x0A, 0x05, 0x31, 0x32, 0x33, 0x34, 0x35};
487     ret = memcpy_s(memory, len, data, len);
488     EXPECT_EQ(ret, EOK);
489     shareMemoryBlock.UseMemory(len);
490     shareMemoryBlock.ResetPos();
491 
492     // func return false
__anon3da124c10502(const int8_t data[], uint32_t size) 493     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
494         return false;
495     });
496     EXPECT_FALSE(ret);
497 
498     // rp < wp
__anon3da124c10602(const int8_t data[], uint32_t size) 499     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
500         int retval = pluginData.ParseFromArray(reinterpret_cast<const char*>(data), size);
501         EXPECT_TRUE(retval);
502         return true;
503     });
504     EXPECT_TRUE(ret);
505     EXPECT_STREQ(pluginData.name().c_str(), "12345");
506 
507     memory = nullptr;
508     offset = 0;
509     ret = shareMemoryBlock.GetMemory(1, &memory, &offset);
510     EXPECT_TRUE(ret);
511     ASSERT_NE(memory, nullptr);
512     EXPECT_EQ(offset, NUM_FOUR);
513     const uint8_t data1[] = {0x0A};
514     const int fieldSize = 2;
515     ret = memcpy_s(memory, 1, data1, 1);
516     EXPECT_EQ(ret, EOK);
517     ret = shareMemoryBlock.Seek(NUM_FIVE);
518     EXPECT_TRUE(ret);
519     ret = shareMemoryBlock.GetMemory(fieldSize, &memory, &offset);
520     EXPECT_TRUE(ret);
521     ASSERT_NE(memory, nullptr);
522     EXPECT_EQ(offset, NUM_FIVE);
523     const uint8_t data2[] = {0x01, 0x37};
524     ret = memcpy_s(memory, fieldSize, data2, fieldSize);
525     EXPECT_EQ(ret, EOK);
526 
527     // wp < rp && wp == 0
__anon3da124c10702(const int8_t data[], uint32_t size) 528     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
529         return true;
530     });
531     EXPECT_FALSE(ret);
532     shareMemoryBlock.UseMemory(NUM_FOUR - 1);
533     shareMemoryBlock.ResetPos();
534 
535     // wp < rp
__anon3da124c10802(const int8_t data[], uint32_t size) 536     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
537         int retval = pluginData.ParseFromArray(reinterpret_cast<const char*>(data), size);
538         EXPECT_TRUE(retval);
539         return true;
540     });
541     EXPECT_TRUE(ret);
542     EXPECT_STREQ(pluginData.name().c_str(), "7");
543 
544     // rp == wp
__anon3da124c10902(const int8_t data[], uint32_t size) 545     ret = shareMemoryBlock.TakeDataOptimize([&](const int8_t data[], uint32_t size) -> bool {
546         return true;
547     });
548     EXPECT_FALSE(ret);
549 }
550 } // namespace
551