Home | History | Annotate | Download | only in common
      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.
     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