]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Compressor: compressor plugins unit tests
authorVed-vampir <akiselyova@mirantis.com>
Tue, 10 Nov 2015 15:47:18 +0000 (18:47 +0300)
committerSage Weil <sage@redhat.com>
Fri, 15 Jan 2016 00:04:19 +0000 (19:04 -0500)
Signed-off-by: Alyona Kiseleva <akiselyova@mirantis.com>
ceph.spec.in
qa/workunits/ceph-helpers.sh
src/test/Makefile.am
src/test/ceph-disk.sh
src/test/compressor/Makefile.am [new file with mode: 0644]
src/test/compressor/compressor_example.h [new file with mode: 0644]
src/test/compressor/compressor_plugin_example.cc [new file with mode: 0644]
src/test/compressor/test_compression_plugin.cc [new file with mode: 0644]
src/test/compressor/test_compression_plugin_snappy.cc [new file with mode: 0644]
src/test/compressor/test_compression_snappy.cc [new file with mode: 0644]
src/test/mon/mkfs.sh

index 761c34d14741f399890f39e068e2f17b766429a8..b2175bd643f6768024481b6f8438452bfcb4a6e5 100644 (file)
@@ -845,6 +845,8 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/rados-classes/libcls_journal.so*
 %dir %{_libdir}/ceph/erasure-code
 %{_libdir}/ceph/erasure-code/libec_*.so*
+%dir %{_libdir}/ceph/compressor
+%{_libdir}/ceph/compressor/libceph_*.so*
 %if 0%{?_with_lttng}
 %{_libdir}/libos_tp.so*
 %{_libdir}/libosd_tp.so*
index effd3231ffd9fec77605446eee3d2e13a70dc5b2..bb795d14294924cba681854bc3466b0b5c52315c 100755 (executable)
@@ -310,6 +310,7 @@ function run_mon() {
         --paxos-propose-interval=0.1 \
         --osd-crush-chooseleaf-type=0 \
         --erasure-code-dir=.libs \
+        --plugin-dir=.libs \
         --debug-mon 20 \
         --debug-ms 20 \
         --debug-paxos 20 \
@@ -542,6 +543,7 @@ function activate_osd() {
     ceph_args+=" --osd-data=$osd_data"
     ceph_args+=" --chdir="
     ceph_args+=" --erasure-code-dir=.libs"
+    ceph_args+=" --plugin-dir=.libs"
     ceph_args+=" --osd-class-dir=.libs"
     ceph_args+=" --run-dir=$dir"
     ceph_args+=" --debug-osd=20"
index 1fb0a1a71ebf1714d6df30f32f816135791a4554..a9d3dbdf5c126fdc8308b45708396949317caac4 100644 (file)
@@ -1,5 +1,6 @@
 include test/erasure-code/Makefile.am
 include test/messenger/Makefile.am
+include test/compressor/Makefile.am
 
 if ENABLE_CLIENT
 include test/Makefile-client.am
@@ -425,7 +426,7 @@ check_PROGRAMS += unittest_subprocess
 
 unittest_async_compressor_SOURCES = test/common/test_async_compressor.cc
 unittest_async_compressor_CXXFLAGS = $(UNITTEST_CXXFLAGS)
-unittest_async_compressor_LDADD = $(UNITTEST_LDADD) $(CEPH_GLOBAL) $(LIBCOMPRESSOR)
+unittest_async_compressor_LDADD = $(UNITTEST_LDADD) $(CEPH_GLOBAL) $(LIBCOMPRESSOR) $(LIBCOMMON)
 check_PROGRAMS += unittest_async_compressor
 
 check_SCRIPTS += test/pybind/test_ceph_argparse.py
index be466faeb98739e4409e2183b9725df2f01a9e36..6b635275212c500dc087da22b4896d427f851a16 100755 (executable)
@@ -49,6 +49,7 @@ CEPH_ARGS+=" --log-file=$DIR/\$name.log"
 CEPH_ARGS+=" --pid-file=$DIR/\$name.pidfile"
 if test -d .libs ; then
     CEPH_ARGS+=" --erasure-code-dir=.libs"
+    CEPH_ARGS+=" --compression-dir=.libs"
 fi
 CEPH_ARGS+=" --auth-supported=none"
 CEPH_ARGS+=" --osd-journal-size=100"
diff --git a/src/test/compressor/Makefile.am b/src/test/compressor/Makefile.am
new file mode 100644 (file)
index 0000000..f5a8f4e
--- /dev/null
@@ -0,0 +1,49 @@
+if ENABLE_SERVER
+if WITH_OSD
+
+
+libceph_example_la_SOURCES = \
+       compressor/Compressor.cc \
+       test/compressor/compressor_plugin_example.cc
+noinst_HEADERS += test/compressor/compressor_example.h
+test/compressor/compressor_plugin_example.cc: ./ceph_ver.h
+libceph_example_la_CFLAGS = ${AM_CFLAGS}
+libceph_example_la_CXXFLAGS= ${AM_CXXFLAGS}
+libceph_example_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+libceph_example_la_LDFLAGS = ${AM_LDFLAGS} -export-symbols-regex '.*__compression_.*'
+compressorlib_LTLIBRARIES += libceph_example.la
+
+unittest_compression_plugin_SOURCES = \
+       compressor/Compressor.cc \
+       test/compressor/test_compression_plugin.cc 
+unittest_compression_plugin_CXXFLAGS = $(UNITTEST_CXXFLAGS)
+unittest_compression_plugin_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL)
+if LINUX
+unittest_compression_plugin_LDADD += -ldl
+endif
+check_TESTPROGRAMS += unittest_compression_plugin
+
+unittest_compression_snappy_SOURCES = \
+       test/compressor/test_compression_snappy.cc \
+       ${snappy_sources}
+unittest_compression_snappy_CXXFLAGS = $(UNITTEST_CXXFLAGS)
+unittest_compression_snappy_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL)
+unittest_compression_snappy_LDFLAGS = -lsnappy
+if LINUX
+unittest_compression_snappy_LDADD += -ldl
+endif
+check_TESTPROGRAMS += unittest_compression_snappy
+
+unittest_compression_plugin_snappy_SOURCES = \
+       test/compressor/test_compression_plugin_snappy.cc \
+       ${snappy_sources}
+unittest_compression_plugin_snappy_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS}
+unittest_compression_plugin_snappy_LDADD = $(LIBOSD) $(LIBCOMMON) $(UNITTEST_LDADD) $(CEPH_GLOBAL) $(LIBCOMPRESSOR)
+unittest_compression_plugin_snappy_LDFLAGS = -lsnappy
+if LINUX
+unittest_compression_plugin_snappy_LDADD += -ldl
+endif
+check_TESTPROGRAMS += unittest_compression_plugin_snappy
+
+endif # WITH_OSD
+endif # ENABLE_SERVER
diff --git a/src/test/compressor/compressor_example.h b/src/test/compressor/compressor_example.h
new file mode 100644 (file)
index 0000000..3a96f88
--- /dev/null
@@ -0,0 +1,53 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph distributed storage system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ * 
+ */
+
+#ifndef CEPH_COMPRESSOR_EXAMPLE_H
+#define CEPH_COMPRESSOR_EXAMPLE_H
+
+#include <unistd.h>
+#include <errno.h>
+#include <algorithm>
+#include <sstream>
+
+#include "crush/CrushWrapper.h"
+#include "osd/osd_types.h"
+#include "compressor/Compressor.h"
+
+class CompressorExample : public Compressor {
+public:
+  virtual ~CompressorExample() {}
+
+  virtual int compress(bufferlist &in, bufferlist &out)
+  {
+    out = in;
+    return 0;
+  }
+
+  virtual int decompress(bufferlist &in, bufferlist &out)
+  {
+    out = in;
+    return 0;
+  }
+
+  virtual const char* get_method_name()
+  {
+    return "example";
+  }
+
+};
+
+#endif
diff --git a/src/test/compressor/compressor_plugin_example.cc b/src/test/compressor/compressor_plugin_example.cc
new file mode 100644 (file)
index 0000000..96914ee
--- /dev/null
@@ -0,0 +1,57 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph distributed storage system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ * 
+ */
+
+#include <unistd.h>
+
+#include "ceph_ver.h"
+#include "compressor/CompressionPlugin.h"
+#include "compressor_example.h"
+
+class CompressorPluginExample : public CompressionPlugin {
+public:
+
+  CompressorPluginExample(CephContext* cct) : CompressionPlugin(cct)
+  {}
+
+  virtual int factory(CompressorRef *cs,
+                     ostream *ss)
+  {
+    if (compressor == 0) {
+      CompressorExample *interface = new CompressorExample();
+      compressor = CompressorRef(interface);
+    }
+    *cs = compressor;
+    return 0;
+  }
+};
+
+// -----------------------------------------------------------------------------
+
+const char *__ceph_plugin_version()
+{
+  return CEPH_GIT_NICE_VER;
+}
+
+// -----------------------------------------------------------------------------
+
+int __ceph_plugin_init(CephContext *cct,
+                       const std::string& type,
+                       const std::string& name)
+{
+  PluginRegistry *instance = cct->get_plugin_registry();
+
+  return instance->add(type, name, new CompressorPluginExample(cct));
+}
diff --git a/src/test/compressor/test_compression_plugin.cc b/src/test/compressor/test_compression_plugin.cc
new file mode 100644 (file)
index 0000000..6d81532
--- /dev/null
@@ -0,0 +1,71 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph distributed storage system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ * 
+ */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <gtest/gtest.h>
+#include "global/global_init.h"
+#include "compressor/CompressionPlugin.h"
+#include "common/ceph_argparse.h"
+#include "global/global_context.h"
+#include "common/config.h"
+
+TEST(CompressionPlugin, all)
+{
+  string directory(".libs");
+  CompressorRef compressor;
+  PluginRegistry *reg = g_ceph_context->get_plugin_registry();
+  EXPECT_TRUE(reg);
+  CompressionPlugin *factory = dynamic_cast<CompressionPlugin*>(reg->get_with_load("compressor", "invalid"));
+  EXPECT_FALSE(factory);
+  factory = dynamic_cast<CompressionPlugin*>(reg->get_with_load("compressor", "example"));
+  EXPECT_TRUE(factory);
+  stringstream ss;
+  EXPECT_EQ(0, factory->factory(&compressor, &ss));
+  EXPECT_TRUE(compressor.get());
+  {
+    Mutex::Locker l(reg->lock);
+    EXPECT_EQ(-ENOENT, reg->remove("compressor", "does not exist"));
+    EXPECT_EQ(0, reg->remove("compressor", "example"));
+    EXPECT_EQ(0, reg->load("compressor", "example"));
+  }
+}
+
+int main(int argc, char **argv) {
+  vector<const char*> args;
+  argv_to_vec(argc, (const char **)argv, args);
+
+  global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+  common_init_finish(g_ceph_context);
+
+  system("mkdir -p .libs/compressor");
+  system("cp .libs/libceph_example.so* .libs/compressor/");
+  g_conf->set_val("plugin_dir", ".libs", false, false);
+
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
+
+/*
+ * Local Variables:
+ * compile-command: "cd ../.. ; make -j4 && 
+ *   make unittest_compression_plugin && 
+ *   valgrind --tool=memcheck \
+ *      ./unittest_compression_plugin \
+ *      --gtest_filter=*.* --log-to-stderr=true --debug-osd=20"
+ * End:
+ */
diff --git a/src/test/compressor/test_compression_plugin_snappy.cc b/src/test/compressor/test_compression_plugin_snappy.cc
new file mode 100644 (file)
index 0000000..495e641
--- /dev/null
@@ -0,0 +1,58 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph distributed storage system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ * 
+ */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <gtest/gtest.h>
+#include "global/global_init.h"
+#include "compressor/Compressor.h"
+#include "common/ceph_argparse.h"
+#include "global/global_context.h"
+#include "common/config.h"
+
+TEST(CompressionPluginSnappy, factory)
+{
+  CompressorRef compressor = Compressor::create(g_ceph_context, "snappy");
+  cout << compressor;
+  EXPECT_TRUE(compressor.get());
+}
+
+int main(int argc, char **argv) {
+  vector<const char*> args;
+  argv_to_vec(argc, (const char **)argv, args);
+
+  global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+  common_init_finish(g_ceph_context);
+
+  system("mkdir -p .libs/compressor");
+  system("cp .libs/libceph_snappy.so* .libs/compressor/");
+
+  g_conf->set_val("plugin_dir", ".libs", false, false);
+
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
+
+/*
+ * Local Variables:
+ * compile-command: "cd ../.. ; make -j4 && 
+ *   make unittest_compression_plugin_snappy && 
+ *   valgrind --tool=memcheck \
+ *      ./unittest_compression_plugin_snappy \
+ *      --gtest_filter=*.* --log-to-stderr=true --debug-osd=20"
+ * End:
+ */
diff --git a/src/test/compressor/test_compression_snappy.cc b/src/test/compressor/test_compression_snappy.cc
new file mode 100644 (file)
index 0000000..69b0ebf
--- /dev/null
@@ -0,0 +1,62 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph distributed storage system
+ *
+ * Copyright (C) 2015 Mirantis, Inc.
+ *
+ * Author: Alyona Kiseleva <akiselyova@mirantis.com>
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ * 
+ */
+
+#include <errno.h>
+#include <string.h>
+#include <gtest/gtest.h>
+#include "global/global_init.h"
+#include "compressor/snappy/SnappyCompressor.h"
+#include "common/ceph_argparse.h"
+#include "global/global_context.h"
+#include "common/config.h"
+
+TEST(SnappyCompressor, compress_decompress)
+{
+  SnappyCompressor sp;
+  EXPECT_EQ(sp.get_method_name(), "snappy");
+  char* test = "This is test text";
+  int len = strlen(test);
+  bufferlist in, out;
+  in.append(test, len);
+  int res = sp.compress(in, out);
+  EXPECT_EQ(res, 0);
+  bufferlist after;
+  res = sp.decompress(out, after);
+  EXPECT_EQ(res, 0);
+}
+
+int main(int argc, char **argv) {
+  vector<const char*> args;
+  argv_to_vec(argc, (const char **)argv, args);
+
+  global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
+  common_init_finish(g_ceph_context);
+
+  g_conf->set_val("compression_dir", ".libs", false, false);
+
+  ::testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
+
+/*
+ * Local Variables:
+ * compile-command: "cd ../.. ; make -j4 && 
+ *   make unittest_compression_snappy && 
+ *   valgrind --tool=memcheck \
+ *      ./unittest_compression_snappy \
+ *      --gtest_filter=*.* --log-to-stderr=true --debug-osd=20"
+ * End:
+ */
index 57a030197db959b931d5ffaca9b5cebb1adc61db..f165fc6a81ec992e4d9531d3512d3788bf93df82 100755 (executable)
@@ -43,6 +43,7 @@ function mon_mkfs() {
         --id $MON_ID \
         --fsid $fsid \
         --erasure-code-dir=.libs \
+        --compression-dir=.libs \
         --mkfs \
         --mon-data=$MON_DIR \
         --mon-initial-members=$MON_ID \
@@ -57,6 +58,7 @@ function mon_run() {
         --mon-osd-full-ratio=.99 \
         --mon-data-avail-crit=1 \
         --erasure-code-dir=.libs \
+        --compression-dir=.libs \
         --mon-data=$MON_DIR \
         --log-file=$MON_DIR/log \
         --mon-cluster-log-file=$MON_DIR/log \
@@ -84,6 +86,7 @@ function auth_none() {
         --mon-osd-full-ratio=.99 \
         --mon-data-avail-crit=1 \
         --erasure-code-dir=.libs \
+        --compression-dir=.libs \
         --mon-data=$MON_DIR \
         --extract-monmap $MON_DIR/monmap
 
@@ -151,6 +154,7 @@ function makedir() {
         --mon-osd-full-ratio=.99 \
         --mon-data-avail-crit=1 \
         --erasure-code-dir=.libs \
+        --compression-dir=.libs \
         --mkfs \
         --mon-data=$toodeep 2>&1 | tee $DIR/makedir.log
     grep 'toodeep.*No such file' $DIR/makedir.log > /dev/null