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.
		
		
		
		
		
			
		
			
				
					
					
						
							44 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							44 lines
						
					
					
						
							1.5 KiB
						
					
					
				#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);
 | 
						|
    // Write various data sizes including edge cases
 | 
						|
    std::vector<size_t> testSizes = {dataSize, 1, 0, dataSize * 2};  // Normal, minimal, empty, large
 | 
						|
    for (int i = 0; i < iterations; ++i) {
 | 
						|
      size_t currentSize = testSizes[i % testSizes.size()];
 | 
						|
      std::string testData = util::random_string(currentSize);
 | 
						|
      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);
 | 
						|
  REQUIRE(compressedContent.size() > 0);
 | 
						|
  REQUIRE(compressedContent.size() < totalTestData.size());
 | 
						|
  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());
 | 
						|
}
 | 
						|
 |