Skip to content

Commit

Permalink
Re-enable io tests
Browse files Browse the repository at this point in the history
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 facebook#547 because the path to gtest appears in the new Makefile.am's `CPPFLAGS`.
Closes facebook#550

Reviewed By: yfeldblum

Differential Revision: D4631244

Pulled By: Orvid

fbshipit-source-id: 496b2c272e4f7293822f159776a02f7dd0c9e04d
  • Loading branch information
tedjp authored and facebook-github-bot committed Mar 23, 2017
1 parent d70b739 commit d91466d
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 42 deletions.
10 changes: 6 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions folly/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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
Expand Down
2 changes: 2 additions & 0 deletions folly/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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
14 changes: 7 additions & 7 deletions folly/experimental/io/test/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
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)
2 changes: 1 addition & 1 deletion folly/io/Compression.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
80 changes: 55 additions & 25 deletions folly/io/test/CompressionTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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>> {
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand Down
35 changes: 35 additions & 0 deletions folly/io/test/Makefile.am
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
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)
3 changes: 0 additions & 3 deletions folly/test/.gitignore

This file was deleted.

0 comments on commit d91466d

Please sign in to comment.