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

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

Issue 6793008: Replacing base::DIR_TEMP with ScopedTempDir when appropriate. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Paweł's comments on Round 2. Created 9 years, 8 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"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/process_util.h" 13 #include "base/process_util.h"
14 #include "base/string_util.h" 14 #include "base/string_util.h"
15 #include "chrome/installer/util/work_item.h" 15 #include "chrome/installer/util/work_item.h"
16 #include "chrome/installer/util/move_tree_work_item.h" 16 #include "chrome/installer/util/move_tree_work_item.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace { 19 namespace {
20 class MoveTreeWorkItemTest : public testing::Test { 20 class MoveTreeWorkItemTest : public testing::Test {
21 protected: 21 protected:
22 virtual void SetUp() { 22 virtual void SetUp() {
23 // Name a subdirectory of the user temp directory. 23 ASSERT_TRUE(temp_from_dir_.CreateUniqueTempDir());
24 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &test_dir_)); 24 ASSERT_TRUE(temp_to_dir_.CreateUniqueTempDir());
25 test_dir_ = test_dir_.AppendASCII("MoveTreeWorkItemTest");
26
27 // Create a fresh, empty copy of this test directory.
28 file_util::Delete(test_dir_, true);
29 file_util::CreateDirectoryW(test_dir_);
30
31 // Create a tempory directory under the test directory.
32 temp_dir_ = test_dir_.AppendASCII("temp");
33 file_util::CreateDirectoryW(temp_dir_);
34
35 ASSERT_TRUE(file_util::PathExists(test_dir_));
36 ASSERT_TRUE(file_util::PathExists(temp_dir_));
37 } 25 }
38 26
39 virtual void TearDown() { 27 ScopedTempDir temp_from_dir_;
40 // Clean up test directory 28 ScopedTempDir temp_to_dir_;
41 ASSERT_TRUE(file_util::Delete(test_dir_, true));
42 ASSERT_FALSE(file_util::PathExists(test_dir_));
43 }
44
45 // the path to temporary directory used to contain the test operations
46 FilePath test_dir_;
47 FilePath temp_dir_;
48 }; 29 };
49 30
50 // Simple function to dump some text into a new file. 31 // Simple function to dump some text into a new file.
51 void CreateTextFile(const std::wstring& filename, 32 void CreateTextFile(const std::wstring& filename,
52 const std::wstring& contents) { 33 const std::wstring& contents) {
53 std::ofstream file; 34 std::ofstream file;
54 file.open(filename.c_str()); 35 file.open(filename.c_str());
55 ASSERT_TRUE(file.is_open()); 36 ASSERT_TRUE(file.is_open());
56 file << contents; 37 file << contents;
57 file.close(); 38 file.close();
(...skipping 11 matching lines...) Expand all
69 } 50 }
70 51
71 wchar_t text_content_1[] = L"Gooooooooooooooooooooogle"; 52 wchar_t text_content_1[] = L"Gooooooooooooooooooooogle";
72 wchar_t text_content_2[] = L"Overwrite Me"; 53 wchar_t text_content_2[] = L"Overwrite Me";
73 }; 54 };
74 55
75 // Move one directory from source to destination when destination does not 56 // Move one directory from source to destination when destination does not
76 // exist. 57 // exist.
77 TEST_F(MoveTreeWorkItemTest, MoveDirectory) { 58 TEST_F(MoveTreeWorkItemTest, MoveDirectory) {
78 // Create two level deep source dir 59 // Create two level deep source dir
79 FilePath from_dir1(test_dir_); 60 FilePath from_dir1(temp_from_dir_.path());
80 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 61 from_dir1 = from_dir1.AppendASCII("From_Dir1");
81 file_util::CreateDirectory(from_dir1); 62 file_util::CreateDirectory(from_dir1);
82 ASSERT_TRUE(file_util::PathExists(from_dir1)); 63 ASSERT_TRUE(file_util::PathExists(from_dir1));
83 64
84 FilePath from_dir2(from_dir1); 65 FilePath from_dir2(from_dir1);
85 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 66 from_dir2 = from_dir2.AppendASCII("From_Dir2");
86 file_util::CreateDirectory(from_dir2); 67 file_util::CreateDirectory(from_dir2);
87 ASSERT_TRUE(file_util::PathExists(from_dir2)); 68 ASSERT_TRUE(file_util::PathExists(from_dir2));
88 69
89 FilePath from_file(from_dir2); 70 FilePath from_file(from_dir2);
90 from_file = from_file.AppendASCII("From_File"); 71 from_file = from_file.AppendASCII("From_File");
91 CreateTextFile(from_file.value(), text_content_1); 72 CreateTextFile(from_file.value(), text_content_1);
92 ASSERT_TRUE(file_util::PathExists(from_file)); 73 ASSERT_TRUE(file_util::PathExists(from_file));
93 74
94 // Generate destination path 75 // Generate destination path
95 FilePath to_dir(test_dir_); 76 FilePath to_dir(temp_from_dir_.path());
96 to_dir = to_dir.AppendASCII("To_Dir"); 77 to_dir = to_dir.AppendASCII("To_Dir");
97 ASSERT_FALSE(file_util::PathExists(to_dir)); 78 ASSERT_FALSE(file_util::PathExists(to_dir));
98 79
99 FilePath to_file(to_dir); 80 FilePath to_file(to_dir);
100 to_file = to_file.AppendASCII("From_Dir2"); 81 to_file = to_file.AppendASCII("From_Dir2");
101 to_file = to_file.AppendASCII("From_File"); 82 to_file = to_file.AppendASCII("From_File");
102 ASSERT_FALSE(file_util::PathExists(to_file)); 83 ASSERT_FALSE(file_util::PathExists(to_file));
103 84
104 // test Do() 85 // test Do()
105 scoped_ptr<MoveTreeWorkItem> work_item( 86 scoped_ptr<MoveTreeWorkItem> work_item(
106 WorkItem::CreateMoveTreeWorkItem(from_dir1, to_dir, temp_dir_)); 87 WorkItem::CreateMoveTreeWorkItem(from_dir1, to_dir, temp_to_dir_.path()));
107 EXPECT_TRUE(work_item->Do()); 88 EXPECT_TRUE(work_item->Do());
108 89
109 EXPECT_FALSE(file_util::PathExists(from_dir1)); 90 EXPECT_FALSE(file_util::PathExists(from_dir1));
110 EXPECT_TRUE(file_util::PathExists(to_dir)); 91 EXPECT_TRUE(file_util::PathExists(to_dir));
111 EXPECT_TRUE(file_util::PathExists(to_file)); 92 EXPECT_TRUE(file_util::PathExists(to_file));
112 93
113 // test rollback() 94 // test rollback()
114 work_item->Rollback(); 95 work_item->Rollback();
115 96
116 EXPECT_TRUE(file_util::PathExists(from_dir1)); 97 EXPECT_TRUE(file_util::PathExists(from_dir1));
117 EXPECT_TRUE(file_util::PathExists(from_file)); 98 EXPECT_TRUE(file_util::PathExists(from_file));
118 EXPECT_FALSE(file_util::PathExists(to_dir)); 99 EXPECT_FALSE(file_util::PathExists(to_dir));
119 } 100 }
120 101
121 // Move one directory from source to destination when destination already 102 // Move one directory from source to destination when destination already
122 // exists. 103 // exists.
123 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExists) { 104 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExists) {
124 // Create two level deep source dir 105 // Create two level deep source dir
125 FilePath from_dir1(test_dir_); 106 FilePath from_dir1(temp_from_dir_.path());
126 from_dir1 = from_dir1.AppendASCII("From_Dir1"); 107 from_dir1 = from_dir1.AppendASCII("From_Dir1");
127 file_util::CreateDirectory(from_dir1); 108 file_util::CreateDirectory(from_dir1);
128 ASSERT_TRUE(file_util::PathExists(from_dir1)); 109 ASSERT_TRUE(file_util::PathExists(from_dir1));
129 110
130 FilePath from_dir2(from_dir1); 111 FilePath from_dir2(from_dir1);
131 from_dir2 = from_dir2.AppendASCII("From_Dir2"); 112 from_dir2 = from_dir2.AppendASCII("From_Dir2");
132 file_util::CreateDirectory(from_dir2); 113 file_util::CreateDirectory(from_dir2);
133 ASSERT_TRUE(file_util::PathExists(from_dir2)); 114 ASSERT_TRUE(file_util::PathExists(from_dir2));
134 115
135 FilePath from_file(from_dir2); 116 FilePath from_file(from_dir2);
136 from_file = from_file.AppendASCII("From_File"); 117 from_file = from_file.AppendASCII("From_File");
137 CreateTextFile(from_file.value(), text_content_1); 118 CreateTextFile(from_file.value(), text_content_1);
138 ASSERT_TRUE(file_util::PathExists(from_file)); 119 ASSERT_TRUE(file_util::PathExists(from_file));
139 120
140 // Create destination path 121 // Create destination path
141 FilePath to_dir(test_dir_); 122 FilePath to_dir(temp_from_dir_.path());
142 to_dir = to_dir.AppendASCII("To_Dir"); 123 to_dir = to_dir.AppendASCII("To_Dir");
143 file_util::CreateDirectory(to_dir); 124 file_util::CreateDirectory(to_dir);
144 ASSERT_TRUE(file_util::PathExists(to_dir)); 125 ASSERT_TRUE(file_util::PathExists(to_dir));
145 126
146 FilePath orig_to_file(to_dir); 127 FilePath orig_to_file(to_dir);
147 orig_to_file = orig_to_file.AppendASCII("To_File"); 128 orig_to_file = orig_to_file.AppendASCII("To_File");
148 CreateTextFile(orig_to_file.value(), text_content_2); 129 CreateTextFile(orig_to_file.value(), text_content_2);
149 ASSERT_TRUE(file_util::PathExists(orig_to_file)); 130 ASSERT_TRUE(file_util::PathExists(orig_to_file));
150 131
151 FilePath new_to_file(to_dir); 132 FilePath new_to_file(to_dir);
152 new_to_file = new_to_file.AppendASCII("From_Dir2"); 133 new_to_file = new_to_file.AppendASCII("From_Dir2");
153 new_to_file = new_to_file.AppendASCII("From_File"); 134 new_to_file = new_to_file.AppendASCII("From_File");
154 ASSERT_FALSE(file_util::PathExists(new_to_file)); 135 ASSERT_FALSE(file_util::PathExists(new_to_file));
155 136
156 // test Do() 137 // test Do()
157 scoped_ptr<MoveTreeWorkItem> work_item( 138 scoped_ptr<MoveTreeWorkItem> work_item(
158 WorkItem::CreateMoveTreeWorkItem(from_dir1, to_dir, temp_dir_)); 139 WorkItem::CreateMoveTreeWorkItem(from_dir1, to_dir, temp_to_dir_.path()));
159 EXPECT_TRUE(work_item->Do()); 140 EXPECT_TRUE(work_item->Do());
160 141
161 EXPECT_FALSE(file_util::PathExists(from_dir1)); 142 EXPECT_FALSE(file_util::PathExists(from_dir1));
162 EXPECT_TRUE(file_util::PathExists(to_dir)); 143 EXPECT_TRUE(file_util::PathExists(to_dir));
163 EXPECT_TRUE(file_util::PathExists(new_to_file)); 144 EXPECT_TRUE(file_util::PathExists(new_to_file));
164 EXPECT_FALSE(file_util::PathExists(orig_to_file)); 145 EXPECT_FALSE(file_util::PathExists(orig_to_file));
165 146
166 // test rollback() 147 // test rollback()
167 work_item->Rollback(); 148 work_item->Rollback();
168 149
169 EXPECT_TRUE(file_util::PathExists(from_dir1)); 150 EXPECT_TRUE(file_util::PathExists(from_dir1));
170 EXPECT_TRUE(file_util::PathExists(to_dir)); 151 EXPECT_TRUE(file_util::PathExists(to_dir));
171 EXPECT_FALSE(file_util::PathExists(new_to_file)); 152 EXPECT_FALSE(file_util::PathExists(new_to_file));
172 EXPECT_TRUE(file_util::PathExists(orig_to_file)); 153 EXPECT_TRUE(file_util::PathExists(orig_to_file));
173 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(text_content_2)); 154 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(text_content_2));
174 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1)); 155 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1));
175 } 156 }
176 157
177 // Move one file from source to destination when destination does not 158 // Move one file from source to destination when destination does not
178 // exist. 159 // exist.
179 TEST_F(MoveTreeWorkItemTest, MoveAFile) { 160 TEST_F(MoveTreeWorkItemTest, MoveAFile) {
180 // Create a file inside source dir 161 // Create a file inside source dir
181 FilePath from_dir(test_dir_); 162 FilePath from_dir(temp_from_dir_.path());
182 from_dir = from_dir.AppendASCII("From_Dir"); 163 from_dir = from_dir.AppendASCII("From_Dir");
183 file_util::CreateDirectory(from_dir); 164 file_util::CreateDirectory(from_dir);
184 ASSERT_TRUE(file_util::PathExists(from_dir)); 165 ASSERT_TRUE(file_util::PathExists(from_dir));
185 166
186 FilePath from_file(from_dir); 167 FilePath from_file(from_dir);
187 from_file = from_file.AppendASCII("From_File"); 168 from_file = from_file.AppendASCII("From_File");
188 CreateTextFile(from_file.value(), text_content_1); 169 CreateTextFile(from_file.value(), text_content_1);
189 ASSERT_TRUE(file_util::PathExists(from_file)); 170 ASSERT_TRUE(file_util::PathExists(from_file));
190 171
191 // Generate destination file name 172 // Generate destination file name
192 FilePath to_file(test_dir_); 173 FilePath to_file(temp_from_dir_.path());
193 to_file = to_file.AppendASCII("To_File"); 174 to_file = to_file.AppendASCII("To_File");
194 ASSERT_FALSE(file_util::PathExists(to_file)); 175 ASSERT_FALSE(file_util::PathExists(to_file));
195 176
196 // test Do() 177 // test Do()
197 scoped_ptr<MoveTreeWorkItem> work_item( 178 scoped_ptr<MoveTreeWorkItem> work_item(
198 WorkItem::CreateMoveTreeWorkItem(from_file, to_file, temp_dir_)); 179 WorkItem::CreateMoveTreeWorkItem(
180 from_file, to_file, temp_to_dir_.path()));
199 EXPECT_TRUE(work_item->Do()); 181 EXPECT_TRUE(work_item->Do());
200 182
201 EXPECT_TRUE(file_util::PathExists(from_dir)); 183 EXPECT_TRUE(file_util::PathExists(from_dir));
202 EXPECT_FALSE(file_util::PathExists(from_file)); 184 EXPECT_FALSE(file_util::PathExists(from_file));
203 EXPECT_TRUE(file_util::PathExists(to_file)); 185 EXPECT_TRUE(file_util::PathExists(to_file));
204 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1)); 186 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1));
205 187
206 // test rollback() 188 // test rollback()
207 work_item->Rollback(); 189 work_item->Rollback();
208 190
209 EXPECT_TRUE(file_util::PathExists(from_dir)); 191 EXPECT_TRUE(file_util::PathExists(from_dir));
210 EXPECT_TRUE(file_util::PathExists(from_file)); 192 EXPECT_TRUE(file_util::PathExists(from_file));
211 EXPECT_FALSE(file_util::PathExists(to_file)); 193 EXPECT_FALSE(file_util::PathExists(to_file));
212 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1)); 194 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1));
213 } 195 }
214 196
215 // Move one file from source to destination when destination already 197 // Move one file from source to destination when destination already
216 // exists. 198 // exists.
217 TEST_F(MoveTreeWorkItemTest, MoveFileDestExists) { 199 TEST_F(MoveTreeWorkItemTest, MoveFileDestExists) {
218 // Create a file inside source dir 200 // Create a file inside source dir
219 FilePath from_dir(test_dir_); 201 FilePath from_dir(temp_from_dir_.path());
220 from_dir = from_dir.AppendASCII("From_Dir"); 202 from_dir = from_dir.AppendASCII("From_Dir");
221 file_util::CreateDirectory(from_dir); 203 file_util::CreateDirectory(from_dir);
222 ASSERT_TRUE(file_util::PathExists(from_dir)); 204 ASSERT_TRUE(file_util::PathExists(from_dir));
223 205
224 FilePath from_file(from_dir); 206 FilePath from_file(from_dir);
225 from_file = from_file.AppendASCII("From_File"); 207 from_file = from_file.AppendASCII("From_File");
226 CreateTextFile(from_file.value(), text_content_1); 208 CreateTextFile(from_file.value(), text_content_1);
227 ASSERT_TRUE(file_util::PathExists(from_file)); 209 ASSERT_TRUE(file_util::PathExists(from_file));
228 210
229 // Create destination path 211 // Create destination path
230 FilePath to_dir(test_dir_); 212 FilePath to_dir(temp_from_dir_.path());
231 to_dir = to_dir.AppendASCII("To_Dir"); 213 to_dir = to_dir.AppendASCII("To_Dir");
232 file_util::CreateDirectory(to_dir); 214 file_util::CreateDirectory(to_dir);
233 ASSERT_TRUE(file_util::PathExists(to_dir)); 215 ASSERT_TRUE(file_util::PathExists(to_dir));
234 216
235 FilePath to_file(to_dir); 217 FilePath to_file(to_dir);
236 to_file = to_file.AppendASCII("To_File"); 218 to_file = to_file.AppendASCII("To_File");
237 CreateTextFile(to_file.value(), text_content_2); 219 CreateTextFile(to_file.value(), text_content_2);
238 ASSERT_TRUE(file_util::PathExists(to_file)); 220 ASSERT_TRUE(file_util::PathExists(to_file));
239 221
240 // test Do() 222 // test Do()
241 scoped_ptr<MoveTreeWorkItem> work_item( 223 scoped_ptr<MoveTreeWorkItem> work_item(
242 WorkItem::CreateMoveTreeWorkItem(from_file, to_dir, temp_dir_)); 224 WorkItem::CreateMoveTreeWorkItem(from_file, to_dir, temp_to_dir_.path()));
243 EXPECT_TRUE(work_item->Do()); 225 EXPECT_TRUE(work_item->Do());
244 226
245 EXPECT_TRUE(file_util::PathExists(from_dir)); 227 EXPECT_TRUE(file_util::PathExists(from_dir));
246 EXPECT_FALSE(file_util::PathExists(from_file)); 228 EXPECT_FALSE(file_util::PathExists(from_file));
247 EXPECT_TRUE(file_util::PathExists(to_dir)); 229 EXPECT_TRUE(file_util::PathExists(to_dir));
248 EXPECT_FALSE(file_util::PathExists(to_file)); 230 EXPECT_FALSE(file_util::PathExists(to_file));
249 EXPECT_EQ(0, ReadTextFile(to_dir).compare(text_content_1)); 231 EXPECT_EQ(0, ReadTextFile(to_dir).compare(text_content_1));
250 232
251 // test rollback() 233 // test rollback()
252 work_item->Rollback(); 234 work_item->Rollback();
253 235
254 EXPECT_TRUE(file_util::PathExists(from_dir)); 236 EXPECT_TRUE(file_util::PathExists(from_dir));
255 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1)); 237 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1));
256 EXPECT_TRUE(file_util::PathExists(to_dir)); 238 EXPECT_TRUE(file_util::PathExists(to_dir));
257 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_2)); 239 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_2));
258 } 240 }
259 241
260 // Move one file from source to destination when destination already 242 // Move one file from source to destination when destination already
261 // exists and is in use. 243 // exists and is in use.
262 TEST_F(MoveTreeWorkItemTest, MoveFileDestInUse) { 244 TEST_F(MoveTreeWorkItemTest, MoveFileDestInUse) {
263 // Create a file inside source dir 245 // Create a file inside source dir
264 FilePath from_dir(test_dir_); 246 FilePath from_dir(temp_from_dir_.path());
265 from_dir = from_dir.AppendASCII("From_Dir"); 247 from_dir = from_dir.AppendASCII("From_Dir");
266 file_util::CreateDirectory(from_dir); 248 file_util::CreateDirectory(from_dir);
267 ASSERT_TRUE(file_util::PathExists(from_dir)); 249 ASSERT_TRUE(file_util::PathExists(from_dir));
268 250
269 FilePath from_file(from_dir); 251 FilePath from_file(from_dir);
270 from_file = from_file.AppendASCII("From_File"); 252 from_file = from_file.AppendASCII("From_File");
271 CreateTextFile(from_file.value(), text_content_1); 253 CreateTextFile(from_file.value(), text_content_1);
272 ASSERT_TRUE(file_util::PathExists(from_file)); 254 ASSERT_TRUE(file_util::PathExists(from_file));
273 255
274 // Create an executable in destination path by copying ourself to it. 256 // Create an executable in destination path by copying ourself to it.
275 FilePath to_dir(test_dir_); 257 FilePath to_dir(temp_from_dir_.path());
276 to_dir = to_dir.AppendASCII("To_Dir"); 258 to_dir = to_dir.AppendASCII("To_Dir");
277 file_util::CreateDirectory(to_dir); 259 file_util::CreateDirectory(to_dir);
278 ASSERT_TRUE(file_util::PathExists(to_dir)); 260 ASSERT_TRUE(file_util::PathExists(to_dir));
279 261
280 wchar_t exe_full_path_str[MAX_PATH]; 262 wchar_t exe_full_path_str[MAX_PATH];
281 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH); 263 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH);
282 FilePath exe_full_path(exe_full_path_str); 264 FilePath exe_full_path(exe_full_path_str);
283 FilePath to_file(to_dir); 265 FilePath to_file(to_dir);
284 to_file = to_file.AppendASCII("To_File"); 266 to_file = to_file.AppendASCII("To_File");
285 file_util::CopyFile(exe_full_path, to_file); 267 file_util::CopyFile(exe_full_path, to_file);
286 ASSERT_TRUE(file_util::PathExists(to_file)); 268 ASSERT_TRUE(file_util::PathExists(to_file));
287 269
288 // Run the executable in destination path 270 // Run the executable in destination path
289 STARTUPINFOW si = {sizeof(si)}; 271 STARTUPINFOW si = {sizeof(si)};
290 PROCESS_INFORMATION pi = {0}; 272 PROCESS_INFORMATION pi = {0};
291 ASSERT_TRUE(::CreateProcess(NULL, 273 ASSERT_TRUE(::CreateProcess(NULL,
292 const_cast<wchar_t*>(to_file.value().c_str()), 274 const_cast<wchar_t*>(to_file.value().c_str()),
293 NULL, NULL, FALSE, 275 NULL, NULL, FALSE,
294 CREATE_NO_WINDOW | CREATE_SUSPENDED, 276 CREATE_NO_WINDOW | CREATE_SUSPENDED,
295 NULL, NULL, &si, &pi)); 277 NULL, NULL, &si, &pi));
296 278
297 // test Do() 279 // test Do()
298 scoped_ptr<MoveTreeWorkItem> work_item( 280 scoped_ptr<MoveTreeWorkItem> work_item(
299 WorkItem::CreateMoveTreeWorkItem(from_file, to_file, temp_dir_)); 281 WorkItem::CreateMoveTreeWorkItem(
282 from_file, to_file, temp_to_dir_.path()));
300 EXPECT_TRUE(work_item->Do()); 283 EXPECT_TRUE(work_item->Do());
301 284
302 EXPECT_TRUE(file_util::PathExists(from_dir)); 285 EXPECT_TRUE(file_util::PathExists(from_dir));
303 EXPECT_FALSE(file_util::PathExists(from_file)); 286 EXPECT_FALSE(file_util::PathExists(from_file));
304 EXPECT_TRUE(file_util::PathExists(to_dir)); 287 EXPECT_TRUE(file_util::PathExists(to_dir));
305 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1)); 288 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1));
306 289
307 // test rollback() 290 // test rollback()
308 work_item->Rollback(); 291 work_item->Rollback();
309 292
310 EXPECT_TRUE(file_util::PathExists(from_dir)); 293 EXPECT_TRUE(file_util::PathExists(from_dir));
311 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1)); 294 EXPECT_EQ(0, ReadTextFile(from_file).compare(text_content_1));
312 EXPECT_TRUE(file_util::PathExists(to_dir)); 295 EXPECT_TRUE(file_util::PathExists(to_dir));
313 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 296 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
314 297
315 TerminateProcess(pi.hProcess, 0); 298 TerminateProcess(pi.hProcess, 0);
316 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0); 299 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0);
317 CloseHandle(pi.hProcess); 300 CloseHandle(pi.hProcess);
318 CloseHandle(pi.hThread); 301 CloseHandle(pi.hThread);
319 } 302 }
320 303
321 // Move one file that is in use to destination. 304 // Move one file that is in use to destination.
322 TEST_F(MoveTreeWorkItemTest, MoveFileInUse) { 305 TEST_F(MoveTreeWorkItemTest, MoveFileInUse) {
323 // Create an executable for source by copying ourself to a new source dir. 306 // Create an executable for source by copying ourself to a new source dir.
324 FilePath from_dir(test_dir_); 307 FilePath from_dir(temp_from_dir_.path());
325 from_dir = from_dir.AppendASCII("From_Dir"); 308 from_dir = from_dir.AppendASCII("From_Dir");
326 file_util::CreateDirectory(from_dir); 309 file_util::CreateDirectory(from_dir);
327 ASSERT_TRUE(file_util::PathExists(from_dir)); 310 ASSERT_TRUE(file_util::PathExists(from_dir));
328 311
329 wchar_t exe_full_path_str[MAX_PATH]; 312 wchar_t exe_full_path_str[MAX_PATH];
330 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH); 313 ::GetModuleFileName(NULL, exe_full_path_str, MAX_PATH);
331 FilePath exe_full_path(exe_full_path_str); 314 FilePath exe_full_path(exe_full_path_str);
332 FilePath from_file(from_dir); 315 FilePath from_file(from_dir);
333 from_file = from_file.AppendASCII("From_File"); 316 from_file = from_file.AppendASCII("From_File");
334 file_util::CopyFile(exe_full_path, from_file); 317 file_util::CopyFile(exe_full_path, from_file);
335 ASSERT_TRUE(file_util::PathExists(from_file)); 318 ASSERT_TRUE(file_util::PathExists(from_file));
336 319
337 // Create a destination source dir and generate destination file name. 320 // Create a destination source dir and generate destination file name.
338 FilePath to_dir(test_dir_); 321 FilePath to_dir(temp_from_dir_.path());
339 to_dir = to_dir.AppendASCII("To_Dir"); 322 to_dir = to_dir.AppendASCII("To_Dir");
340 file_util::CreateDirectory(to_dir); 323 file_util::CreateDirectory(to_dir);
341 ASSERT_TRUE(file_util::PathExists(to_dir)); 324 ASSERT_TRUE(file_util::PathExists(to_dir));
342 325
343 FilePath to_file(to_dir); 326 FilePath to_file(to_dir);
344 to_file = to_file.AppendASCII("To_File"); 327 to_file = to_file.AppendASCII("To_File");
345 CreateTextFile(to_file.value(), text_content_1); 328 CreateTextFile(to_file.value(), text_content_1);
346 ASSERT_TRUE(file_util::PathExists(to_file)); 329 ASSERT_TRUE(file_util::PathExists(to_file));
347 330
348 // Run the executable in source path 331 // Run the executable in source path
349 STARTUPINFOW si = {sizeof(si)}; 332 STARTUPINFOW si = {sizeof(si)};
350 PROCESS_INFORMATION pi = {0}; 333 PROCESS_INFORMATION pi = {0};
351 ASSERT_TRUE(::CreateProcess(NULL, 334 ASSERT_TRUE(::CreateProcess(NULL,
352 const_cast<wchar_t*>(from_file.value().c_str()), 335 const_cast<wchar_t*>(from_file.value().c_str()),
353 NULL, NULL, FALSE, 336 NULL, NULL, FALSE,
354 CREATE_NO_WINDOW | CREATE_SUSPENDED, 337 CREATE_NO_WINDOW | CREATE_SUSPENDED,
355 NULL, NULL, &si, &pi)); 338 NULL, NULL, &si, &pi));
356 339
357 // test Do() 340 // test Do()
358 scoped_ptr<MoveTreeWorkItem> work_item( 341 scoped_ptr<MoveTreeWorkItem> work_item(
359 WorkItem::CreateMoveTreeWorkItem(from_file, to_file, temp_dir_)); 342 WorkItem::CreateMoveTreeWorkItem(
343 from_file, to_file, temp_to_dir_.path()));
360 EXPECT_TRUE(work_item->Do()); 344 EXPECT_TRUE(work_item->Do());
361 345
362 EXPECT_TRUE(file_util::PathExists(from_dir)); 346 EXPECT_TRUE(file_util::PathExists(from_dir));
363 EXPECT_FALSE(file_util::PathExists(from_file)); 347 EXPECT_FALSE(file_util::PathExists(from_file));
364 EXPECT_TRUE(file_util::PathExists(to_dir)); 348 EXPECT_TRUE(file_util::PathExists(to_dir));
365 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 349 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
366 350
367 // Close the process and make sure all the conditions after Do() are 351 // Close the process and make sure all the conditions after Do() are
368 // still true. 352 // still true.
369 TerminateProcess(pi.hProcess, 0); 353 TerminateProcess(pi.hProcess, 0);
370 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0); 354 EXPECT_TRUE(WaitForSingleObject(pi.hProcess, 10000) == WAIT_OBJECT_0);
371 CloseHandle(pi.hProcess); 355 CloseHandle(pi.hProcess);
372 CloseHandle(pi.hThread); 356 CloseHandle(pi.hThread);
373 357
374 EXPECT_TRUE(file_util::PathExists(from_dir)); 358 EXPECT_TRUE(file_util::PathExists(from_dir));
375 EXPECT_FALSE(file_util::PathExists(from_file)); 359 EXPECT_FALSE(file_util::PathExists(from_file));
376 EXPECT_TRUE(file_util::PathExists(to_dir)); 360 EXPECT_TRUE(file_util::PathExists(to_dir));
377 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file)); 361 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, to_file));
378 362
379 // test rollback() 363 // test rollback()
380 work_item->Rollback(); 364 work_item->Rollback();
381 365
382 EXPECT_TRUE(file_util::PathExists(from_dir)); 366 EXPECT_TRUE(file_util::PathExists(from_dir));
383 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file)); 367 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file));
384 EXPECT_TRUE(file_util::PathExists(to_dir)); 368 EXPECT_TRUE(file_util::PathExists(to_dir));
385 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1)); 369 EXPECT_EQ(0, ReadTextFile(to_file).compare(text_content_1));
386 } 370 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698