| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/installer/util/delete_tree_work_item.h" |
| 6 |
| 5 #include <windows.h> | 7 #include <windows.h> |
| 6 | 8 |
| 7 #include <fstream> | 9 #include <fstream> |
| 10 #include <memory> |
| 8 | 11 |
| 9 #include "base/base_paths.h" | 12 #include "base/base_paths.h" |
| 10 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
| 11 #include "base/files/scoped_temp_dir.h" | 14 #include "base/files/scoped_temp_dir.h" |
| 12 #include "base/logging.h" | 15 #include "base/logging.h" |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 15 #include "chrome/installer/util/delete_tree_work_item.h" | |
| 16 #include "chrome/installer/util/work_item.h" | 17 #include "chrome/installer/util/work_item.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 class DeleteTreeWorkItemTest : public testing::Test { | 22 class DeleteTreeWorkItemTest : public testing::Test { |
| 22 protected: | 23 protected: |
| 23 void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); } | 24 void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); } |
| 24 | 25 |
| 25 // The temporary directory used to contain the test operations. | 26 // The temporary directory used to contain the test operations. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 base::FilePath file_name_delete_2(dir_name_delete_2); | 67 base::FilePath file_name_delete_2(dir_name_delete_2); |
| 67 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); | 68 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); |
| 68 CreateTextFile(file_name_delete_2.value(), text_content_1); | 69 CreateTextFile(file_name_delete_2.value(), text_content_1); |
| 69 ASSERT_TRUE(base::PathExists(file_name_delete_2)); | 70 ASSERT_TRUE(base::PathExists(file_name_delete_2)); |
| 70 | 71 |
| 71 // Test Do(). | 72 // Test Do(). |
| 72 base::ScopedTempDir temp_dir; | 73 base::ScopedTempDir temp_dir; |
| 73 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 74 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 74 | 75 |
| 75 std::vector<base::FilePath> key_files; | 76 std::vector<base::FilePath> key_files; |
| 76 scoped_ptr<DeleteTreeWorkItem> work_item( | 77 std::unique_ptr<DeleteTreeWorkItem> work_item( |
| 77 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), | 78 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), |
| 78 key_files)); | 79 key_files)); |
| 79 EXPECT_TRUE(work_item->Do()); | 80 EXPECT_TRUE(work_item->Do()); |
| 80 | 81 |
| 81 // everything should be gone | 82 // everything should be gone |
| 82 EXPECT_FALSE(base::PathExists(file_name_delete_1)); | 83 EXPECT_FALSE(base::PathExists(file_name_delete_1)); |
| 83 EXPECT_FALSE(base::PathExists(file_name_delete_2)); | 84 EXPECT_FALSE(base::PathExists(file_name_delete_2)); |
| 84 EXPECT_FALSE(base::PathExists(dir_name_delete)); | 85 EXPECT_FALSE(base::PathExists(dir_name_delete)); |
| 85 | 86 |
| 86 work_item->Rollback(); | 87 work_item->Rollback(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 base::FilePath file_name_delete_2(dir_name_delete_2); | 119 base::FilePath file_name_delete_2(dir_name_delete_2); |
| 119 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); | 120 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); |
| 120 CreateTextFile(file_name_delete_2.value(), text_content_1); | 121 CreateTextFile(file_name_delete_2.value(), text_content_1); |
| 121 ASSERT_TRUE(base::PathExists(file_name_delete_2)); | 122 ASSERT_TRUE(base::PathExists(file_name_delete_2)); |
| 122 | 123 |
| 123 // test Do() | 124 // test Do() |
| 124 base::ScopedTempDir temp_dir; | 125 base::ScopedTempDir temp_dir; |
| 125 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 126 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 126 | 127 |
| 127 std::vector<base::FilePath> key_files(1, file_name_delete_1); | 128 std::vector<base::FilePath> key_files(1, file_name_delete_1); |
| 128 scoped_ptr<DeleteTreeWorkItem> work_item( | 129 std::unique_ptr<DeleteTreeWorkItem> work_item( |
| 129 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), | 130 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), |
| 130 key_files)); | 131 key_files)); |
| 131 EXPECT_TRUE(work_item->Do()); | 132 EXPECT_TRUE(work_item->Do()); |
| 132 | 133 |
| 133 // everything should be gone | 134 // everything should be gone |
| 134 EXPECT_FALSE(base::PathExists(file_name_delete_1)); | 135 EXPECT_FALSE(base::PathExists(file_name_delete_1)); |
| 135 EXPECT_FALSE(base::PathExists(file_name_delete_2)); | 136 EXPECT_FALSE(base::PathExists(file_name_delete_2)); |
| 136 EXPECT_FALSE(base::PathExists(dir_name_delete)); | 137 EXPECT_FALSE(base::PathExists(dir_name_delete)); |
| 137 | 138 |
| 138 work_item->Rollback(); | 139 work_item->Rollback(); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 ::CreateProcessW(NULL, &writable_key_path[0], | 193 ::CreateProcessW(NULL, &writable_key_path[0], |
| 193 NULL, NULL, FALSE, CREATE_NO_WINDOW | CREATE_SUSPENDED, | 194 NULL, NULL, FALSE, CREATE_NO_WINDOW | CREATE_SUSPENDED, |
| 194 NULL, NULL, &si, &pi)); | 195 NULL, NULL, &si, &pi)); |
| 195 | 196 |
| 196 // test Do(). | 197 // test Do(). |
| 197 { | 198 { |
| 198 base::ScopedTempDir temp_dir; | 199 base::ScopedTempDir temp_dir; |
| 199 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 200 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 200 | 201 |
| 201 std::vector<base::FilePath> key_paths(1, key_path); | 202 std::vector<base::FilePath> key_paths(1, key_path); |
| 202 scoped_ptr<DeleteTreeWorkItem> work_item( | 203 std::unique_ptr<DeleteTreeWorkItem> work_item( |
| 203 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), | 204 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), |
| 204 key_paths)); | 205 key_paths)); |
| 205 | 206 |
| 206 // delete should fail as file in use. | 207 // delete should fail as file in use. |
| 207 EXPECT_FALSE(work_item->Do()); | 208 EXPECT_FALSE(work_item->Do()); |
| 208 } | 209 } |
| 209 | 210 |
| 210 { | 211 { |
| 211 base::ScopedTempDir temp_dir; | 212 base::ScopedTempDir temp_dir; |
| 212 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 213 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 213 | 214 |
| 214 // No key paths, the deletion should succeed. | 215 // No key paths, the deletion should succeed. |
| 215 std::vector<base::FilePath> key_paths; | 216 std::vector<base::FilePath> key_paths; |
| 216 scoped_ptr<DeleteTreeWorkItem> work_item( | 217 std::unique_ptr<DeleteTreeWorkItem> work_item( |
| 217 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), | 218 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, temp_dir.path(), |
| 218 key_paths)); | 219 key_paths)); |
| 219 | 220 |
| 220 EXPECT_TRUE(work_item->Do()); | 221 EXPECT_TRUE(work_item->Do()); |
| 221 work_item->Rollback(); | 222 work_item->Rollback(); |
| 222 } | 223 } |
| 223 | 224 |
| 224 // verify everything is still there. | 225 // verify everything is still there. |
| 225 EXPECT_TRUE(base::PathExists(key_path)); | 226 EXPECT_TRUE(base::PathExists(key_path)); |
| 226 EXPECT_TRUE(base::PathExists(file_name_delete_1)); | 227 EXPECT_TRUE(base::PathExists(file_name_delete_1)); |
| 227 EXPECT_TRUE(base::PathExists(file_name_delete_2)); | 228 EXPECT_TRUE(base::PathExists(file_name_delete_2)); |
| 228 | 229 |
| 229 TerminateProcess(pi.hProcess, 0); | 230 TerminateProcess(pi.hProcess, 0); |
| 230 // make sure the handle is closed. | 231 // make sure the handle is closed. |
| 231 WaitForSingleObject(pi.hProcess, INFINITE); | 232 WaitForSingleObject(pi.hProcess, INFINITE); |
| 232 } | 233 } |
| OLD | NEW |