From 5f83f933f1edb3e4e642384a74110d5afcb70e87 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 10 Sep 2020 07:38:37 +0000 Subject: Extend unit test to verify that encoding chosen matches expected. --- searchlib/src/tests/transactionlog/chunks_test.cpp | 20 +++++++++++++------- .../src/vespa/searchlib/transactionlog/ichunk.cpp | 5 +++++ .../src/vespa/searchlib/transactionlog/ichunk.h | 3 +++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/searchlib/src/tests/transactionlog/chunks_test.cpp b/searchlib/src/tests/transactionlog/chunks_test.cpp index fa5fe3c1006..8605fa2b4d6 100644 --- a/searchlib/src/tests/transactionlog/chunks_test.cpp +++ b/searchlib/src/tests/transactionlog/chunks_test.cpp @@ -14,7 +14,7 @@ using vespalib::compression::CompressionConfig; constexpr const char * TEXT = "abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz"; void -verifySerializationAndDeserialization(IChunk & org, size_t numEntries) { +verifySerializationAndDeserialization(IChunk & org, size_t numEntries, Encoding expected) { for (size_t i(0); i < numEntries; i++) { const char *start = TEXT + (i%20); Packet::Entry entry(i, i%8, ConstBufferRef(start, strlen(start))); @@ -23,6 +23,7 @@ verifySerializationAndDeserialization(IChunk & org, size_t numEntries) { nbostream os; Encoding encoding = org.encode(os); + EXPECT_EQUAL(expected, encoding); auto deserialized = IChunk::create(encoding.getRaw()); deserialized->decode(os); EXPECT_TRUE(os.empty()); @@ -31,36 +32,41 @@ verifySerializationAndDeserialization(IChunk & org, size_t numEntries) { TEST("test serialization and deserialization of current default uncompressed xxh64") { XXH64NoneChunk chunk; - verifySerializationAndDeserialization(chunk, 1); + verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none)); } TEST("test serialization and deserialization of legacy uncompressed ccittcrc32") { CCITTCRC32NoneChunk chunk; - verifySerializationAndDeserialization(chunk, 1); + verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::ccitt_crc32, Encoding::Compression::none)); } TEST("test serialization and deserialization of future multientry xxh64 lz4 compression") { for (size_t level(1); level < 9; level++) { XXH64CompressedChunk chunk(CompressionConfig::Type::LZ4, level); - verifySerializationAndDeserialization(chunk, 100); + verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::lz4)); } } TEST("test serialization and deserialization of future multientry xxh64 zstd compression") { for (size_t level(1); level < 9; level++) { XXH64CompressedChunk chunk(CompressionConfig::Type::ZSTD, level); - verifySerializationAndDeserialization(chunk, 100); + verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::zstd)); } } TEST("test serialization and deserialization of future multientry xxh64 no compression") { XXH64CompressedChunk chunk(CompressionConfig::Type::NONE_MULTI, 1); - verifySerializationAndDeserialization(chunk, 100); + verifySerializationAndDeserialization(chunk, 100, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi)); } TEST("test serialization and deserialization of uncompressable lz4") { XXH64CompressedChunk chunk(CompressionConfig::Type::LZ4, 1); - verifySerializationAndDeserialization(chunk, 1); + verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi)); +} + +TEST("test serialization and deserialization of uncompressable zstd") { + XXH64CompressedChunk chunk(CompressionConfig::Type::ZSTD, 1); + verifySerializationAndDeserialization(chunk, 1, Encoding(Encoding::Crc::xxh64, Encoding::Compression::none_multi)); } TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp index f03bdbe3f52..9a57980638d 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.cpp @@ -6,6 +6,7 @@ #include #include #include +#include using std::make_unique; using vespalib::make_string_short::fmt; @@ -110,4 +111,8 @@ Encoding::calcCrc(Crc version, const void * buf, size_t sz) } } +std::ostream & +operator << (std::ostream & os, Encoding e) { + return os << "crc=" << e.getCrc() << " compression=" << e.getCompression(); +} } diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h index 5e44815cb1b..aa2a2085aab 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h +++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h @@ -28,10 +28,13 @@ public: Compression getCompression() const { return Compression((_raw >> 4) & 0xf); } static int32_t calcCrc(Crc version, const void * buf, size_t sz); uint8_t getRaw() const { return _raw; } + bool operator == (Encoding rhs) const { return _raw == rhs._raw; } private: uint8_t _raw; }; +std::ostream & operator << (std::ostream & os, Encoding e); + /** * Interface for different chunk formats. * Format specifies both crc type, and compression type. -- cgit v1.2.3