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

Unified Diff: chrome/installer/util/delete_after_reboot_helper_unittest.cc

Issue 5354006: Fix a problem with the delete-after-reboot code. Removing pending renames of ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/delete_after_reboot_helper.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/delete_after_reboot_helper_unittest.cc
===================================================================
--- chrome/installer/util/delete_after_reboot_helper_unittest.cc (revision 67529)
+++ chrome/installer/util/delete_after_reboot_helper_unittest.cc (working copy)
@@ -138,7 +138,7 @@
}
-TEST_F(DeleteAfterRebootHelperTest, TestFileDeletes) {
+TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteScheduleAndUnschedule) {
if (!IsUserAnAdmin()) {
return;
}
@@ -165,13 +165,13 @@
// Check that each of the deletes we expect are there in order.
FilePath expected_paths[] =
{ temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ };
- for (int i = 0; i < arraysize(expected_paths); i++) {
+ for (int i = 0; i < arraysize(expected_paths); ++i) {
EXPECT_FALSE(iter == pending_moves.end());
if (iter != pending_moves.end()) {
std::wstring short_path_name(
GetShortPathName(expected_paths[i].value().c_str()));
EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first));
- iter++;
+ ++iter;
}
}
@@ -185,3 +185,61 @@
EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first));
}
}
+
+TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteSchedulingWithActualDeletes) {
+ if (!IsUserAnAdmin()) {
+ return;
+ }
+
+ std::vector<PendingMove> initial_pending_moves;
+ GetPendingMovesValue(&initial_pending_moves);
+ size_t initial_pending_moves_size = initial_pending_moves.size();
+
+ EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str()));
+
+ std::vector<PendingMove> pending_moves;
+ EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves)));
+
+ // We should see, somewhere in this key, deletion writs for
+ // temp_file_, temp_subdir_file_, temp_subdir_ and temp_dir_ in that order.
+ EXPECT_TRUE(pending_moves.size() > 3);
+
+ // Get the short form of temp_file_ and use that to match.
+ std::wstring short_temp_file(GetShortPathName(temp_file_.value().c_str()));
+
+ // Scan for the first expected delete.
+ std::vector<PendingMove>::const_iterator iter(pending_moves.begin());
+ for (; iter != pending_moves.end(); iter++) {
+ if (MatchPendingDeletePath(short_temp_file, iter->first))
+ break;
+ }
+
+ // Check that each of the deletes we expect are there in order.
+ FilePath expected_paths[] =
+ { temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ };
+ for (int i = 0; i < arraysize(expected_paths); ++i) {
+ EXPECT_FALSE(iter == pending_moves.end());
+ if (iter != pending_moves.end()) {
+ std::wstring short_path_name(
+ GetShortPathName(expected_paths[i].value().c_str()));
+ EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first));
+ ++iter;
+ }
+ }
+
+ // Delete the temporary directory.
+ file_util::Delete(temp_dir_, true);
+
+ // Test that we can remove the pending deletes.
+ EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str()));
+ HRESULT hr = GetPendingMovesValue(&pending_moves);
+ EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
+
+ EXPECT_EQ(initial_pending_moves_size, pending_moves.size());
+
+ std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin());
+ for (; check_iter != pending_moves.end(); ++check_iter) {
+ EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first));
+ }
+}
+
« no previous file with comments | « chrome/installer/util/delete_after_reboot_helper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698