Commit d91466dc authored by Ted Percival's avatar Ted Percival Committed by Facebook Github Bot

Re-enable io tests

Summary:
Looks like some tests for the `io` directory were left behind when they were moved out of experimental. Re-enabled them in the new location, except for the compression test because it takes a lot longer. It's still built and can be executed manually.

Also added some preprocessor guards around compression codecs that might not be compiled in (and therefore fail during test SetUp).

Depends on #547 because the path to gtest appears in the new Makefile.am's `CPPFLAGS`.
Closes https://github.com/facebook/folly/pull/550

Reviewed By: yfeldblum

Differential Revision: D4631244

Pulled By: Orvid

fbshipit-source-id: 496b2c272e4f7293822f159776a02f7dd0c9e04d
parent d70b7399
......@@ -13,11 +13,13 @@ aclocal.m4
autom4te.cache
build-aux
libtool
folly/test/gtest-1.*
folly/test/gtest
folly/folly-config.h
folly/test/*_benchmark
folly/test/*_test
folly/test/*_test_using_jemalloc
folly/**/test/*_benchmark
folly/**/test/*.log
folly/**/test/*_test
folly/**/test/*_test_using_jemalloc
folly/**/test/*.trs
folly/config.*
folly/configure
folly/libfolly.pc
......
if FOLLY_TESTMAIN
SUBDIRS = . experimental init test
SUBDIRS = . experimental init test io/test experimental/io/test
else
SUBDIRS = . test
SUBDIRS = . experimental test io/test experimental/io/test
endif
ACLOCAL_AMFLAGS = -I m4
......
......@@ -610,10 +610,12 @@ FB_FILTER_PKG_LIBS([$AM_LDFLAGS $LIBS])
# Output
AC_CONFIG_FILES([Makefile
io/test/Makefile
libfolly.pc
test/Makefile
test/function_benchmark/Makefile
experimental/Makefile
experimental/io/test/Makefile
experimental/symbolizer/Makefile
init/Makefile])
AC_OUTPUT
ACLOCAL_AMFLAGS = -I m4
TESTS = iobuf_test \
iobuf_cursor_test
CPPFLAGS = -I$(top_srcdir)/test/gtest/googletest/include
ldadd = $(top_builddir)/test/libfollytestmain.la
check_PROGRAMS = $(TESTS)
check_PROGRAMS = \
fs_util_test
iobuf_test_SOURCES = IOBufTest.cpp
iobuf_test_LDADD = $(top_builddir)/libfollyio.la
TESTS = $(check_PROGRAMS)
iobuf_cursor_test_SOURCES = IOBufCursorTest.cpp
iobuf_cursor_test_LDADD = $(top_builddir)/libfollyio.la $(top_builddir)/libfollybenchmark.la
fs_util_test_SOURCES = FsUtilTest.cpp
fs_util_test_LDADD = $(ldadd)
......@@ -1190,7 +1190,7 @@ std::unique_ptr<IOBuf> ZSTDCodec::doUncompress(
} // namespace
typedef std::unique_ptr<Codec> (*CodecFactory)(int, CodecType);
static CodecFactory
static constexpr CodecFactory
codecFactories[static_cast<size_t>(CodecType::NUM_CODEC_TYPES)] = {
nullptr, // USER_DEFINED
NoCompressionCodec::create,
......
......@@ -120,17 +120,53 @@ constexpr size_t dataSizeLog2 = 27; // 128MiB
RandomDataHolder randomDataHolder(dataSizeLog2);
ConstantDataHolder constantDataHolder(dataSizeLog2);
// The intersection of the provided codecs & those that are compiled in.
static std::vector<CodecType> supportedCodecs(std::vector<CodecType> const& v) {
std::vector<CodecType> supported;
std::copy_if(
std::begin(v),
std::end(v),
std::back_inserter(supported),
hasCodec);
return supported;
}
// All compiled-in compression codecs.
static std::vector<CodecType> availableCodecs() {
std::vector<CodecType> codecs;
for (size_t i = 0; i < static_cast<size_t>(CodecType::NUM_CODEC_TYPES); ++i) {
auto type = static_cast<CodecType>(i);
if (hasCodec(type)) {
codecs.push_back(type);
}
}
return codecs;
}
TEST(CompressionTestNeedsUncompressedLength, Simple) {
EXPECT_FALSE(getCodec(CodecType::NO_COMPRESSION)->needsUncompressedLength());
EXPECT_TRUE(getCodec(CodecType::LZ4)->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::SNAPPY)->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::ZLIB)->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::LZ4_VARINT_SIZE)->needsUncompressedLength());
EXPECT_TRUE(getCodec(CodecType::LZMA2)->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::LZMA2_VARINT_SIZE)
->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::ZSTD)->needsUncompressedLength());
EXPECT_FALSE(getCodec(CodecType::GZIP)->needsUncompressedLength());
static const struct { CodecType type; bool needsUncompressedLength; }
expectations[] = {
{ CodecType::NO_COMPRESSION, false },
{ CodecType::LZ4, true },
{ CodecType::SNAPPY, false },
{ CodecType::ZLIB, false },
{ CodecType::LZ4_VARINT_SIZE, false },
{ CodecType::LZMA2, true },
{ CodecType::LZMA2_VARINT_SIZE, false },
{ CodecType::ZSTD, false },
{ CodecType::GZIP, false },
};
for (auto const& test : expectations) {
if (hasCodec(test.type)) {
EXPECT_EQ(getCodec(test.type)->needsUncompressedLength(),
test.needsUncompressedLength);
}
}
}
class CompressionTest
......@@ -236,16 +272,7 @@ INSTANTIATE_TEST_CASE_P(
testing::Combine(
testing::Values(0, 1, 12, 22, 25, 27),
testing::Values(1, 2, 3, 8, 65),
testing::Values(
CodecType::NO_COMPRESSION,
CodecType::LZ4,
CodecType::SNAPPY,
CodecType::ZLIB,
CodecType::LZ4_VARINT_SIZE,
CodecType::LZMA2,
CodecType::LZMA2_VARINT_SIZE,
CodecType::ZSTD,
CodecType::GZIP)));
testing::ValuesIn(availableCodecs())));
class CompressionVarintTest
: public testing::TestWithParam<std::tr1::tuple<int, CodecType>> {
......@@ -301,9 +328,10 @@ INSTANTIATE_TEST_CASE_P(
CompressionVarintTest,
testing::Combine(
testing::Values(0, 1, 12, 22, 25, 27),
testing::Values(
testing::ValuesIn(supportedCodecs({
CodecType::LZ4_VARINT_SIZE,
CodecType::LZMA2_VARINT_SIZE)));
CodecType::LZMA2_VARINT_SIZE,
}))));
class CompressionCorruptionTest : public testing::TestWithParam<CodecType> {
protected:
......@@ -357,11 +385,13 @@ TEST_P(CompressionCorruptionTest, ConstantData) {
INSTANTIATE_TEST_CASE_P(
CompressionCorruptionTest,
CompressionCorruptionTest,
testing::Values(
testing::ValuesIn(
// NO_COMPRESSION can't detect corruption
// LZ4 can't detect corruption reliably (sigh)
CodecType::SNAPPY,
CodecType::ZLIB));
supportedCodecs({
CodecType::SNAPPY,
CodecType::ZLIB,
})));
}}} // namespaces
......
ACLOCAL_AMFLAGS = -I m4
CPPFLAGS = -I$(top_srcdir)/test/gtest/googletest/include
ldadd = $(top_builddir)/test/libfollytestmain.la
# compression_test takes several minutes, so it's not run automatically.
TESTS = \
iobuf_test \
iobuf_cursor_test \
iobuf_queue_test \
record_io_test \
shutdown_socket_set_test
check_PROGRAMS = $(TESTS) \
compression_test
iobuf_test_SOURCES = IOBufTest.cpp
iobuf_test_LDADD = $(ldadd)
iobuf_cursor_test_SOURCES = IOBufCursorTest.cpp
iobuf_cursor_test_LDADD = $(ldadd)
compression_test_SOURCES = CompressionTest.cpp
compression_test_LDADD = $(top_builddir)/libfolly.la \
$(top_builddir)/test/libgtest.la \
$(top_builddir)/libfollybenchmark.la
iobuf_queue_test_SOURCES = IOBufQueueTest.cpp
iobuf_queue_test_LDADD = $(ldadd)
record_io_test_SOURCES = RecordIOTest.cpp
record_io_test_LDADD = $(ldadd)
shutdown_socket_set_test_SOURCES = ShutdownSocketSetTest.cpp
shutdown_socket_set_test_LDADD = $(ldadd)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment