1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #if defined(USE_SYSTEM_LIBBZ2)
6 #include <bzlib.h>
7 #else
8 #include "third_party/bzip2/bzlib.h"
9 #endif
10
11 #include "base/basictypes.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace {
15 class Bzip2Test : public testing::Test {
16 };
17 };
18
19 // This test does a simple round trip to test that the bzip2 library is
20 // present and working.
TEST(Bzip2Test,Roundtrip)21 TEST(Bzip2Test, Roundtrip) {
22 char input[] = "Test Data, More Test Data, Even More Data of Test";
23 char output[256];
24
25 memset(output, 0, arraysize(output));
26
27 bz_stream stream;
28 stream.bzalloc = NULL;
29 stream.bzfree = NULL;
30 stream.opaque = NULL;
31 int result = BZ2_bzCompressInit(&stream,
32 9, // 900k block size
33 0, // quiet
34 0); // default work factor
35 ASSERT_EQ(BZ_OK, result);
36
37 stream.next_in = input;
38 stream.avail_in = arraysize(input) - 1;
39 stream.next_out = output;
40 stream.avail_out = arraysize(output);
41 do {
42 result = BZ2_bzCompress(&stream, BZ_FINISH);
43 } while (result == BZ_FINISH_OK);
44 ASSERT_EQ(BZ_STREAM_END, result);
45 result = BZ2_bzCompressEnd(&stream);
46 ASSERT_EQ(BZ_OK, result);
47 int written = stream.total_out_lo32;
48
49 // Make sure we wrote something; otherwise not sure what to expect
50 ASSERT_GT(written, 0);
51
52 // Now decompress and check that we got the same thing.
53 result = BZ2_bzDecompressInit(&stream, 0, 0);
54 ASSERT_EQ(BZ_OK, result);
55 char output2[256];
56 memset(output2, 0, arraysize(output2));
57
58 stream.next_in = output;
59 stream.avail_in = written;
60 stream.next_out = output2;
61 stream.avail_out = arraysize(output2);
62
63 do {
64 result = BZ2_bzDecompress(&stream);
65 } while (result == BZ_OK);
66 ASSERT_EQ(result, BZ_STREAM_END);
67 result = BZ2_bzDecompressEnd(&stream);
68 ASSERT_EQ(result, BZ_OK);
69
70 EXPECT_EQ(arraysize(input) - 1, stream.total_out_lo32);
71 EXPECT_STREQ(input, output2);
72 }
73