From: Ved-vampir Date: Tue, 10 Nov 2015 15:47:18 +0000 (+0300) Subject: Compressor: compressor plugins unit tests X-Git-Tag: v10.0.3~37^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=300c2f773b0cbd9eaf010994c68942a4bcf2885f;p=ceph.git Compressor: compressor plugins unit tests Signed-off-by: Alyona Kiseleva --- diff --git a/ceph.spec.in b/ceph.spec.in index 761c34d14741..b2175bd643f6 100644 --- a/ceph.spec.in +++ b/ceph.spec.in @@ -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* diff --git a/qa/workunits/ceph-helpers.sh b/qa/workunits/ceph-helpers.sh index effd3231ffd9..bb795d142949 100755 --- a/qa/workunits/ceph-helpers.sh +++ b/qa/workunits/ceph-helpers.sh @@ -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" diff --git a/src/test/Makefile.am b/src/test/Makefile.am index 1fb0a1a71ebf..a9d3dbdf5c12 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -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 diff --git a/src/test/ceph-disk.sh b/src/test/ceph-disk.sh index be466faeb987..6b635275212c 100755 --- a/src/test/ceph-disk.sh +++ b/src/test/ceph-disk.sh @@ -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 index 000000000000..f5a8f4e536ef --- /dev/null +++ b/src/test/compressor/Makefile.am @@ -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 index 000000000000..3a96f8807d33 --- /dev/null +++ b/src/test/compressor/compressor_example.h @@ -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 + * + * + * 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 +#include +#include +#include + +#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 index 000000000000..96914ee58dd5 --- /dev/null +++ b/src/test/compressor/compressor_plugin_example.cc @@ -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 + * + * 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 + +#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 index 000000000000..6d8153259f17 --- /dev/null +++ b/src/test/compressor/test_compression_plugin.cc @@ -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 + * + * 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 +#include +#include +#include +#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(reg->get_with_load("compressor", "invalid")); + EXPECT_FALSE(factory); + factory = dynamic_cast(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 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 index 000000000000..495e641e09e6 --- /dev/null +++ b/src/test/compressor/test_compression_plugin_snappy.cc @@ -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 + * + * 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 +#include +#include +#include +#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 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 index 000000000000..69b0ebfaeda4 --- /dev/null +++ b/src/test/compressor/test_compression_snappy.cc @@ -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 + * + * 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 +#include +#include +#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 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: + */ diff --git a/src/test/mon/mkfs.sh b/src/test/mon/mkfs.sh index 57a030197db9..f165fc6a81ec 100755 --- a/src/test/mon/mkfs.sh +++ b/src/test/mon/mkfs.sh @@ -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