lzma_util_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright (c) 2011 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#include <windows.h>
6
7#include "base/files/file_util.h"
8#include "base/files/scoped_temp_dir.h"
9#include "base/path_service.h"
10#include "chrome/common/chrome_paths.h"
11#include "chrome/installer/util/lzma_util.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace {
15
16class LzmaUtilTest : public testing::Test {
17 protected:
18  virtual void SetUp() {
19    ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_dir_));
20    data_dir_ = data_dir_.AppendASCII("installer");
21    ASSERT_TRUE(base::PathExists(data_dir_));
22
23    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
24  }
25
26  base::ScopedTempDir temp_dir_;
27
28  // The path to input data used in tests.
29  base::FilePath data_dir_;
30};
31
32}  // namespace
33
34// Test that we can open archives successfully.
35TEST_F(LzmaUtilTest, OpenArchiveTest) {
36  base::FilePath archive = data_dir_.AppendASCII("archive1.7z");
37  LzmaUtil lzma_util;
38  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
39
40  // We allow opening another archive (which will automatically close the first
41  // archive).
42  archive = data_dir_.AppendASCII("archive2.7z");
43  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
44
45  // Explicitly close and open the first archive again.
46  lzma_util.CloseArchive();
47  archive = data_dir_.AppendASCII("archive1.7z");
48  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
49
50  // Make sure non-existent archive returns error.
51  archive = data_dir_.AppendASCII("archive.non_existent.7z");
52  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), ERROR_FILE_NOT_FOUND);
53}
54
55// Test that we can extract archives successfully.
56TEST_F(LzmaUtilTest, UnPackTest) {
57  base::FilePath extract_dir(temp_dir_.path());
58  extract_dir = extract_dir.AppendASCII("UnPackTest");
59  ASSERT_FALSE(base::PathExists(extract_dir));
60  EXPECT_TRUE(base::CreateDirectory(extract_dir));
61  ASSERT_TRUE(base::PathExists(extract_dir));
62
63  base::FilePath archive = data_dir_.AppendASCII("archive1.7z");
64  LzmaUtil lzma_util;
65  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
66  std::wstring unpacked_file;
67  EXPECT_EQ(lzma_util.UnPack(extract_dir.value(), &unpacked_file),
68            NO_ERROR);
69  EXPECT_TRUE(base::PathExists(extract_dir.AppendASCII("a.exe")));
70  EXPECT_TRUE(unpacked_file == extract_dir.AppendASCII("a.exe").value());
71
72  archive = data_dir_.AppendASCII("archive2.7z");
73  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
74  EXPECT_EQ(lzma_util.UnPack(extract_dir.value(), &unpacked_file),
75            NO_ERROR);
76  EXPECT_TRUE(base::PathExists(extract_dir.AppendASCII("b.exe")));
77  EXPECT_TRUE(unpacked_file == extract_dir.AppendASCII("b.exe").value());
78
79  lzma_util.CloseArchive();
80  archive = data_dir_.AppendASCII("invalid_archive.7z");
81  EXPECT_EQ(lzma_util.UnPack(extract_dir.value(), &unpacked_file),
82            ERROR_INVALID_HANDLE);
83  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
84  EXPECT_EQ(lzma_util.UnPack(extract_dir.value(), &unpacked_file),
85            ERROR_INVALID_HANDLE);
86
87  archive = data_dir_.AppendASCII("archive3.7z");
88  EXPECT_EQ(lzma_util.OpenArchive(archive.value()), NO_ERROR);
89  EXPECT_EQ(lzma_util.UnPack(extract_dir.value(), &unpacked_file),
90            NO_ERROR);
91  EXPECT_TRUE(base::PathExists(extract_dir.AppendASCII("archive\\a.exe")));
92  EXPECT_TRUE(base::PathExists(
93      extract_dir.AppendASCII("archive\\sub_dir\\text.txt")));
94}
95
96// Test the static method that can be used to unpack archives.
97TEST_F(LzmaUtilTest, UnPackArchiveTest) {
98  base::FilePath extract_dir(temp_dir_.path());
99  extract_dir = extract_dir.AppendASCII("UnPackArchiveTest");
100  ASSERT_FALSE(base::PathExists(extract_dir));
101  EXPECT_TRUE(base::CreateDirectory(extract_dir));
102  ASSERT_TRUE(base::PathExists(extract_dir));
103
104  base::FilePath archive = data_dir_.AppendASCII("archive1.7z");
105  std::wstring unpacked_file;
106  EXPECT_EQ(LzmaUtil::UnPackArchive(archive.value(), extract_dir.value(),
107                                    &unpacked_file), NO_ERROR);
108  EXPECT_TRUE(base::PathExists(extract_dir.AppendASCII("a.exe")));
109  EXPECT_TRUE(unpacked_file == extract_dir.AppendASCII("a.exe").value());
110
111  archive = data_dir_.AppendASCII("archive2.7z");
112  EXPECT_EQ(LzmaUtil::UnPackArchive(archive.value(), extract_dir.value(),
113                                    &unpacked_file), NO_ERROR);
114  EXPECT_TRUE(base::PathExists(extract_dir.AppendASCII("b.exe")));
115  EXPECT_TRUE(unpacked_file == extract_dir.AppendASCII("b.exe").value());
116
117  archive = data_dir_.AppendASCII("invalid_archive.7z");
118  EXPECT_NE(LzmaUtil::UnPackArchive(archive.value(), extract_dir.value(),
119                                    &unpacked_file), NO_ERROR);
120}
121