archive_patch_helper_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2013 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 "base/files/file_path.h"
6#include "base/files/file_util.h"
7#include "base/files/scoped_temp_dir.h"
8#include "base/path_service.h"
9#include "chrome/common/chrome_paths.h"
10#include "chrome/installer/setup/archive_patch_helper.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13namespace {
14
15class ArchivePatchHelperTest : public testing::Test {
16 protected:
17  static void SetUpTestCase() {
18    ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_dir_));
19    data_dir_ = data_dir_.AppendASCII("installer");
20    ASSERT_TRUE(base::PathExists(data_dir_));
21  }
22
23  static void TearDownTestCase() {
24    data_dir_.clear();
25  }
26
27  virtual void SetUp() OVERRIDE {
28    // Create a temp directory for testing.
29    ASSERT_TRUE(test_dir_.CreateUniqueTempDir());
30  }
31
32  virtual void TearDown() OVERRIDE {
33    // Clean up test directory manually so we can fail if it leaks.
34    ASSERT_TRUE(test_dir_.Delete());
35  }
36
37  // The path to input data used in tests.
38  static base::FilePath data_dir_;
39
40  // The temporary directory used to contain the test operations.
41  base::ScopedTempDir test_dir_;
42};
43
44base::FilePath ArchivePatchHelperTest::data_dir_;
45
46}  // namespace
47
48// Test that patching works.
49TEST_F(ArchivePatchHelperTest, Patching) {
50  base::FilePath src = data_dir_.AppendASCII("archive1.7z");
51  base::FilePath patch = data_dir_.AppendASCII("archive.diff");
52  base::FilePath dest = test_dir_.path().AppendASCII("archive2.7z");
53  installer::ArchivePatchHelper archive_helper(test_dir_.path(),
54                                               base::FilePath(),
55                                               src,
56                                               dest);
57  archive_helper.set_last_uncompressed_file(patch);
58  EXPECT_TRUE(archive_helper.EnsemblePatch() || archive_helper.BinaryPatch());
59  base::FilePath base = data_dir_.AppendASCII("archive2.7z");
60  EXPECT_TRUE(base::ContentsEqual(dest, base));
61}
62