106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Use of this source code is governed by a BSD-style license that can be 306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// found in the LICENSE file. 406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#if defined(USE_SYSTEM_LIBBZ2) 606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include <bzlib.h> 706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#else 806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "third_party/bzip2/bzlib.h" 906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#endif 1006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 1106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "base/basictypes.h" 1206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 1306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 1406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochnamespace { 1506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch class Bzip2Test : public testing::Test { 1606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch }; 1706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}; 1806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 1906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// This test does a simple round trip to test that the bzip2 library is 2006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// present and working. 2106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen MurdochTEST(Bzip2Test, Roundtrip) { 2206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch char input[] = "Test Data, More Test Data, Even More Data of Test"; 2306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch char output[256]; 2406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 2506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch memset(output, 0, arraysize(output)); 2606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 2706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch bz_stream stream; 2806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.bzalloc = NULL; 2906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.bzfree = NULL; 3006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.opaque = NULL; 3106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch int result = BZ2_bzCompressInit(&stream, 3206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 9, // 900k block size 3306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 0, // quiet 3406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 0); // default work factor 3506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(BZ_OK, result); 3606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 3706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.next_in = input; 3806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.avail_in = arraysize(input) - 1; 3906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.next_out = output; 4006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.avail_out = arraysize(output); 4106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch do { 4206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch result = BZ2_bzCompress(&stream, BZ_FINISH); 4306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch } while (result == BZ_FINISH_OK); 4406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(BZ_STREAM_END, result); 4506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch result = BZ2_bzCompressEnd(&stream); 4606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(BZ_OK, result); 4706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch int written = stream.total_out_lo32; 4806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 4906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // Make sure we wrote something; otherwise not sure what to expect 5006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_GT(written, 0); 5106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 5206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // Now decompress and check that we got the same thing. 5306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch result = BZ2_bzDecompressInit(&stream, 0, 0); 5406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(BZ_OK, result); 5506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch char output2[256]; 5606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch memset(output2, 0, arraysize(output2)); 5706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 5806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.next_in = output; 5906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.avail_in = written; 6006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.next_out = output2; 6106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch stream.avail_out = arraysize(output2); 6206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 6306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch do { 6406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch result = BZ2_bzDecompress(&stream); 6506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch } while (result == BZ_OK); 6606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(result, BZ_STREAM_END); 6706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch result = BZ2_bzDecompressEnd(&stream); 6806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ASSERT_EQ(result, BZ_OK); 6906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 7006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_EQ(arraysize(input) - 1, stream.total_out_lo32); 7106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_STREQ(input, output2); 7206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch} 73