sem_post(&test->m_sem);
}
+void set_completion_completePP(rados_completion_t cb, void *arg)
+{
+ AioTestDataPP *test = static_cast<AioTestDataPP*>(arg);
+ test->m_complete = true;
+ sem_post(&test->m_sem);
+}
+
+void set_completion_safePP(rados_completion_t cb, void *arg)
+{
+ AioTestDataPP *test = static_cast<AioTestDataPP*>(arg);
+ test->m_safe = true;
+ sem_post(&test->m_sem);
+}
+
TEST(LibRadosAio, SimpleWrite) {
AioTestData test_data;
rados_completion_t my_completion;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_ioctx_set_namespace(test_data.m_ioctx, "nspace");
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_aio_release(my_completion);
}
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
AioCompletion *my_completion_null = NULL;
ASSERT_NE(my_completion, my_completion_null);
ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
}
ASSERT_EQ("", test_data.init());
test_data.m_ioctx.set_namespace("nspace");
AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo",
my_completion, bl1, sizeof(buf), 0));
{
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
}
}
my_completion, buf, sizeof(buf), 0));
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_safe(my_completion));
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_aio_release(my_completion);
}
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
AioCompletion *my_completion_null = NULL;
ASSERT_NE(my_completion, my_completion_null);
char buf[128];
my_completion, bl1, sizeof(buf), 0));
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_safe());
+ ASSERT_EQ(0, my_completion->get_return_value());
delete my_completion;
}
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
- char buf2[128];
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
+ char buf2[256];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ((int)sizeof(buf), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
my_completion2, buf2, sizeof(buf2), 0));
{
TestAlarm alarm;
- ASSERT_EQ(0, rados_aio_wait_for_safe(my_completion2));
+ ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ((int)sizeof(buf), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
AioCompletion *my_completion_null = NULL;
ASSERT_NE(my_completion, my_completion_null);
char buf[128];
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
ASSERT_NE(my_completion2, my_completion_null);
ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
my_completion2, &bl2, sizeof(buf), 0));
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
AioTestDataPP test_data;
ASSERT_EQ("", test_data.init());
AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
AioCompletion *my_completion_null = NULL;
ASSERT_NE(my_completion, my_completion_null);
char buf[128];
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
- (void*)&test_data, set_completion_complete, set_completion_safe);
+ (void*)&test_data, set_completion_completePP, set_completion_safePP);
ASSERT_NE(my_completion2, my_completion_null);
ASSERT_EQ(0, test_data.m_ioctx.aio_read("foo",
my_completion2, &bl2, sizeof(buf), 0));
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_safe());
+ ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0xdd, sizeof(buf2));
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
set_completion_complete, set_completion_safe, &my_completion2));
ASSERT_EQ(0, rados_aio_append(test_data.m_ioctx, "foo",
- my_completion2, buf2, sizeof(buf)));
+ my_completion2, buf2, sizeof(buf2)));
{
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
char buf3[sizeof(buf) + sizeof(buf2)];
memset(buf3, 0, sizeof(buf3));
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion3));
}
+ ASSERT_EQ((int)sizeof(buf3), rados_aio_get_return_value(my_completion3));
ASSERT_EQ(0, memcmp(buf3, buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(buf3 + sizeof(buf), buf2, sizeof(buf2)));
rados_aio_release(my_completion);
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion->get_return_value());
char buf2[128];
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
+ ASSERT_EQ((int)(sizeof(buf) * 2), my_completion3->get_return_value());
+ ASSERT_EQ(sizeof(buf) * 2, bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf, sizeof(buf)));
ASSERT_EQ(0, memcmp(bl3.c_str() + sizeof(buf), buf2, sizeof(buf2)));
delete my_completion;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
break;
}
}
+ ASSERT_EQ((int)sizeof(buf), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
// Busy-wait until the AIO completes.
- // Normally we wouldn't do this, but we want to test rados_aio_is_complete.
+ // Normally we wouldn't do this, but we want to test is_complete.
while (true) {
int is_complete = my_completion2->is_complete();
if (is_complete)
break;
}
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
break;
}
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ((int)sizeof(buf), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
break;
}
}
+ ASSERT_EQ(0, my_completion->get_return_value());
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
bufferlist bl2;
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
ASSERT_EQ(0, rados_aio_write(test_data.m_ioctx, "foo",
my_completion, buf, sizeof(buf), 0));
ASSERT_EQ(0, rados_aio_flush(test_data.m_ioctx));
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ((int)sizeof(buf2), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
bl1, sizeof(buf), 0));
ASSERT_EQ(0, test_data.m_ioctx.aio_flush());
+ ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
ASSERT_EQ(1, rados_aio_is_safe(my_completion));
ASSERT_EQ(1, rados_aio_is_complete(flush_completion));
ASSERT_EQ(1, rados_aio_is_safe(flush_completion));
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[128];
memset(buf2, 0, sizeof(buf2));
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ((int)sizeof(buf2), rados_aio_get_return_value(my_completion2));
ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
ASSERT_EQ(1, my_completion->is_safe());
ASSERT_EQ(1, flush_completion->is_complete());
ASSERT_EQ(1, flush_completion->is_safe());
+ ASSERT_EQ(0, my_completion->get_return_value());
bufferlist bl2;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf), my_completion2->get_return_value());
+ ASSERT_EQ(sizeof(buf), bl2.length());
ASSERT_EQ(0, memcmp(buf, bl2.c_str(), sizeof(buf)));
delete my_completion;
delete my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
char buf2[64];
memset(buf2, 0xdd, sizeof(buf2));
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
char buf3[sizeof(buf) + sizeof(buf2)];
memset(buf3, 0, sizeof(buf3));
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion3));
}
+ ASSERT_EQ((int)sizeof(buf2), rados_aio_get_return_value(my_completion3));
ASSERT_EQ(0, memcmp(buf3, buf2, sizeof(buf2)));
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion->get_return_value());
char buf2[64];
memset(buf2, 0xdd, sizeof(buf2));
bufferlist bl2;
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion2->get_return_value());
bufferlist bl3;
AioCompletion *my_completion3 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
+ ASSERT_EQ((int)sizeof(buf2), my_completion3->get_return_value());
+ ASSERT_EQ(sizeof(buf2), bl3.length());
ASSERT_EQ(0, memcmp(bl3.c_str(), buf2, sizeof(buf2)));
delete my_completion;
delete my_completion2;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
time_t pmtime;
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
ASSERT_EQ(sizeof(buf), psize);
rados_aio_release(my_completion);
rados_aio_release(my_completion2);
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
delete my_completion;
delete my_completion2;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
rados_ioctx_set_namespace(test_data.m_ioctx, "nspace");
char buf2[64];
memset(buf2, 0xbb, sizeof(buf2));
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
time_t pmtime;
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
ASSERT_EQ(sizeof(buf), psize);
rados_ioctx_set_namespace(test_data.m_ioctx, "nspace");
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion3));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion3));
ASSERT_EQ(sizeof(buf2), psize);
rados_aio_release(my_completion);
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
delete my_completion;
delete my_completion2;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion));
uint64_t psize;
time_t pmtime;
rados_completion_t my_completion2;
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion2));
ASSERT_EQ(sizeof(buf), psize);
rados_completion_t my_completion3;
ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
TestAlarm alarm;
ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion3));
}
+ ASSERT_EQ(0, rados_aio_get_return_value(my_completion3));
uint64_t psize2;
time_t pmtime2;
rados_completion_t my_completion4;
sem_wait(&test_data.m_sem);
sem_wait(&test_data.m_sem);
}
+ ASSERT_EQ(0, my_completion->get_return_value());
uint64_t psize;
time_t pmtime;
AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
TestAlarm alarm;
ASSERT_EQ(0, my_completion2->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion2->get_return_value());
ASSERT_EQ(sizeof(buf), psize);
uint64_t psize2;
time_t pmtime2;
TestAlarm alarm;
ASSERT_EQ(0, my_completion3->wait_for_complete());
}
+ ASSERT_EQ(0, my_completion3->get_return_value());
AioCompletion *my_completion4 = test_data.m_cluster.aio_create_completion(
(void*)&test_data, set_completion_complete, set_completion_safe);
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
}
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(-ECANCELED, my_completion->get_return_value());
ASSERT_EQ(-ECANCELED, r);
}
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
ASSERT_EQ(header.length(), header_to_set.length());
ASSERT_EQ(set_got.size(), (unsigned)1);
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
}
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
ASSERT_EQ(set_got.size(), (unsigned)2);
}
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
}
{
TestAlarm alarm;
ASSERT_EQ(0, my_completion->wait_for_complete());
}
+ EXPECT_EQ(0, my_completion->get_return_value());
ASSERT_EQ(set_got.size(), (unsigned)0);
}