blob: 298ca9d4f360522082ffdd08c51c2f90fc5805d9 [file] [log] [blame]
adlr@google.com3defe6a2009-12-04 20:57:17 +00001// Copyright (c) 2009 The Chromium OS 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#include <string.h>
6#include <unistd.h>
7#include <string>
8#include <vector>
9#include <gtest/gtest.h>
10#include "update_engine/gzip.h"
11#include "update_engine/test_utils.h"
12#include "update_engine/utils.h"
13
14using std::string;
15using std::vector;
16
17namespace chromeos_update_engine {
18
19class GzipTest : public ::testing::Test { };
20
21TEST(GzipTest, SimpleTest) {
22 string in("this should compress well xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
23 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
24 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
25 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
26 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
27 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
28 vector<char> out;
29 EXPECT_TRUE(GzipCompressString(in, &out));
30 EXPECT_LT(out.size(), in.size());
31 EXPECT_GT(out.size(), 0);
32 vector<char> decompressed;
33 EXPECT_TRUE(GzipDecompress(out, &decompressed));
34 EXPECT_EQ(in.size(), decompressed.size());
35 EXPECT_TRUE(!memcmp(in.data(), &decompressed[0], in.size()));
36}
37
38TEST(GzipTest, PoorCompressionTest) {
39 string in(reinterpret_cast<const char*>(kRandomString),
40 sizeof(kRandomString));
41 vector<char> out;
42 EXPECT_TRUE(GzipCompressString(in, &out));
43 EXPECT_GT(out.size(), in.size());
44 string out_string(&out[0], out.size());
45 vector<char> decompressed;
46 EXPECT_TRUE(GzipDecompressString(out_string, &decompressed));
47 EXPECT_EQ(in.size(), decompressed.size());
48 EXPECT_TRUE(!memcmp(in.data(), &decompressed[0], in.size()));
49}
50
51TEST(GzipTest, MalformedGzipTest) {
52 string in(reinterpret_cast<const char*>(kRandomString),
53 sizeof(kRandomString));
54 vector<char> out;
55 EXPECT_FALSE(GzipDecompressString(in, &out));
56}
57
58TEST(GzipTest, EmptyInputsTest) {
59 string in;
60 vector<char> out;
61 EXPECT_TRUE(GzipDecompressString(in, &out));
62 EXPECT_EQ(0, out.size());
63
64 EXPECT_TRUE(GzipCompressString(in, &out));
65 EXPECT_EQ(0, out.size());
66}
67
68} // namespace chromeos_update_engine