1 #include "include/rados/librados.h"
2 #include "include/rados/librados.hpp"
3 #include "include/radosstriper/libradosstriper.h"
4 #include "include/radosstriper/libradosstriper.hpp"
5 #include "test/librados/test.h"
6 #include "test/libradosstriper/TestCase.h"
8 #include <boost/scoped_ptr.hpp>
10 #include <semaphore.h>
13 using namespace librados
;
14 using namespace libradosstriper
;
20 AioTestData() : m_complete(false), m_safe(false) {
21 m_sem
= sem_open("test_libradosstriper_aio_sem", O_CREAT
, 0644, 0);
25 sem_unlink("test_libradosstriper_aio_sem");
34 void set_completion_complete(rados_completion_t cb
, void *arg
)
36 AioTestData
*test
= static_cast<AioTestData
*>(arg
);
37 test
->m_complete
= true;
38 sem_post(test
->m_sem
);
41 void set_completion_safe(rados_completion_t cb
, void *arg
)
43 AioTestData
*test
= static_cast<AioTestData
*>(arg
);
45 sem_post(test
->m_sem
);
48 TEST_F(StriperTest
, SimpleWrite
) {
49 AioTestData test_data
;
50 rados_completion_t my_completion
;
51 ASSERT_EQ(0, rados_aio_create_completion
52 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
54 memset(buf
, 0xcc, sizeof(buf
));
55 ASSERT_EQ(0, rados_striper_aio_write(striper
, "StriperTest", my_completion
, buf
, sizeof(buf
), 0));
57 sem_wait(test_data
.m_sem
);
58 sem_wait(test_data
.m_sem
);
59 rados_aio_release(my_completion
);
62 TEST_F(StriperTestPP
, SimpleWritePP
) {
63 AioTestData test_data
;
64 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
65 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
67 memset(buf
, 0xcc, sizeof(buf
));
69 bl1
.append(buf
, sizeof(buf
));
70 ASSERT_EQ(0, striper
.aio_write("SimpleWritePP", my_completion
, bl1
, sizeof(buf
), 0));
72 sem_wait(test_data
.m_sem
);
73 sem_wait(test_data
.m_sem
);
74 my_completion
->release();
77 TEST_F(StriperTest
, WaitForSafe
) {
78 AioTestData test_data
;
79 rados_completion_t my_completion
;
80 ASSERT_EQ(0, rados_aio_create_completion
81 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
83 memset(buf
, 0xcc, sizeof(buf
));
84 ASSERT_EQ(0, rados_striper_aio_write(striper
, "WaitForSafe", my_completion
, buf
, sizeof(buf
), 0));
86 rados_aio_wait_for_safe(my_completion
);
87 sem_wait(test_data
.m_sem
);
88 sem_wait(test_data
.m_sem
);
89 rados_aio_release(my_completion
);
92 TEST_F(StriperTestPP
, WaitForSafePP
) {
93 AioTestData test_data
;
94 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
95 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
97 memset(buf
, 0xcc, sizeof(buf
));
99 bl1
.append(buf
, sizeof(buf
));
100 ASSERT_EQ(0, striper
.aio_write("WaitForSafePP", my_completion
, bl1
, sizeof(buf
), 0));
102 my_completion
->wait_for_safe();
103 sem_wait(test_data
.m_sem
);
104 sem_wait(test_data
.m_sem
);
105 my_completion
->release();
108 TEST_F(StriperTest
, RoundTrip
) {
109 AioTestData test_data
;
110 rados_completion_t my_completion
;
111 ASSERT_EQ(0, rados_aio_create_completion
112 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
114 memset(buf
, 0xcc, sizeof(buf
));
115 ASSERT_EQ(0, rados_striper_aio_write(striper
, "RoundTrip", my_completion
, buf
, sizeof(buf
), 0));
118 sem_wait(test_data
.m_sem
);
119 sem_wait(test_data
.m_sem
);
122 memset(buf2
, 0, sizeof(buf2
));
123 rados_completion_t my_completion2
;
124 ASSERT_EQ(0, rados_aio_create_completion
125 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
126 ASSERT_EQ(0, rados_striper_aio_read(striper
, "RoundTrip", my_completion2
, buf2
, sizeof(buf2
), 0));
129 rados_aio_wait_for_complete(my_completion2
);
131 ASSERT_EQ(0, memcmp(buf
, buf2
, sizeof(buf
)));
132 sem_wait(test_data
.m_sem
);
133 sem_wait(test_data
.m_sem
);
134 rados_aio_release(my_completion
);
135 rados_aio_release(my_completion2
);
138 TEST_F(StriperTest
, RoundTrip2
) {
139 AioTestData test_data
;
140 rados_completion_t my_completion
;
141 ASSERT_EQ(0, rados_aio_create_completion
142 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
144 memset(buf
, 0xcc, sizeof(buf
));
145 ASSERT_EQ(0, rados_striper_aio_write(striper
, "RoundTrip2", my_completion
, buf
, sizeof(buf
), 0));
148 sem_wait(test_data
.m_sem
);
149 sem_wait(test_data
.m_sem
);
152 memset(buf2
, 0, sizeof(buf2
));
153 rados_completion_t my_completion2
;
154 ASSERT_EQ(0, rados_aio_create_completion
155 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
156 ASSERT_EQ(0, rados_striper_aio_read(striper
, "RoundTrip2", my_completion2
, buf2
, sizeof(buf2
), 0));
159 rados_aio_wait_for_safe(my_completion2
);
161 ASSERT_EQ(0, memcmp(buf
, buf2
, sizeof(buf
)));
162 sem_wait(test_data
.m_sem
);
163 sem_wait(test_data
.m_sem
);
164 rados_aio_release(my_completion
);
165 rados_aio_release(my_completion2
);
168 TEST_F(StriperTestPP
, RoundTripPP
) {
169 AioTestData test_data
;
170 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
171 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
173 memset(buf
, 0xcc, sizeof(buf
));
175 bl1
.append(buf
, sizeof(buf
));
176 ASSERT_EQ(0, striper
.aio_write("RoundTripPP", my_completion
, bl1
, sizeof(buf
), 0));
179 sem_wait(test_data
.m_sem
);
180 sem_wait(test_data
.m_sem
);
183 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
184 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
185 ASSERT_EQ(0, striper
.aio_read("RoundTripPP", my_completion2
, &bl2
, sizeof(buf
), 0));
188 my_completion2
->wait_for_complete();
190 ASSERT_EQ(0, memcmp(buf
, bl2
.c_str(), sizeof(buf
)));
191 sem_wait(test_data
.m_sem
);
192 sem_wait(test_data
.m_sem
);
193 my_completion
->release();
194 my_completion2
->release();
197 TEST_F(StriperTestPP
, RoundTripPP2
) {
198 AioTestData test_data
;
199 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
200 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
202 memset(buf
, 0xcc, sizeof(buf
));
204 bl1
.append(buf
, sizeof(buf
));
205 ASSERT_EQ(0, striper
.aio_write("RoundTripPP2", my_completion
, bl1
, sizeof(buf
), 0));
208 sem_wait(test_data
.m_sem
);
209 sem_wait(test_data
.m_sem
);
212 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
213 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
214 ASSERT_EQ(0, striper
.aio_read("RoundTripPP2", my_completion2
, &bl2
, sizeof(buf
), 0));
217 my_completion2
->wait_for_safe();
219 ASSERT_EQ(0, memcmp(buf
, bl2
.c_str(), sizeof(buf
)));
220 sem_wait(test_data
.m_sem
);
221 sem_wait(test_data
.m_sem
);
222 my_completion
->release();
223 my_completion2
->release();
226 TEST_F(StriperTest
, IsComplete
) {
227 AioTestData test_data
;
228 rados_completion_t my_completion
;
229 ASSERT_EQ(0, rados_aio_create_completion
230 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
232 memset(buf
, 0xcc, sizeof(buf
));
233 ASSERT_EQ(0, rados_striper_aio_write(striper
, "IsComplete", my_completion
, buf
, sizeof(buf
), 0));
236 sem_wait(test_data
.m_sem
);
237 sem_wait(test_data
.m_sem
);
240 memset(buf2
, 0, sizeof(buf2
));
241 rados_completion_t my_completion2
;
242 ASSERT_EQ(0, rados_aio_create_completion
243 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
244 ASSERT_EQ(0, rados_striper_aio_read(striper
, "IsComplete", my_completion2
, buf2
, sizeof(buf2
), 0));
247 // Busy-wait until the AIO completes.
248 // Normally we wouldn't do this, but we want to test rados_aio_is_complete.
250 int is_complete
= rados_aio_is_complete(my_completion2
);
255 ASSERT_EQ(0, memcmp(buf
, buf2
, sizeof(buf
)));
256 sem_wait(test_data
.m_sem
);
257 sem_wait(test_data
.m_sem
);
258 rados_aio_release(my_completion
);
259 rados_aio_release(my_completion2
);
262 TEST_F(StriperTestPP
, IsCompletePP
) {
263 AioTestData test_data
;
264 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
265 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
267 memset(buf
, 0xcc, sizeof(buf
));
269 bl1
.append(buf
, sizeof(buf
));
270 ASSERT_EQ(0, striper
.aio_write("IsCompletePP", my_completion
, bl1
, sizeof(buf
), 0));
273 sem_wait(test_data
.m_sem
);
274 sem_wait(test_data
.m_sem
);
277 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
278 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
279 ASSERT_EQ(0, striper
.aio_read("IsCompletePP", my_completion2
, &bl2
, sizeof(buf
), 0));
282 // Busy-wait until the AIO completes.
283 // Normally we wouldn't do this, but we want to test rados_aio_is_complete.
285 int is_complete
= my_completion2
->is_complete();
290 ASSERT_EQ(0, memcmp(buf
, bl2
.c_str(), sizeof(buf
)));
291 sem_wait(test_data
.m_sem
);
292 sem_wait(test_data
.m_sem
);
293 my_completion
->release();
294 my_completion2
->release();
297 TEST_F(StriperTest
, IsSafe
) {
298 AioTestData test_data
;
299 rados_completion_t my_completion
;
300 ASSERT_EQ(0, rados_aio_create_completion
301 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
303 memset(buf
, 0xcc, sizeof(buf
));
304 ASSERT_EQ(0, rados_striper_aio_write(striper
, "IsSafe", my_completion
, buf
, sizeof(buf
), 0));
307 // Busy-wait until the AIO completes.
308 // Normally we wouldn't do this, but we want to test rados_aio_is_safe.
310 int is_safe
= rados_aio_is_safe(my_completion
);
316 memset(buf2
, 0, sizeof(buf2
));
317 rados_completion_t my_completion2
;
318 ASSERT_EQ(0, rados_aio_create_completion
319 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
320 ASSERT_EQ(0, rados_striper_aio_read(striper
, "IsSafe", my_completion2
, buf2
, sizeof(buf2
), 0));
323 rados_aio_wait_for_complete(my_completion2
);
325 ASSERT_EQ(0, memcmp(buf
, buf2
, sizeof(buf
)));
326 sem_wait(test_data
.m_sem
);
327 sem_wait(test_data
.m_sem
);
328 rados_aio_release(my_completion
);
329 rados_aio_release(my_completion2
);
332 TEST_F(StriperTestPP
, IsSafePP
) {
333 AioTestData test_data
;
334 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
335 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
337 memset(buf
, 0xcc, sizeof(buf
));
339 bl1
.append(buf
, sizeof(buf
));
340 ASSERT_EQ(0, striper
.aio_write("IsSafePP", my_completion
, bl1
, sizeof(buf
), 0));
343 // Busy-wait until the AIO completes.
344 // Normally we wouldn't do this, but we want to test rados_aio_is_safe.
346 int is_safe
= my_completion
->is_safe();
352 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
353 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
354 ASSERT_EQ(0, striper
.aio_read("IsSafePP", my_completion2
, &bl2
, sizeof(buf
), 0));
357 my_completion2
->wait_for_complete();
359 ASSERT_EQ(0, memcmp(buf
, bl2
.c_str(), sizeof(buf
)));
360 sem_wait(test_data
.m_sem
);
361 sem_wait(test_data
.m_sem
);
362 my_completion
->release();
363 my_completion2
->release();
366 TEST_F(StriperTest
, RoundTripAppend
) {
367 AioTestData test_data
;
368 rados_completion_t my_completion
, my_completion2
, my_completion3
;
369 ASSERT_EQ(0, rados_aio_create_completion
370 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
372 memset(buf
, 0xcc, sizeof(buf
));
373 ASSERT_EQ(0, rados_striper_aio_append(striper
, "RoundTripAppend", my_completion
, buf
, sizeof(buf
)));
376 rados_aio_wait_for_complete(my_completion
);
379 memset(buf2
, 0xdd, sizeof(buf2
));
380 ASSERT_EQ(0, rados_aio_create_completion
381 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
382 ASSERT_EQ(0, rados_striper_aio_append(striper
, "RoundTripAppend", my_completion2
, buf2
, sizeof(buf
)));
385 rados_aio_wait_for_complete(my_completion2
);
387 char buf3
[sizeof(buf
) + sizeof(buf2
)];
388 memset(buf3
, 0, sizeof(buf3
));
389 ASSERT_EQ(0, rados_aio_create_completion
390 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion3
));
391 ASSERT_EQ(0, rados_striper_aio_read(striper
, "RoundTripAppend", my_completion3
, buf3
, sizeof(buf3
), 0));
394 rados_aio_wait_for_complete(my_completion3
);
396 ASSERT_EQ((int)(sizeof(buf
) + sizeof(buf2
)), rados_aio_get_return_value(my_completion3
));
397 ASSERT_EQ(0, memcmp(buf3
, buf
, sizeof(buf
)));
398 ASSERT_EQ(0, memcmp(buf3
+ sizeof(buf
), buf2
, sizeof(buf2
)));
399 sem_wait(test_data
.m_sem
);
400 sem_wait(test_data
.m_sem
);
401 rados_aio_release(my_completion
);
402 rados_aio_release(my_completion2
);
403 rados_aio_release(my_completion3
);
406 TEST_F(StriperTestPP
, RoundTripAppendPP
) {
407 AioTestData test_data
;
408 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
409 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
411 memset(buf
, 0xcc, sizeof(buf
));
413 bl1
.append(buf
, sizeof(buf
));
414 ASSERT_EQ(0, striper
.aio_append("RoundTripAppendPP", my_completion
, bl1
, sizeof(buf
)));
417 my_completion
->wait_for_complete();
420 memset(buf2
, 0xdd, sizeof(buf2
));
422 bl2
.append(buf2
, sizeof(buf2
));
423 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
424 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
425 ASSERT_EQ(0, striper
.aio_append("RoundTripAppendPP", my_completion2
, bl2
, sizeof(buf2
)));
428 my_completion2
->wait_for_complete();
431 AioCompletion
*my_completion3
= librados::Rados::aio_create_completion
432 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
433 ASSERT_EQ(0, striper
.aio_read("RoundTripAppendPP", my_completion3
, &bl3
, 2 * sizeof(buf
), 0));
436 my_completion3
->wait_for_complete();
438 ASSERT_EQ(sizeof(buf
) + sizeof(buf2
), (unsigned)my_completion3
->get_return_value());
439 ASSERT_EQ(0, memcmp(bl3
.c_str(), buf
, sizeof(buf
)));
440 ASSERT_EQ(0, memcmp(bl3
.c_str() + sizeof(buf
), buf2
, sizeof(buf2
)));
441 sem_wait(test_data
.m_sem
);
442 sem_wait(test_data
.m_sem
);
443 my_completion
->release();
444 my_completion2
->release();
445 my_completion3
->release();
448 TEST_F(StriperTest
, Flush
) {
449 AioTestData test_data
;
450 rados_completion_t my_completion
;
451 ASSERT_EQ(0, rados_aio_create_completion
452 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
454 memset(buf
, 0xee, sizeof(buf
));
455 ASSERT_EQ(0, rados_striper_aio_write(striper
, "Flush", my_completion
, buf
, sizeof(buf
), 0));
456 rados_striper_aio_flush(striper
);
458 memset(buf2
, 0, sizeof(buf2
));
459 rados_completion_t my_completion2
;
460 ASSERT_EQ(0, rados_aio_create_completion
461 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
462 ASSERT_EQ(0, rados_striper_aio_read(striper
, "Flush", my_completion2
, buf2
, sizeof(buf2
), 0));
465 rados_aio_wait_for_complete(my_completion2
);
467 ASSERT_EQ(0, memcmp(buf
, buf2
, sizeof(buf
)));
468 sem_wait(test_data
.m_sem
);
469 sem_wait(test_data
.m_sem
);
470 rados_aio_release(my_completion
);
471 rados_aio_release(my_completion2
);
474 TEST_F(StriperTestPP
, FlushPP
) {
475 AioTestData test_data
;
476 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
477 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
479 memset(buf
, 0xee, sizeof(buf
));
481 bl1
.append(buf
, sizeof(buf
));
482 ASSERT_EQ(0, striper
.aio_write("FlushPP", my_completion
, bl1
, sizeof(buf
), 0));
485 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
486 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
487 ASSERT_EQ(0, striper
.aio_read("FlushPP", my_completion2
, &bl2
, sizeof(buf
), 0));
490 my_completion2
->wait_for_complete();
492 ASSERT_EQ(0, memcmp(buf
, bl2
.c_str(), sizeof(buf
)));
493 sem_wait(test_data
.m_sem
);
494 sem_wait(test_data
.m_sem
);
495 my_completion
->release();
496 my_completion2
->release();
499 TEST_F(StriperTest
, RoundTripWriteFull
) {
500 AioTestData test_data
;
501 rados_completion_t my_completion
, my_completion2
, my_completion3
;
502 ASSERT_EQ(0, rados_aio_create_completion
503 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion
));
505 memset(buf
, 0xcc, sizeof(buf
));
506 ASSERT_EQ(0, rados_striper_aio_write(striper
, "RoundTripWriteFull", my_completion
, buf
, sizeof(buf
), 0));
509 rados_aio_wait_for_complete(my_completion
);
512 memset(buf2
, 0xdd, sizeof(buf2
));
513 ASSERT_EQ(0, rados_aio_create_completion
514 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion2
));
515 ASSERT_EQ(0, rados_striper_aio_write_full(striper
, "RoundTripWriteFull", my_completion2
, buf2
, sizeof(buf2
)));
518 rados_aio_wait_for_complete(my_completion2
);
520 char buf3
[sizeof(buf
) + sizeof(buf2
)];
521 memset(buf3
, 0, sizeof(buf3
));
522 ASSERT_EQ(0, rados_aio_create_completion
523 ((void*)&test_data
, set_completion_complete
, set_completion_safe
, &my_completion3
));
524 ASSERT_EQ(0, rados_striper_aio_read(striper
, "RoundTripWriteFull", my_completion3
, buf3
, sizeof(buf3
), 0));
527 rados_aio_wait_for_complete(my_completion3
);
529 ASSERT_EQ(sizeof(buf2
), (unsigned)rados_aio_get_return_value(my_completion3
));
530 ASSERT_EQ(0, memcmp(buf3
, buf2
, sizeof(buf2
)));
531 sem_wait(test_data
.m_sem
);
532 sem_wait(test_data
.m_sem
);
533 rados_aio_release(my_completion
);
534 rados_aio_release(my_completion2
);
535 rados_aio_release(my_completion3
);
538 TEST_F(StriperTestPP
, RoundTripWriteFullPP
) {
539 AioTestData test_data
;
540 AioCompletion
*my_completion
= librados::Rados::aio_create_completion
541 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
543 memset(buf
, 0xcc, sizeof(buf
));
545 bl1
.append(buf
, sizeof(buf
));
546 ASSERT_EQ(0, striper
.aio_write("RoundTripWriteFullPP", my_completion
, bl1
, sizeof(buf
), 0));
549 my_completion
->wait_for_complete();
552 memset(buf2
, 0xdd, sizeof(buf2
));
554 bl2
.append(buf2
, sizeof(buf2
));
555 AioCompletion
*my_completion2
= librados::Rados::aio_create_completion
556 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
557 ASSERT_EQ(0, striper
.aio_write_full("RoundTripWriteFullPP", my_completion2
, bl2
));
560 my_completion2
->wait_for_complete();
563 AioCompletion
*my_completion3
= librados::Rados::aio_create_completion
564 ((void*)&test_data
, set_completion_complete
, set_completion_safe
);
565 ASSERT_EQ(0, striper
.aio_read("RoundTripWriteFullPP", my_completion3
, &bl3
, sizeof(buf
), 0));
568 my_completion3
->wait_for_complete();
570 ASSERT_EQ(sizeof(buf2
), (unsigned)my_completion3
->get_return_value());
571 ASSERT_EQ(0, memcmp(bl3
.c_str(), buf2
, sizeof(buf2
)));
572 sem_wait(test_data
.m_sem
);
573 sem_wait(test_data
.m_sem
);
574 my_completion
->release();
575 my_completion2
->release();
576 my_completion3
->release();
579 TEST_F(StriperTest
, RemoveTest
) {
581 char buf2
[sizeof(buf
)];
583 memset(buf
, 0xaa, sizeof(buf
));
584 ASSERT_EQ(0, rados_striper_write(striper
, "RemoveTest", buf
, sizeof(buf
), 0));
586 AioTestData test_data
;
587 rados_completion_t my_completion
;
588 ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data
,
589 set_completion_complete
, set_completion_safe
, &my_completion
));
590 ASSERT_EQ(0, rados_striper_aio_remove(striper
, "RemoveTest", my_completion
));
593 ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion
));
595 ASSERT_EQ(0, rados_aio_get_return_value(my_completion
));
596 rados_aio_release(my_completion
);
597 // check we get ENOENT on reading
598 ASSERT_EQ(-ENOENT
, rados_striper_read(striper
, "RemoveTest", buf2
, sizeof(buf2
), 0));
601 TEST_F(StriperTestPP
, RemoveTestPP
) {
603 memset(buf
, 0xaa, sizeof(buf
));
605 bl
.append(buf
, sizeof(buf
));
606 ASSERT_EQ(0, striper
.write("RemoveTestPP", bl
, sizeof(buf
), 0));
607 AioCompletion
*my_completion
= cluster
.aio_create_completion(0, 0, 0);
608 ASSERT_EQ(0, striper
.aio_remove("RemoveTestPP", my_completion
));
611 ASSERT_EQ(0, my_completion
->wait_for_complete());
613 ASSERT_EQ(0, my_completion
->get_return_value());
615 ASSERT_EQ(-ENOENT
, striper
.read("RemoveTestPP", &bl2
, sizeof(buf
), 0));
616 my_completion
->release();