Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: chrome/installer/util/move_tree_work_item_unittest.cc

Issue 18286004: Move PathExists to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <windows.h> 5 #include <windows.h>
6 6
7 #include <fstream> 7 #include <fstream>
8 8
9 #include "base/base_paths.h" 9 #include "base/base_paths.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 const wchar_t kTextContent2[] = L"Overwrite Me"; 55 const wchar_t kTextContent2[] = L"Overwrite Me";
56 }; // namespace 56 }; // namespace
57 57
58 // Move one directory from source to destination when destination does not 58 // Move one directory from source to destination when destination does not
59 // exist. 59 // exist.
60 TEST_F(MoveTreeWorkItemTest, MoveDirectory) { 60 TEST_F(MoveTreeWorkItemTest, MoveDirectory) {
61 // Create two level deep source dir 61 // Create two level deep source dir
62 base::FilePath from_dir1(temp_from_dir_.path()); 62 base::FilePath from_dir1(temp_from_dir_.path());
63 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 63 from_dir1 = from_dir1.AppendASCII("From_Dir1");
64 file_util::CreateDirectory(from_dir1); 64 file_util::CreateDirectory(from_dir1);
65 ASSERT_TRUE(file_util::PathExists(from_dir1)); 65 ASSERT_TRUE(base::PathExists(from_dir1));
66 66
67 base::FilePath from_dir2(from_dir1); 67 base::FilePath from_dir2(from_dir1);
68 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 68 from_dir2 = from_dir2.AppendASCII("From_Dir2");
69 file_util::CreateDirectory(from_dir2); 69 file_util::CreateDirectory(from_dir2);
70 ASSERT_TRUE(file_util::PathExists(from_dir2)); 70 ASSERT_TRUE(base::PathExists(from_dir2));
71 71
72 base::FilePath from_file(from_dir2); 72 base::FilePath from_file(from_dir2);
73 from_file = from_file.AppendASCII("From_File"); 73 from_file = from_file.AppendASCII("From_File");
74 CreateTextFile(from_file.value(), kTextContent1); 74 CreateTextFile(from_file.value(), kTextContent1);
75 ASSERT_TRUE(file_util::PathExists(from_file)); 75 ASSERT_TRUE(base::PathExists(from_file));
76 76
77 // Generate destination path 77 // Generate destination path
78 base::FilePath to_dir(temp_from_dir_.path()); 78 base::FilePath to_dir(temp_from_dir_.path());
79 to_dir = to_dir.AppendASCII("To_Dir"); 79 to_dir = to_dir.AppendASCII("To_Dir");
80 ASSERT_FALSE(file_util::PathExists(to_dir)); 80 ASSERT_FALSE(base::PathExists(to_dir));
81 81
82 base::FilePath to_file(to_dir); 82 base::FilePath to_file(to_dir);
83 to_file = to_file.AppendASCII("From_Dir2"); 83 to_file = to_file.AppendASCII("From_Dir2");
84 to_file = to_file.AppendASCII("From_File"); 84 to_file = to_file.AppendASCII("From_File");
85 ASSERT_FALSE(file_util::PathExists(to_file)); 85 ASSERT_FALSE(base::PathExists(to_file));
86 86
87 // test Do() 87 // test Do()
88 scoped_ptr<MoveTreeWorkItem> work_item( 88 scoped_ptr<MoveTreeWorkItem> work_item(
89 WorkItem::CreateMoveTreeWorkItem(from_dir1, 89 WorkItem::CreateMoveTreeWorkItem(from_dir1,
90 to_dir, 90 to_dir,
91 temp_to_dir_.path(), 91 temp_to_dir_.path(),
92 WorkItem::ALWAYS_MOVE)); 92 WorkItem::ALWAYS_MOVE));
93 EXPECT_TRUE(work_item->Do()); 93 EXPECT_TRUE(work_item->Do());
94 94
95 EXPECT_FALSE(file_util::PathExists(from_dir1)); 95 EXPECT_FALSE(base::PathExists(from_dir1));
96 EXPECT_TRUE(file_util::PathExists(to_dir)); 96 EXPECT_TRUE(base::PathExists(to_dir));
97 EXPECT_TRUE(file_util::PathExists(to_file)); 97 EXPECT_TRUE(base::PathExists(to_file));
98 98
99 // test rollback() 99 // test rollback()
100 work_item->Rollback(); 100 work_item->Rollback();
101 101
102 EXPECT_TRUE(file_util::PathExists(from_dir1)); 102 EXPECT_TRUE(base::PathExists(from_dir1));
103 EXPECT_TRUE(file_util::PathExists(from_file)); 103 EXPECT_TRUE(base::PathExists(from_file));
104 EXPECT_FALSE(file_util::PathExists(to_dir)); 104 EXPECT_FALSE(base::PathExists(to_dir));
105 } 105 }
106 106
107 // Move one directory from source to destination when destination already 107 // Move one directory from source to destination when destination already
108 // exists. 108 // exists.
109 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExists) { 109 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExists) {
110 // Create two level deep source dir 110 // Create two level deep source dir
111 base::FilePath from_dir1(temp_from_dir_.path()); 111 base::FilePath from_dir1(temp_from_dir_.path());
112 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 112 from_dir1 = from_dir1.AppendASCII("From_Dir1");
113 file_util::CreateDirectory(from_dir1); 113 file_util::CreateDirectory(from_dir1);
114 ASSERT_TRUE(file_util::PathExists(from_dir1)); 114 ASSERT_TRUE(base::PathExists(from_dir1));
115 115
116 base::FilePath from_dir2(from_dir1); 116 base::FilePath from_dir2(from_dir1);
117 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 117 from_dir2 = from_dir2.AppendASCII("From_Dir2");
118 file_util::CreateDirectory(from_dir2); 118 file_util::CreateDirectory(from_dir2);
119 ASSERT_TRUE(file_util::PathExists(from_dir2)); 119 ASSERT_TRUE(base::PathExists(from_dir2));
120 120
121 base::FilePath from_file(from_dir2); 121 base::FilePath from_file(from_dir2);
122 from_file = from_file.AppendASCII("From_File"); 122 from_file = from_file.AppendASCII("From_File");
123 CreateTextFile(from_file.value(), kTextContent1); 123 CreateTextFile(from_file.value(), kTextContent1);
124 ASSERT_TRUE(file_util::PathExists(from_file)); 124 ASSERT_TRUE(base::PathExists(from_file));
125 125
126 // Create destination path 126 // Create destination path
127 base::FilePath to_dir(temp_from_dir_.path()); 127 base::FilePath to_dir(temp_from_dir_.path());
128 to_dir = to_dir.AppendASCII("To_Dir"); 128 to_dir = to_dir.AppendASCII("To_Dir");
129 file_util::CreateDirectory(to_dir); 129 file_util::CreateDirectory(to_dir);
130 ASSERT_TRUE(file_util::PathExists(to_dir)); 130 ASSERT_TRUE(base::PathExists(to_dir));
131 131
132 base::FilePath orig_to_file(to_dir); 132 base::FilePath orig_to_file(to_dir);
133 orig_to_file = orig_to_file.AppendASCII("To_File"); 133 orig_to_file = orig_to_file.AppendASCII("To_File");
134 CreateTextFile(orig_to_file.value(), kTextContent2); 134 CreateTextFile(orig_to_file.value(), kTextContent2);
135 ASSERT_TRUE(file_util::PathExists(orig_to_file)); 135 ASSERT_TRUE(base::PathExists(orig_to_file));
136 136
137 base::FilePath new_to_file(to_dir); 137 base::FilePath new_to_file(to_dir);
138 new_to_file = new_to_file.AppendASCII("From_Dir2"); 138 new_to_file = new_to_file.AppendASCII("From_Dir2");
139 new_to_file = new_to_file.AppendASCII("From_File"); 139 new_to_file = new_to_file.AppendASCII("From_File");
140 ASSERT_FALSE(file_util::PathExists(new_to_file)); 140 ASSERT_FALSE(base::PathExists(new_to_file));
141 141
142 // test Do(), don't check for duplicates. 142 // test Do(), don't check for duplicates.
143 scoped_ptr<MoveTreeWorkItem> work_item( 143 scoped_ptr<MoveTreeWorkItem> work_item(
144 WorkItem::CreateMoveTreeWorkItem(from_dir1, 144 WorkItem::CreateMoveTreeWorkItem(from_dir1,
145 to_dir, 145 to_dir,
146 temp_to_dir_.path(), 146 temp_to_dir_.path(),
147 WorkItem::ALWAYS_MOVE)); 147 WorkItem::ALWAYS_MOVE));
148 EXPECT_TRUE(work_item->Do()); 148 EXPECT_TRUE(work_item->Do());
149 149
150 EXPECT_FALSE(file_util::PathExists(from_dir1)); 150 EXPECT_FALSE(base::PathExists(from_dir1));
151 EXPECT_TRUE(file_util::PathExists(to_dir)); 151 EXPECT_TRUE(base::PathExists(to_dir));
152 EXPECT_TRUE(file_util::PathExists(new_to_file)); 152 EXPECT_TRUE(base::PathExists(new_to_file));
153 EXPECT_FALSE(file_util::PathExists(orig_to_file)); 153 EXPECT_FALSE(base::PathExists(orig_to_file));
154 154
155 // test rollback() 155 // test rollback()
156 work_item->Rollback(); 156 work_item->Rollback();
157 157
158 EXPECT_TRUE(file_util::PathExists(from_dir1)); 158 EXPECT_TRUE(base::PathExists(from_dir1));
159 EXPECT_TRUE(file_util::PathExists(to_dir)); 159 EXPECT_TRUE(base::PathExists(to_dir));
160 EXPECT_FALSE(file_util::PathExists(new_to_file)); 160 EXPECT_FALSE(base::PathExists(new_to_file));
161 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 161 EXPECT_TRUE(base::PathExists(orig_to_file));
162 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent2)); 162 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent2));
163 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 163 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
164 } 164 }
165 165
166 // Move one file from source to destination when destination does not 166 // Move one file from source to destination when destination does not
167 // exist. 167 // exist.
168 TEST_F(MoveTreeWorkItemTest, MoveAFile) { 168 TEST_F(MoveTreeWorkItemTest, MoveAFile) {
169 // Create a file inside source dir 169 // Create a file inside source dir
170 base::FilePath from_dir(temp_from_dir_.path()); 170 base::FilePath from_dir(temp_from_dir_.path());
171 from_dir = from_dir.AppendASCII("From_Dir"); 171 from_dir = from_dir.AppendASCII("From_Dir");
172 file_util::CreateDirectory(from_dir); 172 file_util::CreateDirectory(from_dir);
173 ASSERT_TRUE(file_util::PathExists(from_dir)); 173 ASSERT_TRUE(base::PathExists(from_dir));
174 174
175 base::FilePath from_file(from_dir); 175 base::FilePath from_file(from_dir);
176 from_file = from_file.AppendASCII("From_File"); 176 from_file = from_file.AppendASCII("From_File");
177 CreateTextFile(from_file.value(), kTextContent1); 177 CreateTextFile(from_file.value(), kTextContent1);
178 ASSERT_TRUE(file_util::PathExists(from_file)); 178 ASSERT_TRUE(base::PathExists(from_file));
179 179
180 // Generate destination file name 180 // Generate destination file name
181 base::FilePath to_file(temp_from_dir_.path()); 181 base::FilePath to_file(temp_from_dir_.path());
182 to_file = to_file.AppendASCII("To_File"); 182 to_file = to_file.AppendASCII("To_File");
183 ASSERT_FALSE(file_util::PathExists(to_file)); 183 ASSERT_FALSE(base::PathExists(to_file));
184 184
185 // test Do() 185 // test Do()
186 scoped_ptr<MoveTreeWorkItem> work_item( 186 scoped_ptr<MoveTreeWorkItem> work_item(
187 WorkItem::CreateMoveTreeWorkItem(from_file, 187 WorkItem::CreateMoveTreeWorkItem(from_file,
188 to_file, 188 to_file,
189 temp_to_dir_.path(), 189 temp_to_dir_.path(),
190 WorkItem::ALWAYS_MOVE)); 190 WorkItem::ALWAYS_MOVE));
191 EXPECT_TRUE(work_item->Do()); 191 EXPECT_TRUE(work_item->Do());
192 192
193 EXPECT_TRUE(file_util::PathExists(from_dir)); 193 EXPECT_TRUE(base::PathExists(from_dir));
194 EXPECT_FALSE(file_util::PathExists(from_file)); 194 EXPECT_FALSE(base::PathExists(from_file));
195 EXPECT_TRUE(file_util::PathExists(to_file)); 195 EXPECT_TRUE(base::PathExists(to_file));
196 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1)); 196 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1));
197 197
198 // test rollback() 198 // test rollback()
199 work_item->Rollback(); 199 work_item->Rollback();
200 200
201 EXPECT_TRUE(file_util::PathExists(from_dir)); 201 EXPECT_TRUE(base::PathExists(from_dir));
202 EXPECT_TRUE(file_util::PathExists(from_file)); 202 EXPECT_TRUE(base::PathExists(from_file));
203 EXPECT_FALSE(file_util::PathExists(to_file)); 203 EXPECT_FALSE(base::PathExists(to_file));
204 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 204 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
205 } 205 }
206 206
207 // Move one file from source to destination when destination already 207 // Move one file from source to destination when destination already
208 // exists. 208 // exists.
209 TEST_F(MoveTreeWorkItemTest, MoveFileDestExists) { 209 TEST_F(MoveTreeWorkItemTest, MoveFileDestExists) {
210 // Create a file inside source dir 210 // Create a file inside source dir
211 base::FilePath from_dir(temp_from_dir_.path()); 211 base::FilePath from_dir(temp_from_dir_.path());
212 from_dir = from_dir.AppendASCII("From_Dir"); 212 from_dir = from_dir.AppendASCII("From_Dir");
213 file_util::CreateDirectory(from_dir); 213 file_util::CreateDirectory(from_dir);
214 ASSERT_TRUE(file_util::PathExists(from_dir)); 214 ASSERT_TRUE(base::PathExists(from_dir));
215 215
216 base::FilePath from_file(from_dir); 216 base::FilePath from_file(from_dir);
217 from_file = from_file.AppendASCII("From_File"); 217 from_file = from_file.AppendASCII("From_File");
218 CreateTextFile(from_file.value(), kTextContent1); 218 CreateTextFile(from_file.value(), kTextContent1);
219 ASSERT_TRUE(file_util::PathExists(from_file)); 219 ASSERT_TRUE(base::PathExists(from_file));
220 220
221 // Create destination path 221 // Create destination path
222 base::FilePath to_dir(temp_from_dir_.path()); 222 base::FilePath to_dir(temp_from_dir_.path());
223 to_dir = to_dir.AppendASCII("To_Dir"); 223 to_dir = to_dir.AppendASCII("To_Dir");
224 file_util::CreateDirectory(to_dir); 224 file_util::CreateDirectory(to_dir);
225 ASSERT_TRUE(file_util::PathExists(to_dir)); 225 ASSERT_TRUE(base::PathExists(to_dir));
226 226
227 base::FilePath to_file(to_dir); 227 base::FilePath to_file(to_dir);
228 to_file = to_file.AppendASCII("To_File"); 228 to_file = to_file.AppendASCII("To_File");
229 CreateTextFile(to_file.value(), kTextContent2); 229 CreateTextFile(to_file.value(), kTextContent2);
230 ASSERT_TRUE(file_util::PathExists(to_file)); 230 ASSERT_TRUE(base::PathExists(to_file));
231 231
232 // test Do() 232 // test Do()
233 scoped_ptr<MoveTreeWorkItem> work_item( 233 scoped_ptr<MoveTreeWorkItem> work_item(
234 WorkItem::CreateMoveTreeWorkItem(from_file, 234 WorkItem::CreateMoveTreeWorkItem(from_file,
235 to_dir, 235 to_dir,
236 temp_to_dir_.path(), 236 temp_to_dir_.path(),
237 WorkItem::ALWAYS_MOVE)); 237 WorkItem::ALWAYS_MOVE));
238 EXPECT_TRUE(work_item->Do()); 238 EXPECT_TRUE(work_item->Do());
239 239
240 EXPECT_TRUE(file_util::PathExists(from_dir)); 240 EXPECT_TRUE(base::PathExists(from_dir));
241 EXPECT_FALSE(file_util::PathExists(from_file)); 241 EXPECT_FALSE(base::PathExists(from_file));
242 EXPECT_TRUE(file_util::PathExists(to_dir)); 242 EXPECT_TRUE(base::PathExists(to_dir));
243 EXPECT_FALSE(file_util::PathExists(to_file)); 243 EXPECT_FALSE(base::PathExists(to_file));
244 EXPECT_EQ(0, ReadTextFile(to_dir).compare(kTextContent1)); 244 EXPECT_EQ(0, ReadTextFile(to_dir).compare(kTextContent1));
245 245
246 // test rollback() 246 // test rollback()
247 work_item->Rollback(); 247 work_item->Rollback();
248 248
249 EXPECT_TRUE(file_util::PathExists(from_dir)); 249 EXPECT_TRUE(base::PathExists(from_dir));
250 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 250 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
251 EXPECT_TRUE(file_util::PathExists(to_dir)); 251 EXPECT_TRUE(base::PathExists(to_dir));
252 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent2)); 252 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent2));
253 } 253 }
254 254
255 // Move one file from source to destination when destination already 255 // Move one file from source to destination when destination already
256 // exists and is in use. 256 // exists and is in use.
257 TEST_F(MoveTreeWorkItemTest, MoveFileDestInUse) { 257 TEST_F(MoveTreeWorkItemTest, MoveFileDestInUse) {
258 // Create a file inside source dir 258 // Create a file inside source dir
259 base::FilePath from_dir(temp_from_dir_.path()); 259 base::FilePath from_dir(temp_from_dir_.path());
260 from_dir = from_dir.AppendASCII("From_Dir"); 260 from_dir = from_dir.AppendASCII("From_Dir");
261 file_util::CreateDirectory(from_dir); 261 file_util::CreateDirectory(from_dir);
262 ASSERT_TRUE(file_util::PathExists(from_dir)); 262 ASSERT_TRUE(base::PathExists(from_dir));
263 263
264 base::FilePath from_file(from_dir); 264 base::FilePath from_file(from_dir);
265 from_file = from_file.AppendASCII("From_File"); 265 from_file = from_file.AppendASCII("From_File");
266 CreateTextFile(from_file.value(), kTextContent1); 266 CreateTextFile(from_file.value(), kTextContent1);
267 ASSERT_TRUE(file_util::PathExists(from_file)); 267 ASSERT_TRUE(base::PathExists(from_file));
268 268
269 // Create an executable in destination path by copying ourself to it. 269 // Create an executable in destination path by copying ourself to it.
270 base::FilePath to_dir(temp_from_dir_.path()); 270 base::FilePath to_dir(temp_from_dir_.path());
271 to_dir = to_dir.AppendASCII("To_Dir"); 271 to_dir = to_dir.AppendASCII("To_Dir");
272 file_util::CreateDirectory(to_dir); 272 file_util::CreateDirectory(to_dir);
273 ASSERT_TRUE(file_util::PathExists(to_dir)); 273 ASSERT_TRUE(base::PathExists(to_dir));
274 274
275 wchar_t exe_full_path_str[MAX_PATH]; 275 wchar_t exe_full_path_str[MAX_PATH];
276 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH); 276 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH);
277 base::FilePath exe_full_path(exe_full_path_str); 277 base::FilePath exe_full_path(exe_full_path_str);
278 base::FilePath to_file(to_dir); 278 base::FilePath to_file(to_dir);
279 to_file = to_file.AppendASCII("To_File"); 279 to_file = to_file.AppendASCII("To_File");
280 base::CopyFile(exe_full_path, to_file); 280 base::CopyFile(exe_full_path, to_file);
281 ASSERT_TRUE(file_util::PathExists(to_file)); 281 ASSERT_TRUE(base::PathExists(to_file));
282 282
283 // Run the executable in destination path 283 // Run the executable in destination path
284 STARTUPINFOW si = {sizeof(si)}; 284 STARTUPINFOW si = {sizeof(si)};
285 PROCESS_INFORMATION pi = {0}; 285 PROCESS_INFORMATION pi = {0};
286 ASSERT_TRUE(::CreateProcess(NULL, 286 ASSERT_TRUE(::CreateProcess(NULL,
287 const_cast<wchar_t*>(to_file.value().c_str()), 287 const_cast<wchar_t*>(to_file.value().c_str()),
288 NULL, NULL, FALSE, 288 NULL, NULL, FALSE,
289 CREATE_NO_WINDOW | CREATE_SUSPENDED, 289 CREATE_NO_WINDOW | CREATE_SUSPENDED,
290 NULL, NULL, &si, &pi)); 290 NULL, NULL, &si, &pi));
291 291
292 // test Do() 292 // test Do()
293 scoped_ptr<MoveTreeWorkItem> work_item( 293 scoped_ptr<MoveTreeWorkItem> work_item(
294 WorkItem::CreateMoveTreeWorkItem(from_file, 294 WorkItem::CreateMoveTreeWorkItem(from_file,
295 to_file, 295 to_file,
296 temp_to_dir_.path(), 296 temp_to_dir_.path(),
297 WorkItem::ALWAYS_MOVE)); 297 WorkItem::ALWAYS_MOVE));
298 EXPECT_TRUE(work_item->Do()); 298 EXPECT_TRUE(work_item->Do());
299 299
300 EXPECT_TRUE(file_util::PathExists(from_dir)); 300 EXPECT_TRUE(base::PathExists(from_dir));
301 EXPECT_FALSE(file_util::PathExists(from_file)); 301 EXPECT_FALSE(base::PathExists(from_file));
302 EXPECT_TRUE(file_util::PathExists(to_dir)); 302 EXPECT_TRUE(base::PathExists(to_dir));
303 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1)); 303 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1));
304 304
305 // test rollback() 305 // test rollback()
306 work_item->Rollback(); 306 work_item->Rollback();
307 307
308 EXPECT_TRUE(file_util::PathExists(from_dir)); 308 EXPECT_TRUE(base::PathExists(from_dir));
309 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 309 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
310 EXPECT_TRUE(file_util::PathExists(to_dir)); 310 EXPECT_TRUE(base::PathExists(to_dir));
311 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 311 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
312 312
313 TerminateProcess(pi.hProcess, 0); 313 TerminateProcess(pi.hProcess, 0);
314 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0); 314 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0);
315 CloseHandle(pi.hProcess); 315 CloseHandle(pi.hProcess);
316 CloseHandle(pi.hThread); 316 CloseHandle(pi.hThread);
317 } 317 }
318 318
319 // Move one file that is in use to destination. 319 // Move one file that is in use to destination.
320 TEST_F(MoveTreeWorkItemTest, MoveFileInUse) { 320 TEST_F(MoveTreeWorkItemTest, MoveFileInUse) {
321 // Create an executable for source by copying ourself to a new source dir. 321 // Create an executable for source by copying ourself to a new source dir.
322 base::FilePath from_dir(temp_from_dir_.path()); 322 base::FilePath from_dir(temp_from_dir_.path());
323 from_dir = from_dir.AppendASCII("From_Dir"); 323 from_dir = from_dir.AppendASCII("From_Dir");
324 file_util::CreateDirectory(from_dir); 324 file_util::CreateDirectory(from_dir);
325 ASSERT_TRUE(file_util::PathExists(from_dir)); 325 ASSERT_TRUE(base::PathExists(from_dir));
326 326
327 wchar_t exe_full_path_str[MAX_PATH]; 327 wchar_t exe_full_path_str[MAX_PATH];
328 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH); 328 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH);
329 base::FilePath exe_full_path(exe_full_path_str); 329 base::FilePath exe_full_path(exe_full_path_str);
330 base::FilePath from_file(from_dir); 330 base::FilePath from_file(from_dir);
331 from_file = from_file.AppendASCII("From_File"); 331 from_file = from_file.AppendASCII("From_File");
332 base::CopyFile(exe_full_path, from_file); 332 base::CopyFile(exe_full_path, from_file);
333 ASSERT_TRUE(file_util::PathExists(from_file)); 333 ASSERT_TRUE(base::PathExists(from_file));
334 334
335 // Create a destination source dir and generate destination file name. 335 // Create a destination source dir and generate destination file name.
336 base::FilePath to_dir(temp_from_dir_.path()); 336 base::FilePath to_dir(temp_from_dir_.path());
337 to_dir = to_dir.AppendASCII("To_Dir"); 337 to_dir = to_dir.AppendASCII("To_Dir");
338 file_util::CreateDirectory(to_dir); 338 file_util::CreateDirectory(to_dir);
339 ASSERT_TRUE(file_util::PathExists(to_dir)); 339 ASSERT_TRUE(base::PathExists(to_dir));
340 340
341 base::FilePath to_file(to_dir); 341 base::FilePath to_file(to_dir);
342 to_file = to_file.AppendASCII("To_File"); 342 to_file = to_file.AppendASCII("To_File");
343 CreateTextFile(to_file.value(), kTextContent1); 343 CreateTextFile(to_file.value(), kTextContent1);
344 ASSERT_TRUE(file_util::PathExists(to_file)); 344 ASSERT_TRUE(base::PathExists(to_file));
345 345
346 // Run the executable in source path 346 // Run the executable in source path
347 STARTUPINFOW si = {sizeof(si)}; 347 STARTUPINFOW si = {sizeof(si)};
348 PROCESS_INFORMATION pi = {0}; 348 PROCESS_INFORMATION pi = {0};
349 ASSERT_TRUE(::CreateProcess(NULL, 349 ASSERT_TRUE(::CreateProcess(NULL,
350 const_cast<wchar_t*>(from_file.value().c_str()), 350 const_cast<wchar_t*>(from_file.value().c_str()),
351 NULL, NULL, FALSE, 351 NULL, NULL, FALSE,
352 CREATE_NO_WINDOW | CREATE_SUSPENDED, 352 CREATE_NO_WINDOW | CREATE_SUSPENDED,
353 NULL, NULL, &si, &pi)); 353 NULL, NULL, &si, &pi));
354 354
355 // test Do() 355 // test Do()
356 scoped_ptr<MoveTreeWorkItem> work_item( 356 scoped_ptr<MoveTreeWorkItem> work_item(
357 WorkItem::CreateMoveTreeWorkItem(from_file, 357 WorkItem::CreateMoveTreeWorkItem(from_file,
358 to_file, 358 to_file,
359 temp_to_dir_.path(), 359 temp_to_dir_.path(),
360 WorkItem::ALWAYS_MOVE)); 360 WorkItem::ALWAYS_MOVE));
361 EXPECT_TRUE(work_item->Do()); 361 EXPECT_TRUE(work_item->Do());
362 362
363 EXPECT_TRUE(file_util::PathExists(from_dir)); 363 EXPECT_TRUE(base::PathExists(from_dir));
364 EXPECT_FALSE(file_util::PathExists(from_file)); 364 EXPECT_FALSE(base::PathExists(from_file));
365 EXPECT_TRUE(file_util::PathExists(to_dir)); 365 EXPECT_TRUE(base::PathExists(to_dir));
366 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 366 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
367 367
368 // Close the process and make sure all the conditions after Do() are 368 // Close the process and make sure all the conditions after Do() are
369 // still true. 369 // still true.
370 TerminateProcess(pi.hProcess, 0); 370 TerminateProcess(pi.hProcess, 0);
371 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0); 371 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0);
372 CloseHandle(pi.hProcess); 372 CloseHandle(pi.hProcess);
373 CloseHandle(pi.hThread); 373 CloseHandle(pi.hThread);
374 374
375 EXPECT_TRUE(file_util::PathExists(from_dir)); 375 EXPECT_TRUE(base::PathExists(from_dir));
376 EXPECT_FALSE(file_util::PathExists(from_file)); 376 EXPECT_FALSE(base::PathExists(from_file));
377 EXPECT_TRUE(file_util::PathExists(to_dir)); 377 EXPECT_TRUE(base::PathExists(to_dir));
378 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 378 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
379 379
380 // test rollback() 380 // test rollback()
381 work_item->Rollback(); 381 work_item->Rollback();
382 382
383 EXPECT_TRUE(file_util::PathExists(from_dir)); 383 EXPECT_TRUE(base::PathExists(from_dir));
384 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file)); 384 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file));
385 EXPECT_TRUE(file_util::PathExists(to_dir)); 385 EXPECT_TRUE(base::PathExists(to_dir));
386 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1)); 386 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1));
387 } 387 }
388 388
389 // Move one directory from source to destination when destination already 389 // Move one directory from source to destination when destination already
390 // exists. 390 // exists.
391 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExistsCheckForDuplicatesFull) { 391 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExistsCheckForDuplicatesFull) {
392 // Create two level deep source dir 392 // Create two level deep source dir
393 base::FilePath from_dir1(temp_from_dir_.path()); 393 base::FilePath from_dir1(temp_from_dir_.path());
394 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 394 from_dir1 = from_dir1.AppendASCII("From_Dir1");
395 file_util::CreateDirectory(from_dir1); 395 file_util::CreateDirectory(from_dir1);
396 ASSERT_TRUE(file_util::PathExists(from_dir1)); 396 ASSERT_TRUE(base::PathExists(from_dir1));
397 397
398 base::FilePath from_dir2(from_dir1); 398 base::FilePath from_dir2(from_dir1);
399 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 399 from_dir2 = from_dir2.AppendASCII("From_Dir2");
400 file_util::CreateDirectory(from_dir2); 400 file_util::CreateDirectory(from_dir2);
401 ASSERT_TRUE(file_util::PathExists(from_dir2)); 401 ASSERT_TRUE(base::PathExists(from_dir2));
402 402
403 base::FilePath from_file(from_dir2); 403 base::FilePath from_file(from_dir2);
404 from_file = from_file.AppendASCII("From_File"); 404 from_file = from_file.AppendASCII("From_File");
405 CreateTextFile(from_file.value(), kTextContent1); 405 CreateTextFile(from_file.value(), kTextContent1);
406 ASSERT_TRUE(file_util::PathExists(from_file)); 406 ASSERT_TRUE(base::PathExists(from_file));
407 407
408 // // Create a file hierarchy identical to the one in the source directory. 408 // // Create a file hierarchy identical to the one in the source directory.
409 base::FilePath to_dir(temp_from_dir_.path()); 409 base::FilePath to_dir(temp_from_dir_.path());
410 to_dir = to_dir.AppendASCII("To_Dir"); 410 to_dir = to_dir.AppendASCII("To_Dir");
411 ASSERT_TRUE(installer::test::CopyFileHierarchy(from_dir1, to_dir)); 411 ASSERT_TRUE(installer::test::CopyFileHierarchy(from_dir1, to_dir));
412 412
413 // Lock one of the files in the to destination directory to prevent moves. 413 // Lock one of the files in the to destination directory to prevent moves.
414 base::FilePath orig_to_file( 414 base::FilePath orig_to_file(
415 to_dir.AppendASCII("From_Dir2").AppendASCII("From_File")); 415 to_dir.AppendASCII("From_Dir2").AppendASCII("From_File"));
416 base::MemoryMappedFile mapped_file; 416 base::MemoryMappedFile mapped_file;
(...skipping 11 matching lines...) Expand all
428 // Now test Do() with the check for duplicates. This should pass. 428 // Now test Do() with the check for duplicates. This should pass.
429 work_item.reset( 429 work_item.reset(
430 WorkItem::CreateMoveTreeWorkItem(from_dir1, 430 WorkItem::CreateMoveTreeWorkItem(from_dir1,
431 to_dir, 431 to_dir,
432 temp_to_dir_.path(), 432 temp_to_dir_.path(),
433 WorkItem::CHECK_DUPLICATES)); 433 WorkItem::CHECK_DUPLICATES));
434 EXPECT_TRUE(work_item->Do()); 434 EXPECT_TRUE(work_item->Do());
435 435
436 // Make sure that we "moved" the files, i.e. that the source directory isn't 436 // Make sure that we "moved" the files, i.e. that the source directory isn't
437 // there anymore, 437 // there anymore,
438 EXPECT_FALSE(file_util::PathExists(from_dir1)); 438 EXPECT_FALSE(base::PathExists(from_dir1));
439 // Make sure that the original directory structure and file are still present. 439 // Make sure that the original directory structure and file are still present.
440 EXPECT_TRUE(file_util::PathExists(to_dir)); 440 EXPECT_TRUE(base::PathExists(to_dir));
441 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 441 EXPECT_TRUE(base::PathExists(orig_to_file));
442 // Make sure that the backup path is not empty. 442 // Make sure that the backup path is not empty.
443 EXPECT_FALSE(file_util::IsDirectoryEmpty(temp_to_dir_.path())); 443 EXPECT_FALSE(file_util::IsDirectoryEmpty(temp_to_dir_.path()));
444 444
445 // Check that the work item believes the source to have been moved. 445 // Check that the work item believes the source to have been moved.
446 EXPECT_TRUE(work_item->source_moved_to_backup_); 446 EXPECT_TRUE(work_item->source_moved_to_backup_);
447 EXPECT_FALSE(work_item->moved_to_dest_path_); 447 EXPECT_FALSE(work_item->moved_to_dest_path_);
448 EXPECT_FALSE(work_item->moved_to_backup_); 448 EXPECT_FALSE(work_item->moved_to_backup_);
449 449
450 // test rollback() 450 // test rollback()
451 work_item->Rollback(); 451 work_item->Rollback();
452 452
453 // Once we rollback all the original files should still be there, as should 453 // Once we rollback all the original files should still be there, as should
454 // the source files. 454 // the source files.
455 EXPECT_TRUE(file_util::PathExists(from_dir1)); 455 EXPECT_TRUE(base::PathExists(from_dir1));
456 EXPECT_TRUE(file_util::PathExists(to_dir)); 456 EXPECT_TRUE(base::PathExists(to_dir));
457 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 457 EXPECT_TRUE(base::PathExists(orig_to_file));
458 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1)); 458 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1));
459 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 459 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
460 } 460 }
461 461
462 // Move one directory from source to destination when destination already 462 // Move one directory from source to destination when destination already
463 // exists but contains only a subset of the files in source. 463 // exists but contains only a subset of the files in source.
464 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExistsCheckForDuplicatesPartial) { 464 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExistsCheckForDuplicatesPartial) {
465 // Create two level deep source dir 465 // Create two level deep source dir
466 base::FilePath from_dir1(temp_from_dir_.path()); 466 base::FilePath from_dir1(temp_from_dir_.path());
467 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 467 from_dir1 = from_dir1.AppendASCII("From_Dir1");
468 file_util::CreateDirectory(from_dir1); 468 file_util::CreateDirectory(from_dir1);
469 ASSERT_TRUE(file_util::PathExists(from_dir1)); 469 ASSERT_TRUE(base::PathExists(from_dir1));
470 470
471 base::FilePath from_dir2(from_dir1); 471 base::FilePath from_dir2(from_dir1);
472 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 472 from_dir2 = from_dir2.AppendASCII("From_Dir2");
473 file_util::CreateDirectory(from_dir2); 473 file_util::CreateDirectory(from_dir2);
474 ASSERT_TRUE(file_util::PathExists(from_dir2)); 474 ASSERT_TRUE(base::PathExists(from_dir2));
475 475
476 base::FilePath from_file(from_dir2); 476 base::FilePath from_file(from_dir2);
477 from_file = from_file.AppendASCII("From_File"); 477 from_file = from_file.AppendASCII("From_File");
478 CreateTextFile(from_file.value(), kTextContent1); 478 CreateTextFile(from_file.value(), kTextContent1);
479 ASSERT_TRUE(file_util::PathExists(from_file)); 479 ASSERT_TRUE(base::PathExists(from_file));
480 480
481 base::FilePath from_file2(from_dir2); 481 base::FilePath from_file2(from_dir2);
482 from_file2 = from_file2.AppendASCII("From_File2"); 482 from_file2 = from_file2.AppendASCII("From_File2");
483 CreateTextFile(from_file2.value(), kTextContent2); 483 CreateTextFile(from_file2.value(), kTextContent2);
484 ASSERT_TRUE(file_util::PathExists(from_file2)); 484 ASSERT_TRUE(base::PathExists(from_file2));
485 485
486 // Create destination path 486 // Create destination path
487 base::FilePath to_dir(temp_from_dir_.path()); 487 base::FilePath to_dir(temp_from_dir_.path());
488 to_dir = to_dir.AppendASCII("To_Dir"); 488 to_dir = to_dir.AppendASCII("To_Dir");
489 file_util::CreateDirectory(to_dir); 489 file_util::CreateDirectory(to_dir);
490 ASSERT_TRUE(file_util::PathExists(to_dir)); 490 ASSERT_TRUE(base::PathExists(to_dir));
491 491
492 // Create a sub-directory of the same name as in the source directory. 492 // Create a sub-directory of the same name as in the source directory.
493 base::FilePath to_dir2(to_dir); 493 base::FilePath to_dir2(to_dir);
494 to_dir2 = to_dir2.AppendASCII("From_Dir2"); 494 to_dir2 = to_dir2.AppendASCII("From_Dir2");
495 file_util::CreateDirectory(to_dir2); 495 file_util::CreateDirectory(to_dir2);
496 ASSERT_TRUE(file_util::PathExists(to_dir2)); 496 ASSERT_TRUE(base::PathExists(to_dir2));
497 497
498 // Create one of the files in the to sub-directory, but not the other. 498 // Create one of the files in the to sub-directory, but not the other.
499 base::FilePath orig_to_file(to_dir2); 499 base::FilePath orig_to_file(to_dir2);
500 orig_to_file = orig_to_file.AppendASCII("From_File"); 500 orig_to_file = orig_to_file.AppendASCII("From_File");
501 CreateTextFile(orig_to_file.value(), kTextContent1); 501 CreateTextFile(orig_to_file.value(), kTextContent1);
502 ASSERT_TRUE(file_util::PathExists(orig_to_file)); 502 ASSERT_TRUE(base::PathExists(orig_to_file));
503 503
504 // test Do(), check for duplicates. 504 // test Do(), check for duplicates.
505 scoped_ptr<MoveTreeWorkItem> work_item( 505 scoped_ptr<MoveTreeWorkItem> work_item(
506 WorkItem::CreateMoveTreeWorkItem(from_dir1, 506 WorkItem::CreateMoveTreeWorkItem(from_dir1,
507 to_dir, 507 to_dir,
508 temp_to_dir_.path(), 508 temp_to_dir_.path(),
509 WorkItem::CHECK_DUPLICATES)); 509 WorkItem::CHECK_DUPLICATES));
510 EXPECT_TRUE(work_item->Do()); 510 EXPECT_TRUE(work_item->Do());
511 511
512 // Make sure that we "moved" the files, i.e. that the source directory isn't 512 // Make sure that we "moved" the files, i.e. that the source directory isn't
513 // there anymore, 513 // there anymore,
514 EXPECT_FALSE(file_util::PathExists(from_dir1)); 514 EXPECT_FALSE(base::PathExists(from_dir1));
515 // Make sure that the original directory structure and file are still present. 515 // Make sure that the original directory structure and file are still present.
516 EXPECT_TRUE(file_util::PathExists(to_dir)); 516 EXPECT_TRUE(base::PathExists(to_dir));
517 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 517 EXPECT_TRUE(base::PathExists(orig_to_file));
518 // Make sure that the backup path is not empty. 518 // Make sure that the backup path is not empty.
519 EXPECT_FALSE(file_util::IsDirectoryEmpty(temp_to_dir_.path())); 519 EXPECT_FALSE(file_util::IsDirectoryEmpty(temp_to_dir_.path()));
520 // Make sure that the "new" file is also present. 520 // Make sure that the "new" file is also present.
521 base::FilePath new_to_file2(to_dir2); 521 base::FilePath new_to_file2(to_dir2);
522 new_to_file2 = new_to_file2.AppendASCII("From_File2"); 522 new_to_file2 = new_to_file2.AppendASCII("From_File2");
523 EXPECT_TRUE(file_util::PathExists(new_to_file2)); 523 EXPECT_TRUE(base::PathExists(new_to_file2));
524 524
525 // Check that the work item believes that this was a regular move. 525 // Check that the work item believes that this was a regular move.
526 EXPECT_FALSE(work_item->source_moved_to_backup_); 526 EXPECT_FALSE(work_item->source_moved_to_backup_);
527 EXPECT_TRUE(work_item->moved_to_dest_path_); 527 EXPECT_TRUE(work_item->moved_to_dest_path_);
528 EXPECT_TRUE(work_item->moved_to_backup_); 528 EXPECT_TRUE(work_item->moved_to_backup_);
529 529
530 // test rollback() 530 // test rollback()
531 work_item->Rollback(); 531 work_item->Rollback();
532 532
533 // Once we rollback all the original files should still be there, as should 533 // Once we rollback all the original files should still be there, as should
534 // the source files. 534 // the source files.
535 EXPECT_TRUE(file_util::PathExists(from_dir1)); 535 EXPECT_TRUE(base::PathExists(from_dir1));
536 EXPECT_TRUE(file_util::PathExists(to_dir)); 536 EXPECT_TRUE(base::PathExists(to_dir));
537 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 537 EXPECT_TRUE(base::PathExists(orig_to_file));
538 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1)); 538 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1));
539 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); 539 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1));
540 540
541 // Also, after rollback the new "to" file should be gone. 541 // Also, after rollback the new "to" file should be gone.
542 EXPECT_FALSE(file_util::PathExists(new_to_file2)); 542 EXPECT_FALSE(base::PathExists(new_to_file2));
543 } 543 }
OLDNEW
« no previous file with comments | « chrome/installer/util/move_tree_work_item.cc ('k') | chrome/installer/util/self_cleaning_temp_dir.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698