OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <windows.h> | 5 #include <windows.h> |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 #include <iostream> | 8 #include <iostream> |
9 | 9 |
10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 file.close(); | 53 file.close(); |
54 } | 54 } |
55 | 55 |
56 wchar_t text_content_1[] = L"delete me"; | 56 wchar_t text_content_1[] = L"delete me"; |
57 wchar_t text_content_2[] = L"delete me as well"; | 57 wchar_t text_content_2[] = L"delete me as well"; |
58 }; | 58 }; |
59 | 59 |
60 // Delete a tree without key path. Everything should be deleted. | 60 // Delete a tree without key path. Everything should be deleted. |
61 TEST_F(DeleteTreeWorkItemTest, DeleteTreeNoKeyPath) { | 61 TEST_F(DeleteTreeWorkItemTest, DeleteTreeNoKeyPath) { |
62 // Create tree to be deleted | 62 // Create tree to be deleted |
63 std::wstring dir_name_delete(test_dir_.ToWStringHack()); | 63 FilePath dir_name_delete(test_dir_); |
64 file_util::AppendToPath(&dir_name_delete, L"to_be_delete"); | 64 dir_name_delete = dir_name_delete.AppendASCII("to_be_delete"); |
65 CreateDirectory(dir_name_delete.c_str(), NULL); | 65 CreateDirectory(dir_name_delete.value().c_str(), NULL); |
66 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); | 66 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); |
67 | 67 |
68 std::wstring dir_name_delete_1(dir_name_delete); | 68 FilePath dir_name_delete_1(dir_name_delete); |
69 file_util::AppendToPath(&dir_name_delete_1, L"1"); | 69 dir_name_delete_1 = dir_name_delete_1.AppendASCII("1"); |
70 CreateDirectory(dir_name_delete_1.c_str(), NULL); | 70 CreateDirectory(dir_name_delete_1.value().c_str(), NULL); |
71 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); | 71 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); |
72 | 72 |
73 std::wstring dir_name_delete_2(dir_name_delete); | 73 FilePath dir_name_delete_2(dir_name_delete); |
74 file_util::AppendToPath(&dir_name_delete_2, L"2"); | 74 dir_name_delete_2 = dir_name_delete_2.AppendASCII("2"); |
75 CreateDirectory(dir_name_delete_2.c_str(), NULL); | 75 CreateDirectory(dir_name_delete_2.value().c_str(), NULL); |
76 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); | 76 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); |
77 | 77 |
78 std::wstring file_name_delete_1(dir_name_delete_1); | 78 FilePath file_name_delete_1(dir_name_delete_1); |
79 file_util::AppendToPath(&file_name_delete_1, L"File_1.txt"); | 79 file_name_delete_1 = file_name_delete_1.AppendASCII("File_1.txt"); |
80 CreateTextFile(file_name_delete_1, text_content_1); | 80 CreateTextFile(file_name_delete_1.value(), text_content_1); |
81 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); | 81 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); |
82 | 82 |
83 std::wstring file_name_delete_2(dir_name_delete_2); | 83 FilePath file_name_delete_2(dir_name_delete_2); |
84 file_util::AppendToPath(&file_name_delete_2, L"File_2.txt"); | 84 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); |
85 CreateTextFile(file_name_delete_2, text_content_1); | 85 CreateTextFile(file_name_delete_2.value(), text_content_1); |
86 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); | 86 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); |
87 | 87 |
88 // test Do() | 88 // test Do() |
89 scoped_ptr<DeleteTreeWorkItem> work_item( | 89 scoped_ptr<DeleteTreeWorkItem> work_item( |
90 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, std::wstring())); | 90 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete.ToWStringHack(), |
| 91 std::wstring())); |
91 EXPECT_TRUE(work_item->Do()); | 92 EXPECT_TRUE(work_item->Do()); |
92 | 93 |
93 // everything should be gone | 94 // everything should be gone |
94 EXPECT_FALSE(file_util::PathExists(file_name_delete_1)); | 95 EXPECT_FALSE(file_util::PathExists(file_name_delete_1)); |
95 EXPECT_FALSE(file_util::PathExists(file_name_delete_2)); | 96 EXPECT_FALSE(file_util::PathExists(file_name_delete_2)); |
96 EXPECT_FALSE(file_util::PathExists(dir_name_delete)); | 97 EXPECT_FALSE(file_util::PathExists(dir_name_delete)); |
97 | 98 |
98 work_item->Rollback(); | 99 work_item->Rollback(); |
99 // everything should come back | 100 // everything should come back |
100 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); | 101 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); |
101 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); | 102 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); |
102 EXPECT_TRUE(file_util::PathExists(dir_name_delete)); | 103 EXPECT_TRUE(file_util::PathExists(dir_name_delete)); |
103 } | 104 } |
104 | 105 |
105 | 106 |
106 // Delete a tree with keypath but not in use. Everything should be gone. | 107 // Delete a tree with keypath but not in use. Everything should be gone. |
107 // Rollback should bring back everything | 108 // Rollback should bring back everything |
108 TEST_F(DeleteTreeWorkItemTest, DeleteTree) { | 109 TEST_F(DeleteTreeWorkItemTest, DeleteTree) { |
109 // Create tree to be deleted | 110 // Create tree to be deleted |
110 std::wstring dir_name_delete(test_dir_.ToWStringHack()); | 111 FilePath dir_name_delete(test_dir_); |
111 file_util::AppendToPath(&dir_name_delete, L"to_be_delete"); | 112 dir_name_delete = dir_name_delete.AppendASCII("to_be_delete"); |
112 CreateDirectory(dir_name_delete.c_str(), NULL); | 113 CreateDirectory(dir_name_delete.value().c_str(), NULL); |
113 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); | 114 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); |
114 | 115 |
115 std::wstring dir_name_delete_1(dir_name_delete); | 116 FilePath dir_name_delete_1(dir_name_delete); |
116 file_util::AppendToPath(&dir_name_delete_1, L"1"); | 117 dir_name_delete_1 = dir_name_delete_1.AppendASCII("1"); |
117 CreateDirectory(dir_name_delete_1.c_str(), NULL); | 118 CreateDirectory(dir_name_delete_1.value().c_str(), NULL); |
118 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); | 119 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); |
119 | 120 |
120 std::wstring dir_name_delete_2(dir_name_delete); | 121 FilePath dir_name_delete_2(dir_name_delete); |
121 file_util::AppendToPath(&dir_name_delete_2, L"2"); | 122 dir_name_delete_2 = dir_name_delete_2.AppendASCII("2"); |
122 CreateDirectory(dir_name_delete_2.c_str(), NULL); | 123 CreateDirectory(dir_name_delete_2.value().c_str(), NULL); |
123 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); | 124 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); |
124 | 125 |
125 std::wstring file_name_delete_1(dir_name_delete_1); | 126 FilePath file_name_delete_1(dir_name_delete_1); |
126 file_util::AppendToPath(&file_name_delete_1, L"File_1.txt"); | 127 file_name_delete_1 = file_name_delete_1.AppendASCII("File_1.txt"); |
127 CreateTextFile(file_name_delete_1, text_content_1); | 128 CreateTextFile(file_name_delete_1.value(), text_content_1); |
128 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); | 129 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); |
129 | 130 |
130 std::wstring file_name_delete_2(dir_name_delete_2); | 131 FilePath file_name_delete_2(dir_name_delete_2); |
131 file_util::AppendToPath(&file_name_delete_2, L"File_2.txt"); | 132 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); |
132 CreateTextFile(file_name_delete_2, text_content_1); | 133 CreateTextFile(file_name_delete_2.value(), text_content_1); |
133 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); | 134 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); |
134 | 135 |
135 // test Do() | 136 // test Do() |
136 scoped_ptr<DeleteTreeWorkItem> work_item( | 137 scoped_ptr<DeleteTreeWorkItem> work_item( |
137 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, file_name_delete_1)); | 138 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete.ToWStringHack(), |
| 139 file_name_delete_1.ToWStringHack())); |
138 EXPECT_TRUE(work_item->Do()); | 140 EXPECT_TRUE(work_item->Do()); |
139 | 141 |
140 // everything should be gone | 142 // everything should be gone |
141 EXPECT_FALSE(file_util::PathExists(file_name_delete_1)); | 143 EXPECT_FALSE(file_util::PathExists(file_name_delete_1)); |
142 EXPECT_FALSE(file_util::PathExists(file_name_delete_2)); | 144 EXPECT_FALSE(file_util::PathExists(file_name_delete_2)); |
143 EXPECT_FALSE(file_util::PathExists(dir_name_delete)); | 145 EXPECT_FALSE(file_util::PathExists(dir_name_delete)); |
144 | 146 |
145 work_item->Rollback(); | 147 work_item->Rollback(); |
146 // everything should come back | 148 // everything should come back |
147 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); | 149 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); |
148 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); | 150 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); |
149 EXPECT_TRUE(file_util::PathExists(dir_name_delete)); | 151 EXPECT_TRUE(file_util::PathExists(dir_name_delete)); |
150 } | 152 } |
151 | 153 |
152 // Delete a tree with key_path in use. Everything should still be there. | 154 // Delete a tree with key_path in use. Everything should still be there. |
153 TEST_F(DeleteTreeWorkItemTest, DeleteTreeInUse) { | 155 TEST_F(DeleteTreeWorkItemTest, DeleteTreeInUse) { |
154 // Create tree to be deleted | 156 // Create tree to be deleted |
155 std::wstring dir_name_delete(test_dir_.ToWStringHack()); | 157 FilePath dir_name_delete(test_dir_); |
156 file_util::AppendToPath(&dir_name_delete, L"to_be_delete"); | 158 dir_name_delete = dir_name_delete.AppendASCII("to_be_delete"); |
157 CreateDirectory(dir_name_delete.c_str(), NULL); | 159 CreateDirectory(dir_name_delete.value().c_str(), NULL); |
158 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); | 160 ASSERT_TRUE(file_util::PathExists(dir_name_delete)); |
159 | 161 |
160 std::wstring dir_name_delete_1(dir_name_delete); | 162 FilePath dir_name_delete_1(dir_name_delete); |
161 file_util::AppendToPath(&dir_name_delete_1, L"1"); | 163 dir_name_delete_1 = dir_name_delete_1.AppendASCII("1"); |
162 CreateDirectory(dir_name_delete_1.c_str(), NULL); | 164 CreateDirectory(dir_name_delete_1.value().c_str(), NULL); |
163 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); | 165 ASSERT_TRUE(file_util::PathExists(dir_name_delete_1)); |
164 | 166 |
165 std::wstring dir_name_delete_2(dir_name_delete); | 167 FilePath dir_name_delete_2(dir_name_delete); |
166 file_util::AppendToPath(&dir_name_delete_2, L"2"); | 168 dir_name_delete_2 = dir_name_delete_2.AppendASCII("2"); |
167 CreateDirectory(dir_name_delete_2.c_str(), NULL); | 169 CreateDirectory(dir_name_delete_2.value().c_str(), NULL); |
168 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); | 170 ASSERT_TRUE(file_util::PathExists(dir_name_delete_2)); |
169 | 171 |
170 std::wstring file_name_delete_1(dir_name_delete_1); | 172 FilePath file_name_delete_1(dir_name_delete_1); |
171 file_util::AppendToPath(&file_name_delete_1, L"File_1.txt"); | 173 file_name_delete_1 = file_name_delete_1.AppendASCII("File_1.txt"); |
172 CreateTextFile(file_name_delete_1, text_content_1); | 174 CreateTextFile(file_name_delete_1.value(), text_content_1); |
173 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); | 175 ASSERT_TRUE(file_util::PathExists(file_name_delete_1)); |
174 | 176 |
175 std::wstring file_name_delete_2(dir_name_delete_2); | 177 FilePath file_name_delete_2(dir_name_delete_2); |
176 file_util::AppendToPath(&file_name_delete_2, L"File_2.txt"); | 178 file_name_delete_2 = file_name_delete_2.AppendASCII("File_2.txt"); |
177 CreateTextFile(file_name_delete_2, text_content_1); | 179 CreateTextFile(file_name_delete_2.value(), text_content_1); |
178 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); | 180 ASSERT_TRUE(file_util::PathExists(file_name_delete_2)); |
179 | 181 |
180 // Create a key path file. | 182 // Create a key path file. |
181 std::wstring key_path(dir_name_delete); | 183 FilePath key_path(dir_name_delete); |
182 file_util::AppendToPath(&key_path, L"key_file.exe"); | 184 key_path = key_path.AppendASCII("key_file.exe"); |
183 | 185 |
184 wchar_t exe_full_path_str[MAX_PATH]; | 186 wchar_t exe_full_path_str[MAX_PATH]; |
185 ::GetModuleFileNameW(NULL, exe_full_path_str, MAX_PATH); | 187 ::GetModuleFileNameW(NULL, exe_full_path_str, MAX_PATH); |
186 std::wstring exe_full_path(exe_full_path_str); | 188 FilePath exe_full_path(exe_full_path_str); |
187 | 189 |
188 file_util::CopyFile(exe_full_path, key_path); | 190 file_util::CopyFile(exe_full_path, key_path); |
189 ASSERT_TRUE(file_util::PathExists(key_path)); | 191 ASSERT_TRUE(file_util::PathExists(key_path)); |
190 | 192 |
191 LOG(INFO) << "copy ourself from " << exe_full_path << " to " << key_path; | 193 LOG(INFO) << "copy ourself from " |
| 194 << exe_full_path.value() << " to " << key_path.value(); |
192 | 195 |
193 // Run the key path file to keep it in use. | 196 // Run the key path file to keep it in use. |
194 STARTUPINFOW si = {sizeof(si)}; | 197 STARTUPINFOW si = {sizeof(si)}; |
195 PROCESS_INFORMATION pi = {0}; | 198 PROCESS_INFORMATION pi = {0}; |
196 ASSERT_TRUE( | 199 ASSERT_TRUE( |
197 ::CreateProcessW(NULL, const_cast<wchar_t*>(key_path.c_str()), | 200 ::CreateProcessW(NULL, const_cast<wchar_t*>(key_path.value().c_str()), |
198 NULL, NULL, FALSE, CREATE_NO_WINDOW | CREATE_SUSPENDED, | 201 NULL, NULL, FALSE, CREATE_NO_WINDOW | CREATE_SUSPENDED, |
199 NULL, NULL, &si, &pi)); | 202 NULL, NULL, &si, &pi)); |
200 | 203 |
201 // test Do(). | 204 // test Do(). |
202 { | 205 { |
203 scoped_ptr<DeleteTreeWorkItem> work_item( | 206 scoped_ptr<DeleteTreeWorkItem> work_item( |
204 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete, key_path)); | 207 WorkItem::CreateDeleteTreeWorkItem(dir_name_delete.ToWStringHack(), |
| 208 key_path.ToWStringHack())); |
205 | 209 |
206 // delete should fail as file in use. | 210 // delete should fail as file in use. |
207 EXPECT_FALSE(work_item->Do()); | 211 EXPECT_FALSE(work_item->Do()); |
208 } | 212 } |
209 | 213 |
210 // verify everything is still there. | 214 // verify everything is still there. |
211 EXPECT_TRUE(file_util::PathExists(key_path)); | 215 EXPECT_TRUE(file_util::PathExists(key_path)); |
212 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); | 216 EXPECT_TRUE(file_util::PathExists(file_name_delete_1)); |
213 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); | 217 EXPECT_TRUE(file_util::PathExists(file_name_delete_2)); |
214 | 218 |
215 TerminateProcess(pi.hProcess, 0); | 219 TerminateProcess(pi.hProcess, 0); |
216 // make sure the handle is closed. | 220 // make sure the handle is closed. |
217 WaitForSingleObject(pi.hProcess, INFINITE); | 221 WaitForSingleObject(pi.hProcess, INFINITE); |
218 } | 222 } |
OLD | NEW |