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 |