add testcases and delete unnecessary test code for snappy
This commit is contained in:
parent
d89ffb3518
commit
29a0534e43
278
add-testcases-and-delete-unnecessary-test-code-for-snappy.patch
Normal file
278
add-testcases-and-delete-unnecessary-test-code-for-snappy.patch
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
From 72c63614b10be25917c60741b0c58a0387978373 Mon Sep 17 00:00:00 2001
|
||||||
|
From: hanxinke <hanxinke@huawei.com>
|
||||||
|
Date: Thu, 2 Dec 2021 06:54:26 -0500
|
||||||
|
Subject: [PATCH] add testcases and delete unnecessary test code for snappy
|
||||||
|
|
||||||
|
Signed-off-by: hanxinke <hanxinke@huawei.com>
|
||||||
|
---
|
||||||
|
snappy-test.h | 14 +++++
|
||||||
|
snappy_unittest.cc | 131 ++++++++++++++++++++++++++++++++++++++++-----
|
||||||
|
2 files changed, 132 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/snappy-test.h b/snappy-test.h
|
||||||
|
index c8b7d38..4c6ab02 100644
|
||||||
|
--- a/snappy-test.h
|
||||||
|
+++ b/snappy-test.h
|
||||||
|
@@ -170,6 +170,7 @@ namespace snappy {
|
||||||
|
using TypeParam = std::string;
|
||||||
|
|
||||||
|
void Test_CorruptedTest_VerifyCorrupted();
|
||||||
|
+void Test_CorryptedTest_VerifyUncompressFailed();
|
||||||
|
void Test_Snappy_SimpleTests();
|
||||||
|
void Test_Snappy_MaxBlowup();
|
||||||
|
void Test_Snappy_RandomData();
|
||||||
|
@@ -180,6 +181,11 @@ void Test_SnappyCorruption_OverflowingVarint();
|
||||||
|
void Test_Snappy_ReadPastEndOfBuffer();
|
||||||
|
void Test_Snappy_FindMatchLength();
|
||||||
|
void Test_Snappy_FindMatchLengthRandom();
|
||||||
|
+void Test_Snappy_SnappyCompress();
|
||||||
|
+void Test_Snappy_SnappyUncompress();
|
||||||
|
+void Test_Snappy_SnappyValidateCompress();
|
||||||
|
+void Test_Snappy_SnappyValidCompressed();
|
||||||
|
+void Test_Snappy_SnappySlowAppend();
|
||||||
|
|
||||||
|
std::string ReadTestDataFile(const std::string& base, size_t size_limit);
|
||||||
|
|
||||||
|
@@ -262,6 +268,7 @@ class Benchmark {
|
||||||
|
(new Benchmark(#benchmark_name, benchmark_name))
|
||||||
|
|
||||||
|
extern Benchmark* Benchmark_BM_UFlat;
|
||||||
|
+extern Benchmark* Benchmark_BM_UFlatSink;
|
||||||
|
extern Benchmark* Benchmark_BM_UIOVec;
|
||||||
|
extern Benchmark* Benchmark_BM_UValidate;
|
||||||
|
extern Benchmark* Benchmark_BM_ZFlat;
|
||||||
|
@@ -415,6 +422,7 @@ static inline void RunSpecifiedBenchmarks() {
|
||||||
|
fprintf(stderr, "---------------------------------------------------\n");
|
||||||
|
|
||||||
|
snappy::Benchmark_BM_UFlat->Run();
|
||||||
|
+ snappy::Benchmark_BM_UFlatSink->Run();
|
||||||
|
snappy::Benchmark_BM_UIOVec->Run();
|
||||||
|
snappy::Benchmark_BM_UValidate->Run();
|
||||||
|
snappy::Benchmark_BM_ZFlat->Run();
|
||||||
|
@@ -429,6 +437,7 @@ static inline void RunSpecifiedBenchmarks() {
|
||||||
|
static inline int RUN_ALL_TESTS() {
|
||||||
|
fprintf(stderr, "Running correctness tests.\n");
|
||||||
|
snappy::Test_CorruptedTest_VerifyCorrupted();
|
||||||
|
+ snappy::Test_CorryptedTest_VerifyUncompressFailed();
|
||||||
|
snappy::Test_Snappy_SimpleTests();
|
||||||
|
snappy::Test_Snappy_MaxBlowup();
|
||||||
|
snappy::Test_Snappy_RandomData();
|
||||||
|
@@ -439,6 +448,11 @@ static inline int RUN_ALL_TESTS() {
|
||||||
|
snappy::Test_Snappy_ReadPastEndOfBuffer();
|
||||||
|
snappy::Test_Snappy_FindMatchLength();
|
||||||
|
snappy::Test_Snappy_FindMatchLengthRandom();
|
||||||
|
+ snappy::Test_Snappy_SnappyCompress();
|
||||||
|
+ snappy::Test_Snappy_SnappyUncompress();
|
||||||
|
+ snappy::Test_Snappy_SnappyValidateCompress();
|
||||||
|
+ snappy::Test_Snappy_SnappyValidCompressed();
|
||||||
|
+ snappy::Test_Snappy_SnappySlowAppend();
|
||||||
|
fprintf(stderr, "All tests passed.\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
diff --git a/snappy_unittest.cc b/snappy_unittest.cc
|
||||||
|
index 37159c3..1872cac 100644
|
||||||
|
--- a/snappy_unittest.cc
|
||||||
|
+++ b/snappy_unittest.cc
|
||||||
|
@@ -39,6 +39,7 @@
|
||||||
|
#include "snappy-internal.h"
|
||||||
|
#include "snappy-test.h"
|
||||||
|
#include "snappy-sinksource.h"
|
||||||
|
+#include "snappy-c.h"
|
||||||
|
|
||||||
|
DEFINE_int32(start_len, -1,
|
||||||
|
"Starting prefix size for testing (-1: just full file contents)");
|
||||||
|
@@ -215,6 +216,25 @@ static bool Compress(const char* input, size_t input_size, CompressorType comp,
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
+snappy_status SnappyCompress(const char* input, size_t input_length,
|
||||||
|
+ std::string* compressed, size_t compressed_length) {
|
||||||
|
+ // Pre-grow the buffer to the max length of the compressed output
|
||||||
|
+ STLStringResizeUninitialized(compressed, MaxCompressedLength(input_length));
|
||||||
|
+
|
||||||
|
+ snappy_status status = snappy_compress(input, input_length, string_as_array(compressed),
|
||||||
|
+ &compressed_length);
|
||||||
|
+ compressed->resize(compressed_length);
|
||||||
|
+ return status;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+snappy_status SnappyUncompress(const char* compressed, size_t compressed_length,
|
||||||
|
+ std::string* uncompressed, size_t uncompressed_length) {
|
||||||
|
+ STLStringResizeUninitialized(uncompressed, uncompressed_length);
|
||||||
|
+ snappy_status status = snappy_uncompress(compressed, compressed_length,
|
||||||
|
+ string_as_array(uncompressed), &uncompressed_length);
|
||||||
|
+ return status;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool Uncompress(const std::string& compressed, CompressorType comp,
|
||||||
|
int size, std::string* output) {
|
||||||
|
switch (comp) {
|
||||||
|
@@ -392,6 +412,24 @@ static void VerifyStringSink(const std::string& input) {
|
||||||
|
CHECK_EQ(uncompressed, input);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void VerifySinkAsMuchAsPossible(const std::string& input) {
|
||||||
|
+ std::string compressed;
|
||||||
|
+ DataEndingAtUnreadablePage i(input);
|
||||||
|
+ const size_t written = snappy::Compress(i.data(), i.size(), &compressed);
|
||||||
|
+ CHECK_EQ(written, compressed.size());
|
||||||
|
+ CHECK_LE(compressed.size(),
|
||||||
|
+ snappy::MaxCompressedLength(input.size()));
|
||||||
|
+ CHECK(snappy::IsValidCompressedBuffer(compressed.data(), compressed.size()));
|
||||||
|
+
|
||||||
|
+ std::string uncompressed;
|
||||||
|
+ uncompressed.resize(input.size());
|
||||||
|
+ snappy::UncheckedByteArraySink sink(string_as_array(&uncompressed));
|
||||||
|
+ DataEndingAtUnreadablePage c(compressed);
|
||||||
|
+ snappy::ByteArraySource source(c.data(), c.size());
|
||||||
|
+ CHECK(snappy::UncompressAsMuchAsPossible(&source, &sink));
|
||||||
|
+ CHECK_EQ(uncompressed, input);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void VerifyIOVec(const std::string& input) {
|
||||||
|
std::string compressed;
|
||||||
|
DataEndingAtUnreadablePage i(input);
|
||||||
|
@@ -510,6 +548,10 @@ static int Verify(const std::string& input) {
|
||||||
|
// Verify using sink based routines
|
||||||
|
VerifyStringSink(input);
|
||||||
|
|
||||||
|
+ if (!input.empty()) {
|
||||||
|
+ VerifySinkAsMuchAsPossible(input);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
VerifyNonBlockedCompression(input);
|
||||||
|
VerifyIOVec(input);
|
||||||
|
if (!input.empty()) {
|
||||||
|
@@ -582,7 +624,7 @@ TEST(CorruptedTest, VerifyCorrupted) {
|
||||||
|
// try reading stuff in from a bad file.
|
||||||
|
for (int i = 1; i <= 3; ++i) {
|
||||||
|
std::string data =
|
||||||
|
- ReadTestDataFile(StrFormat("baddata%d.snappy", i).c_str(), 0);
|
||||||
|
+ ReadTestDataFile(StrFormat("baddata%d.snappy", i).c_str());
|
||||||
|
std::string uncmp;
|
||||||
|
// check that we don't return a crazy length
|
||||||
|
size_t ulen;
|
||||||
|
@@ -597,6 +639,15 @@ TEST(CorruptedTest, VerifyCorrupted) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+// This test checks to ensure that snappy compression fails.
|
||||||
|
+TEST(CorruptedTest, VerifyUncompressFailed) {
|
||||||
|
+ std::string source = "BPmaking sure we don't \r\025$crash";
|
||||||
|
+ std::string dest;
|
||||||
|
+ CHECK(!Uncompress(source, &dest));
|
||||||
|
+ source = "B/ma";
|
||||||
|
+ CHECK(!Uncompress(source, &dest));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// Helper routines to construct arbitrary compressed strings.
|
||||||
|
// These mirror the compression code in snappy.cc, but are copied
|
||||||
|
// here so that we can bypass some limitations in the how snappy.cc
|
||||||
|
@@ -721,7 +772,6 @@ TEST(Snappy, RandomData) {
|
||||||
|
x.push_back(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-
|
||||||
|
Verify(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -872,6 +922,59 @@ TEST(Snappy, IOVecCopyOverflow) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+TEST(Snappy, SnappyCompress) {
|
||||||
|
+ std::string source = "making sure we don't crash with corrupted input";
|
||||||
|
+ std::string compressed;
|
||||||
|
+ CHECK_EQ(SnappyCompress(source.c_str(), source.size(),
|
||||||
|
+ &compressed, 100), SNAPPY_OK);
|
||||||
|
+ CHECK_EQ(SnappyCompress(source.c_str(),
|
||||||
|
+ source.size(), &compressed, 50), SNAPPY_BUFFER_TOO_SMALL);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+TEST(Snappy, SnappyUncompress) {
|
||||||
|
+ std::string source = "making sure we don't crash with corrupted input";
|
||||||
|
+ std::string compressed;
|
||||||
|
+ CHECK_EQ(SnappyCompress(source.c_str(), source.size(),
|
||||||
|
+ &compressed, 100), SNAPPY_OK);
|
||||||
|
+ std::string uncompressed;
|
||||||
|
+ size_t uncompressed_length;
|
||||||
|
+ CHECK_EQ(SnappyUncompress(compressed.c_str(), compressed.size(),
|
||||||
|
+ &uncompressed, 47), SNAPPY_OK);
|
||||||
|
+ CHECK_EQ(snappy_uncompressed_length(compressed.c_str(),
|
||||||
|
+ compressed.size(), &uncompressed_length), SNAPPY_OK);
|
||||||
|
+ CHECK_EQ(SnappyUncompress(compressed.c_str(), compressed.size(),
|
||||||
|
+ &uncompressed, 46), SNAPPY_BUFFER_TOO_SMALL);
|
||||||
|
+ compressed[0]++;
|
||||||
|
+ CHECK_EQ(SnappyUncompress(compressed.c_str(), compressed.size(),
|
||||||
|
+ &uncompressed, 100), SNAPPY_INVALID_INPUT);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+TEST(Snappy, SnappyValidateCompress) {
|
||||||
|
+ std::string source = "making sure we don't crash with corrupted input";
|
||||||
|
+ std::string compressed;
|
||||||
|
+ CHECK_EQ(SnappyCompress(source.c_str(), source.size(),
|
||||||
|
+ &compressed, 100), SNAPPY_OK);
|
||||||
|
+ CHECK_EQ(snappy_validate_compressed_buffer(compressed.c_str(),
|
||||||
|
+ compressed.size()), SNAPPY_OK);
|
||||||
|
+ CHECK_EQ(snappy_validate_compressed_buffer(compressed.c_str(), 50), SNAPPY_INVALID_INPUT);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+TEST(Snappy, SnappyValidCompressed) {
|
||||||
|
+ std::string source = "making sure we don't crash with corrupted input";
|
||||||
|
+ ByteArraySource reader(source.c_str(), source.size());
|
||||||
|
+ IsValidCompressed(&reader);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+TEST(Snappy, SnappySlowAppend) {
|
||||||
|
+ std::string compressed = "BPmaking sure we don't\r\025$crash with";
|
||||||
|
+ std::string uncompressed;
|
||||||
|
+ uncompressed.resize(compressed.size());
|
||||||
|
+ snappy::UncheckedByteArraySink sink(string_as_array(&uncompressed));
|
||||||
|
+ DataEndingAtUnreadablePage c(compressed);
|
||||||
|
+ snappy::ByteArraySource source(c.data(), c.size());
|
||||||
|
+ CHECK_EQ(snappy::UncompressAsMuchAsPossible(&source, &sink), 21);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static bool CheckUncompressedLength(const std::string& compressed,
|
||||||
|
size_t* ulength) {
|
||||||
|
const bool result1 = snappy::GetUncompressedLength(compressed.data(),
|
||||||
|
@@ -1483,23 +1586,25 @@ static void BM_ZFlatIncreasingTableSize(int iters, int arg) {
|
||||||
|
}
|
||||||
|
BENCHMARK(BM_ZFlatIncreasingTableSize)->DenseRange(0, 0);
|
||||||
|
|
||||||
|
+
|
||||||
|
+static void Check_File(int iters) {
|
||||||
|
+ std::string filename;
|
||||||
|
+ filename = "testdata/" + std::string(files[iters].filename);
|
||||||
|
+ fprintf(stderr, "-----%s.\n", filename.c_str());
|
||||||
|
+ snappy::CompressFile(filename.c_str());
|
||||||
|
+ filename = filename.append(".comp");
|
||||||
|
+ snappy::UncompressFile(filename.c_str());
|
||||||
|
+ snappy::MeasureFile(filename.c_str());
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
} // namespace snappy
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
InitGoogle(argv[0], &argc, &argv, true);
|
||||||
|
RunSpecifiedBenchmarks();
|
||||||
|
|
||||||
|
- if (argc >= 2) {
|
||||||
|
- for (int arg = 1; arg < argc; arg++) {
|
||||||
|
- if (FLAGS_write_compressed) {
|
||||||
|
- snappy::CompressFile(argv[arg]);
|
||||||
|
- } else if (FLAGS_write_uncompressed) {
|
||||||
|
- snappy::UncompressFile(argv[arg]);
|
||||||
|
- } else {
|
||||||
|
- snappy::MeasureFile(argv[arg]);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- return 0;
|
||||||
|
+ for (int iter = 0; iter < ARRAYSIZE(snappy::files); iter++) {
|
||||||
|
+ snappy::Check_File(iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: snappy
|
Name: snappy
|
||||||
Version: 1.1.8
|
Version: 1.1.8
|
||||||
Release: 1
|
Release: 2
|
||||||
Summary: A fast compressor/decompressor
|
Summary: A fast compressor/decompressor
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: https://github.com/google/snappy
|
URL: https://github.com/google/snappy
|
||||||
@ -8,6 +8,7 @@ Source0: https://github.com/google/snappy/archive/%{version}/%{name}-%{version}.
|
|||||||
Source1: snappy.pc
|
Source1: snappy.pc
|
||||||
|
|
||||||
Patch0: snappy-gtest.patch
|
Patch0: snappy-gtest.patch
|
||||||
|
Patch1: add-testcases-and-delete-unnecessary-test-code-for-snappy.patch
|
||||||
|
|
||||||
BuildRequires: gcc-c++ automake autoconf gtest-devel cmake
|
BuildRequires: gcc-c++ automake autoconf gtest-devel cmake
|
||||||
|
|
||||||
@ -68,6 +69,12 @@ make test
|
|||||||
%doc NEWS README.md
|
%doc NEWS README.md
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Dec 2 2021 hanxinke<hanxinke@huawei.com> - 1.1.8-2
|
||||||
|
- Type:enhancement
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: add testcases and delete unnecessary test code for snappy
|
||||||
|
|
||||||
* Fri Jul 17 2020 shixuantong <shixuantong> - 1.1.8-1
|
* Fri Jul 17 2020 shixuantong <shixuantong> - 1.1.8-1
|
||||||
- Type:NA
|
- Type:NA
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user