You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
3 months ago
|
#include <zstd.h>
|
||
|
|
||
|
#include <catch2/catch.hpp>
|
||
|
#include <cstring>
|
||
|
#include <vector>
|
||
|
|
||
|
#include "common/util.h"
|
||
|
#include "system/loggerd/logger.h"
|
||
|
#include "system/loggerd/zstd_writer.h"
|
||
|
|
||
|
TEST_CASE("ZstdFileWriter writes and compresses data correctly in loops", "[ZstdFileWriter]") {
|
||
|
const std::string filename = "test_zstd_file.zst";
|
||
|
const int iterations = 100;
|
||
|
const size_t dataSize = 1024;
|
||
|
|
||
|
std::string totalTestData;
|
||
|
|
||
|
// Step 1: Write compressed data to file in a loop
|
||
|
{
|
||
|
ZstdFileWriter writer(filename, LOG_COMPRESSION_LEVEL);
|
||
|
for (int i = 0; i < iterations; ++i) {
|
||
|
std::string testData = util::random_string(dataSize);
|
||
|
totalTestData.append(testData);
|
||
|
writer.write((void *)testData.c_str(), testData.size());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Step 2: Decompress the file and verify the data
|
||
|
auto compressedContent = util::read_file(filename);
|
||
|
std::string decompressedData = zstd_decompress(compressedContent);
|
||
|
|
||
|
// Step 3: Verify that the decompressed data matches the original accumulated data
|
||
|
REQUIRE(decompressedData.size() == totalTestData.size());
|
||
|
REQUIRE(std::memcmp(decompressedData.data(), totalTestData.c_str(), totalTestData.size()) == 0);
|
||
|
|
||
|
// Clean up the test file
|
||
|
std::remove(filename.c_str());
|
||
|
}
|