// Copyright 2018 The Chromium OS 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 "bsdiff/brotli_decompressor.h" #include <memory> #include <string> #include <vector> #include <gtest/gtest.h> namespace { // echo -n "Hello!" | brotli -9 | hexdump -v -e '" " 11/1 "0x%02x, " "\n"' constexpr uint8_t kBrotliHello[] = { 0x8b, 0x02, 0x80, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0x03, }; } // namespace namespace bsdiff { class BrotliDecompressorTest : public testing::Test { protected: void SetUp() { decompressor_.reset(new BrotliDecompressor()); EXPECT_NE(nullptr, decompressor_.get()); } std::unique_ptr<BrotliDecompressor> decompressor_; }; TEST_F(BrotliDecompressorTest, SmokeTest) { EXPECT_TRUE(decompressor_->SetInputData(kBrotliHello, sizeof(kBrotliHello))); std::vector<uint8_t> output_data(6); EXPECT_TRUE(decompressor_->Read(output_data.data(), output_data.size())); std::string hello = "Hello!"; EXPECT_EQ(std::vector<uint8_t>(hello.begin(), hello.end()), output_data); } TEST_F(BrotliDecompressorTest, ReadingFromEmptyFileTest) { uint8_t data = 0; EXPECT_TRUE(decompressor_->SetInputData(&data, 0)); uint8_t output_data[10]; EXPECT_FALSE(decompressor_->Read(output_data, sizeof(output_data))); } // Check that we fail to read from a truncated file. TEST_F(BrotliDecompressorTest, ReadingFromTruncatedFileTest) { // We feed only half of the compressed file. EXPECT_TRUE( decompressor_->SetInputData(kBrotliHello, sizeof(kBrotliHello) / 2)); uint8_t output_data[6]; EXPECT_FALSE(decompressor_->Read(output_data, sizeof(output_data))); } // Check that we fail to read more than it is available in the file. TEST_F(BrotliDecompressorTest, ReadingMoreThanAvailableTest) { EXPECT_TRUE(decompressor_->SetInputData(kBrotliHello, sizeof(kBrotliHello))); uint8_t output_data[1000]; EXPECT_FALSE(decompressor_->Read(output_data, sizeof(output_data))); } } // namespace bsdiff