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 ...@@ -13,11 +13,13 @@ aclocal.m4
autom4te.cache autom4te.cache
build-aux build-aux
libtool libtool
folly/test/gtest-1.* folly/test/gtest
folly/folly-config.h folly/folly-config.h
folly/test/*_benchmark folly/**/test/*_benchmark
folly/test/*_test folly/**/test/*.log
folly/test/*_test_using_jemalloc folly/**/test/*_test
folly/**/test/*_test_using_jemalloc
folly/**/test/*.trs
folly/config.* folly/config.*
folly/configure folly/configure
folly/libfolly.pc folly/libfolly.pc
......
if FOLLY_TESTMAIN if FOLLY_TESTMAIN
SUBDIRS = . experimental init test SUBDIRS = . experimental init test io/test experimental/io/test
else else
SUBDIRS = . test SUBDIRS = . experimental test io/test experimental/io/test
endif endif
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
......
...@@ -610,10 +610,12 @@ FB_FILTER_PKG_LIBS([$AM_LDFLAGS $LIBS]) ...@@ -610,10 +610,12 @@ FB_FILTER_PKG_LIBS([$AM_LDFLAGS $LIBS])
# Output # Output
AC_CONFIG_FILES([Makefile AC_CONFIG_FILES([Makefile
io/test/Makefile
libfolly.pc libfolly.pc
test/Makefile test/Makefile
test/function_benchmark/Makefile test/function_benchmark/Makefile
experimental/Makefile experimental/Makefile
experimental/io/test/Makefile
experimental/symbolizer/Makefile experimental/symbolizer/Makefile
init/Makefile]) init/Makefile])
AC_OUTPUT AC_OUTPUT
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
TESTS = iobuf_test \ CPPFLAGS = -I$(top_srcdir)/test/gtest/googletest/include
iobuf_cursor_test ldadd = $(top_builddir)/test/libfollytestmain.la
check_PROGRAMS = $(TESTS) check_PROGRAMS = \
fs_util_test
iobuf_test_SOURCES = IOBufTest.cpp TESTS = $(check_PROGRAMS)
iobuf_test_LDADD = $(top_builddir)/libfollyio.la
iobuf_cursor_test_SOURCES = IOBufCursorTest.cpp fs_util_test_SOURCES = FsUtilTest.cpp
iobuf_cursor_test_LDADD = $(top_builddir)/libfollyio.la $(top_builddir)/libfollybenchmark.la fs_util_test_LDADD = $(ldadd)
...@@ -1190,7 +1190,7 @@ std::unique_ptr<IOBuf> ZSTDCodec::doUncompress( ...@@ -1190,7 +1190,7 @@ std::unique_ptr<IOBuf> ZSTDCodec::doUncompress(
} // namespace } // namespace
typedef std::unique_ptr<Codec> (*CodecFactory)(int, CodecType); typedef std::unique_ptr<Codec> (*CodecFactory)(int, CodecType);
static CodecFactory static constexpr CodecFactory
codecFactories[static_cast<size_t>(CodecType::NUM_CODEC_TYPES)] = { codecFactories[static_cast<size_t>(CodecType::NUM_CODEC_TYPES)] = {
nullptr, // USER_DEFINED nullptr, // USER_DEFINED
NoCompressionCodec::create, NoCompressionCodec::create,
......
...@@ -120,17 +120,53 @@ constexpr size_t dataSizeLog2 = 27; // 128MiB ...@@ -120,17 +120,53 @@ constexpr size_t dataSizeLog2 = 27; // 128MiB
RandomDataHolder randomDataHolder(dataSizeLog2); RandomDataHolder randomDataHolder(dataSizeLog2);
ConstantDataHolder constantDataHolder(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) { TEST(CompressionTestNeedsUncompressedLength, Simple) {
EXPECT_FALSE(getCodec(CodecType::NO_COMPRESSION)->needsUncompressedLength()); static const struct { CodecType type; bool needsUncompressedLength; }
EXPECT_TRUE(getCodec(CodecType::LZ4)->needsUncompressedLength()); expectations[] = {
EXPECT_FALSE(getCodec(CodecType::SNAPPY)->needsUncompressedLength()); { CodecType::NO_COMPRESSION, false },
EXPECT_FALSE(getCodec(CodecType::ZLIB)->needsUncompressedLength()); { CodecType::LZ4, true },
EXPECT_FALSE(getCodec(CodecType::LZ4_VARINT_SIZE)->needsUncompressedLength()); { CodecType::SNAPPY, false },
EXPECT_TRUE(getCodec(CodecType::LZMA2)->needsUncompressedLength()); { CodecType::ZLIB, false },
EXPECT_FALSE(getCodec(CodecType::LZMA2_VARINT_SIZE) { CodecType::LZ4_VARINT_SIZE, false },
->needsUncompressedLength()); { CodecType::LZMA2, true },
EXPECT_FALSE(getCodec(CodecType::ZSTD)->needsUncompressedLength()); { CodecType::LZMA2_VARINT_SIZE, false },
EXPECT_FALSE(getCodec(CodecType::GZIP)->needsUncompressedLength()); { 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 class CompressionTest
...@@ -236,16 +272,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -236,16 +272,7 @@ INSTANTIATE_TEST_CASE_P(
testing::Combine( testing::Combine(
testing::Values(0, 1, 12, 22, 25, 27), testing::Values(0, 1, 12, 22, 25, 27),
testing::Values(1, 2, 3, 8, 65), testing::Values(1, 2, 3, 8, 65),
testing::Values( testing::ValuesIn(availableCodecs())));
CodecType::NO_COMPRESSION,
CodecType::LZ4,
CodecType::SNAPPY,
CodecType::ZLIB,
CodecType::LZ4_VARINT_SIZE,
CodecType::LZMA2,
CodecType::LZMA2_VARINT_SIZE,
CodecType::ZSTD,
CodecType::GZIP)));
class CompressionVarintTest class CompressionVarintTest
: public testing::TestWithParam<std::tr1::tuple<int, CodecType>> { : public testing::TestWithParam<std::tr1::tuple<int, CodecType>> {
...@@ -301,9 +328,10 @@ INSTANTIATE_TEST_CASE_P( ...@@ -301,9 +328,10 @@ INSTANTIATE_TEST_CASE_P(
CompressionVarintTest, CompressionVarintTest,
testing::Combine( testing::Combine(
testing::Values(0, 1, 12, 22, 25, 27), testing::Values(0, 1, 12, 22, 25, 27),
testing::Values( testing::ValuesIn(supportedCodecs({
CodecType::LZ4_VARINT_SIZE, CodecType::LZ4_VARINT_SIZE,
CodecType::LZMA2_VARINT_SIZE))); CodecType::LZMA2_VARINT_SIZE,
}))));
class CompressionCorruptionTest : public testing::TestWithParam<CodecType> { class CompressionCorruptionTest : public testing::TestWithParam<CodecType> {
protected: protected:
...@@ -357,11 +385,13 @@ TEST_P(CompressionCorruptionTest, ConstantData) { ...@@ -357,11 +385,13 @@ TEST_P(CompressionCorruptionTest, ConstantData) {
INSTANTIATE_TEST_CASE_P( INSTANTIATE_TEST_CASE_P(
CompressionCorruptionTest, CompressionCorruptionTest,
CompressionCorruptionTest, CompressionCorruptionTest,
testing::Values( testing::ValuesIn(
// NO_COMPRESSION can't detect corruption // NO_COMPRESSION can't detect corruption
// LZ4 can't detect corruption reliably (sigh) // LZ4 can't detect corruption reliably (sigh)
CodecType::SNAPPY, supportedCodecs({
CodecType::ZLIB)); CodecType::SNAPPY,
CodecType::ZLIB,
})));
}}} // namespaces }}} // 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