]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test: add test for seastar denc 22454/head
authorKefu Chai <kchai@redhat.com>
Tue, 16 Jan 2018 11:20:29 +0000 (19:20 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 8 Jun 2018 12:58:15 +0000 (20:58 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/test/crimson/CMakeLists.txt
src/test/crimson/test_denc.cc [new file with mode: 0644]

index b10ed9c245a2503de186c88cfb5907d2bc0d6b8e..285e05c78f99331afdae21860fd14195fdc14b1c 100644 (file)
@@ -4,3 +4,10 @@ set(test_buffer_srcs
 add_executable(unittest_seastar_buffer ${test_buffer_srcs})
 add_ceph_unittest(unittest_seastar_buffer)
 target_link_libraries(unittest_seastar_buffer ceph-common Seastar::seastar)
+
+add_executable(unittest_seastar_denc
+  test_denc.cc
+  $<TARGET_OBJECTS:seastar_buffer_obj>
+  $<TARGET_OBJECTS:unit-main>)
+add_ceph_unittest(unittest_seastar_denc)
+target_link_libraries(unittest_seastar_denc ceph-common global Seastar::seastar)
diff --git a/src/test/crimson/test_denc.cc b/src/test/crimson/test_denc.cc
new file mode 100644 (file)
index 0000000..aa91c76
--- /dev/null
@@ -0,0 +1,53 @@
+#include <string>
+#include <core/temporary_buffer.hh>
+#include <gtest/gtest.h>
+#include "include/denc.h"
+#include "common/buffer_seastar.h"
+
+using temporary_buffer = seastar::temporary_buffer<char>;
+using buffer_iterator = seastar_buffer_iterator;
+using const_buffer_iterator = const_seastar_buffer_iterator;
+
+template<typename T>
+void test_denc(T v) {
+  // estimate
+  size_t s = 0;
+  denc(v, s);
+  ASSERT_NE(s, 0u);
+
+  // encode
+  temporary_buffer buf{s};
+  buffer_iterator enc{buf};
+  denc(v, enc);
+  size_t len = enc.get() - buf.begin();
+  ASSERT_LE(len, s);
+
+  // decode
+  T out;
+  temporary_buffer encoded = buf.share();
+  encoded.trim(len);
+  const_buffer_iterator dec{encoded};
+  denc(out, dec);
+  ASSERT_EQ(v, out);
+  ASSERT_EQ(dec.get(), enc.get());
+}
+
+TEST(denc, simple)
+{
+  test_denc((uint8_t)4);
+  test_denc((int8_t)-5);
+  test_denc((uint16_t)6);
+  test_denc((int16_t)-7);
+  test_denc((uint32_t)8);
+  test_denc((int32_t)-9);
+  test_denc((uint64_t)10);
+  test_denc((int64_t)-11);
+}
+
+TEST(denc, string)
+{
+  std::string a, b("hi"), c("multi\nline\n");
+  test_denc(a);
+  test_denc(b);
+  test_denc(c);
+}