]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/rados-api/aio: add WaitForSafe, RoundTrip
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 9 Aug 2011 18:17:16 +0000 (11:17 -0700)
committerColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 9 Aug 2011 23:02:53 +0000 (16:02 -0700)
Signed-off-by: Colin McCabe <colin.mccabe@dreamhost.com>
src/test/rados-api/aio.cc

index 36425f87c96c71b662178186b7eb815ebc0ee0b7..4354efb76a8588a18111147d8e3f9d909e162c64 100644 (file)
@@ -1,11 +1,15 @@
+#include "common/errno.h"
 #include "include/rados/librados.h"
 #include "test/rados-api/test.h"
 
 #include "gtest/gtest.h"
 #include <errno.h>
 #include <semaphore.h>
+#include <sstream>
 #include <string>
 
+using std::ostringstream;
+
 class AioTestData
 {
 public:
@@ -25,28 +29,34 @@ public:
     }
   }
 
-  int init()
+  std::string init()
   {
     int ret;
     if (sem_init(&m_sem, 0, 0)) {
       int err = errno;
       sem_destroy(&m_sem);
-      return err;
+      ostringstream oss;
+      oss << "sem_init failed: " << cpp_strerror(err);
+      return oss.str();
     }
     std::string m_pool_name = get_temp_pool_name();
     ret = create_one_pool(m_pool_name, &m_cluster);
     if (ret) {
       sem_destroy(&m_sem);
-      return ret;
+      ostringstream oss;
+      oss << "create_one_pool(" << m_pool_name << ") failed: error " << ret;
+      return oss.str();
     }
     ret = rados_ioctx_create(m_cluster, m_pool_name.c_str(), &m_ioctx);
     if (ret) {
       sem_destroy(&m_sem);
       destroy_one_pool(m_pool_name, &m_cluster);
-      return ret;
+      ostringstream oss;
+      oss << "rados_ioctx_create failed: error " << ret;
+      return oss.str();
     }
     m_init = true;
-    return 0;
+    return "";
   }
 
   sem_t m_sem;
@@ -87,7 +97,7 @@ void set_completion_safe(rados_completion_t cb, void *arg)
 TEST(LibRadosAio, SimpleWrite) {
   AioTestData test_data;
   rados_completion_t my_completion;
-  ASSERT_EQ(0, test_data.init());
+  ASSERT_EQ("", test_data.init());
   ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
              set_completion_complete, set_completion_safe, &my_completion));
   char buf[128];
@@ -98,3 +108,46 @@ TEST(LibRadosAio, SimpleWrite) {
   sem_wait(&test_data.m_sem);
   sem_wait(&test_data.m_sem);
 }
+
+TEST(LibRadosAio, WaitForSafe) {
+  AioTestData test_data;
+  rados_completion_t my_completion;
+  ASSERT_EQ("", test_data.init());
+  ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
+             set_completion_complete, set_completion_safe, &my_completion));
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  ASSERT_EQ(0, rados_aio_write(test_data.m_ioctx, "foo",
+                              my_completion, buf, sizeof(buf), 0));
+  TestAlarm alarm;
+  ASSERT_EQ(0, rados_aio_wait_for_safe(my_completion));
+}
+
+TEST(LibRadosAio, RoundTrip) {
+  AioTestData test_data;
+  rados_completion_t my_completion;
+  ASSERT_EQ("", test_data.init());
+  ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
+             set_completion_complete, set_completion_safe, &my_completion));
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  ASSERT_EQ(0, rados_aio_write(test_data.m_ioctx, "foo",
+                              my_completion, buf, sizeof(buf), 0));
+  {
+    TestAlarm alarm;
+    sem_wait(&test_data.m_sem);
+    sem_wait(&test_data.m_sem);
+  }
+  char buf2[128];
+  memset(buf2, 0, sizeof(buf2));
+  rados_completion_t my_completion2;
+  ASSERT_EQ(0, rados_aio_create_completion((void*)&test_data,
+             set_completion_complete, set_completion_safe, &my_completion2));
+  ASSERT_EQ(0, rados_aio_read(test_data.m_ioctx, "foo",
+                             my_completion2, buf2, sizeof(buf2), 0));
+  {
+    TestAlarm alarm;
+    ASSERT_EQ(0, rados_aio_wait_for_complete(my_completion2));
+  }
+  ASSERT_EQ(0, memcmp(buf, buf2, sizeof(buf)));
+}