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