OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include <shlobj.h> | 6 #include <shlobj.h> |
7 | 7 |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
131 for (int i = 0; i < arraysize(failures); i++) { | 131 for (int i = 0; i < arraysize(failures); i++) { |
132 std::vector<PendingMove> string_list; | 132 std::vector<PendingMove> string_list; |
133 EXPECT_FALSE(SUCCEEDED( | 133 EXPECT_FALSE(SUCCEEDED( |
134 MultiSZBytesToStringArray(reinterpret_cast<char*>(failures[i].str), | 134 MultiSZBytesToStringArray(reinterpret_cast<char*>(failures[i].str), |
135 failures[i].length, &string_list))) | 135 failures[i].length, &string_list))) |
136 << failures[i].test_name; | 136 << failures[i].test_name; |
137 } | 137 } |
138 } | 138 } |
139 | 139 |
140 | 140 |
141 TEST_F(DeleteAfterRebootHelperTest, TestFileDeletes) { | 141 TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteScheduleAndUnschedule) { |
142 if (!IsUserAnAdmin()) { | 142 if (!IsUserAnAdmin()) { |
143 return; | 143 return; |
144 } | 144 } |
145 | 145 |
146 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); | 146 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); |
147 | 147 |
148 std::vector<PendingMove> pending_moves; | 148 std::vector<PendingMove> pending_moves; |
149 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); | 149 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); |
150 | 150 |
151 // We should see, somewhere in this key, deletion writs for | 151 // We should see, somewhere in this key, deletion writs for |
(...skipping 26 matching lines...) Expand all Loading... | |
178 // Test that we can remove the pending deletes. | 178 // Test that we can remove the pending deletes. |
179 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); | 179 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); |
180 HRESULT hr = GetPendingMovesValue(&pending_moves); | 180 HRESULT hr = GetPendingMovesValue(&pending_moves); |
181 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); | 181 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
182 | 182 |
183 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); | 183 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); |
184 for (; check_iter != pending_moves.end(); ++check_iter) { | 184 for (; check_iter != pending_moves.end(); ++check_iter) { |
185 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); | 185 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); |
186 } | 186 } |
187 } | 187 } |
188 | |
189 TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteSchedulingWithActualDeletes) { | |
190 if (!IsUserAnAdmin()) { | |
191 return; | |
192 } | |
193 | |
194 std::vector<PendingMove> initial_pending_moves; | |
195 GetPendingMovesValue(&initial_pending_moves); | |
196 size_t initial_pending_moves_size = initial_pending_moves.size(); | |
197 | |
198 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); | |
199 | |
200 std::vector<PendingMove> pending_moves; | |
201 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); | |
202 | |
203 // We should see, somewhere in this key, deletion writs for | |
204 // temp_file_, temp_subdir_file_, temp_subdir_ and temp_dir_ in that order. | |
205 EXPECT_TRUE(pending_moves.size() > 3); | |
206 | |
207 // Get the short form of temp_file_ and use that to match. | |
208 std::wstring short_temp_file(GetShortPathName(temp_file_.value().c_str())); | |
209 | |
210 // Scan for the first expected delete. | |
211 std::vector<PendingMove>::const_iterator iter(pending_moves.begin()); | |
212 for (; iter != pending_moves.end(); iter++) { | |
213 if (MatchPendingDeletePath(short_temp_file, iter->first)) | |
214 break; | |
215 } | |
216 | |
217 // Check that each of the deletes we expect are there in order. | |
218 FilePath expected_paths[] = | |
219 { temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ }; | |
220 for (int i = 0; i < arraysize(expected_paths); i++) { | |
grt (UTC plus 2)
2010/12/01 04:46:54
Prefer preincrement.
robertshield
2010/12/01 14:50:04
Done.
| |
221 EXPECT_FALSE(iter == pending_moves.end()); | |
222 if (iter != pending_moves.end()) { | |
223 std::wstring short_path_name( | |
224 GetShortPathName(expected_paths[i].value().c_str())); | |
225 EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first)); | |
226 iter++; | |
grt (UTC plus 2)
2010/12/01 04:46:54
Prefer preincrement (which has lower cost in this
robertshield
2010/12/01 14:50:04
Done.
| |
227 } | |
228 } | |
229 | |
230 // Delete the temporary directory. | |
231 file_util::Delete(temp_dir_, true); | |
232 | |
233 // Test that we can remove the pending deletes. | |
234 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); | |
235 HRESULT hr = GetPendingMovesValue(&pending_moves); | |
236 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); | |
237 | |
238 EXPECT_EQ(initial_pending_moves_size, pending_moves.size()); | |
239 | |
240 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); | |
241 for (; check_iter != pending_moves.end(); ++check_iter) { | |
242 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); | |
243 } | |
244 } | |
245 | |
OLD | NEW |