// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include "remoting/base/compressor_zlib.h" #include "testing/gtest/include/gtest/gtest.h" namespace remoting { static void GenerateTestData(uint8* data, int size, int seed) { srand(seed); for (int i = 0; i < size; ++i) data[i] = rand() % 256; } // Keep compressing |input_data| into |output_data| until the last // bytes is consumed. static void Compress(remoting::Compressor* compressor, const uint8* input_data, int input_size, uint8* output_data, int output_size) { // Feed data into the compress until the end. // This loop will rewrite |output_data| continuously. int consumed = 0; int written = 0; while (compressor->Process( input_data, input_size, output_data, output_size, input_size == 0 ? Compressor::CompressorFinish : Compressor::CompressorNoFlush, &consumed, &written)) { input_data += consumed; input_size -= consumed; } } TEST(CompressorZlibTest, Compress) { static const int kRawDataSize = 1024 * 128; static const int kCompressedDataSize = 256; uint8 raw_data[kRawDataSize]; uint8 compressed_data[kCompressedDataSize]; // Generate the test data.g GenerateTestData(raw_data, kRawDataSize, 99); // Then use the compressor to compress. remoting::CompressorZlib compressor; Compress(&compressor, raw_data, kRawDataSize, compressed_data, kCompressedDataSize); } // Checks that zlib can work with a small output buffer by reading // less from the input. TEST(CompressorZlibTest, SmallOutputBuffer) { static const int kRawDataSize = 1024 * 128; static const int kCompressedDataSize = 1; uint8 raw_data[kRawDataSize]; uint8 compressed_data[kCompressedDataSize]; // Generate the test data.g GenerateTestData(raw_data, kRawDataSize, 99); // Then use the compressor to compress. remoting::CompressorZlib compressor; Compress(&compressor, raw_data, kRawDataSize, compressed_data, kCompressedDataSize); } } // namespace remoting