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

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

Issue 6598065: Add rollback support to DeleteRegKeyWorkItem.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/logging.h"
6 #include "base/scoped_ptr.h"
7 #include "base/win/registry.h"
8 #include "chrome/installer/util/delete_reg_key_work_item.h"
9 #include "chrome/installer/util/work_item.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 using base::win::RegKey;
13
14 namespace {
15 wchar_t test_root[] = L"SOFTWARE\\TmpTmp";
16 }
17
18 class DeleteRegKeyWorkItemTest : public testing::Test {
19 protected:
20 virtual void SetUp() {
21 // Create a temporary key for testing
22 RegKey key(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS);
23 key.DeleteKey(test_root);
24 ASSERT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, test_root, KEY_READ));
25 ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, test_root,
26 KEY_READ));
27 }
28
29 virtual void TearDown() {
30 logging::CloseLogFile();
31 // Clean up the temporary key
32 RegKey key(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS);
33 ASSERT_EQ(ERROR_SUCCESS, key.DeleteKey(test_root));
34 }
35 };
36
37 // Test that deleting a key that doesn't exist succeeds, and that rollback does
38 // nothing.
39 TEST_F(DeleteRegKeyWorkItemTest, TestNoKey) {
40 RegKey key;
41 std::wstring key_name(std::wstring(test_root) + L"\\NoKeyHere");
42 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
43 KEY_READ));
44 scoped_ptr<DeleteRegKeyWorkItem> item(
45 WorkItem::CreateDeleteRegKeyWorkItem(HKEY_CURRENT_USER, key_name));
46 EXPECT_TRUE(item->Do());
47 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
48 KEY_READ));
49 item->Rollback();
50 item.reset();
51 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
52 KEY_READ));
53 }
54
55 // Test that deleting a subkey of a key that doesn't exist succeeds, and that
56 // rollback does nothing.
57 TEST_F(DeleteRegKeyWorkItemTest, TestNoSubkey) {
58 RegKey key;
59 std::wstring key_name(std::wstring(test_root) + L"\\NoKeyHere\\OrHere");
60 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
61 KEY_READ));
62 scoped_ptr<DeleteRegKeyWorkItem> item(
63 WorkItem::CreateDeleteRegKeyWorkItem(HKEY_CURRENT_USER, key_name));
64 EXPECT_TRUE(item->Do());
65 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
66 KEY_READ));
67 item->Rollback();
68 item.reset();
69 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
70 KEY_READ));
71 }
72
73 // Test that deleting an empty key succeeds, and that rollback brings it back.
74 TEST_F(DeleteRegKeyWorkItemTest, TestEmptyKey) {
75 RegKey key;
76 std::wstring key_name(std::wstring(test_root) + L"\\EmptyKey");
77 EXPECT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, key_name.c_str(),
78 KEY_WRITE));
79 key.Close();
80 scoped_ptr<DeleteRegKeyWorkItem> item(
81 WorkItem::CreateDeleteRegKeyWorkItem(HKEY_CURRENT_USER, key_name));
82 EXPECT_TRUE(item->Do());
83 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
84 KEY_READ));
85 item->Rollback();
86 item.reset();
87 EXPECT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
88 KEY_READ));
89 }
90
91 // Test that deleting a key with subkeys and values succeeds, and that rollback
92 // brings them all back.
robertshield 2011/03/01 16:04:43 Could you also add a test that tests deleting a ke
grt (UTC plus 2) 2011/03/01 20:54:02 Done.
93 TEST_F(DeleteRegKeyWorkItemTest, TestNonEmptyKey) {
94 RegKey key;
95 std::wstring key_name(std::wstring(test_root) + L"\\NonEmptyKey");
96 EXPECT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, key_name.c_str(),
97 KEY_WRITE));
98 EXPECT_EQ(ERROR_SUCCESS, key.WriteValue(NULL, key_name.c_str()));
99 EXPECT_EQ(ERROR_SUCCESS, key.CreateKey(L"Subkey", KEY_WRITE));
100 EXPECT_EQ(ERROR_SUCCESS, key.WriteValue(L"SomeValue", 1U));
101 key.Close();
102 scoped_ptr<DeleteRegKeyWorkItem> item(
103 WorkItem::CreateDeleteRegKeyWorkItem(HKEY_CURRENT_USER, key_name));
104 EXPECT_TRUE(item->Do());
105 EXPECT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
106 KEY_READ));
107 item->Rollback();
108 item.reset();
109 EXPECT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, key_name.c_str(),
110 KEY_READ));
111 std::wstring str_value;
112 EXPECT_EQ(ERROR_SUCCESS, key.ReadValue(NULL, &str_value));
113 EXPECT_EQ(key_name, str_value);
114 EXPECT_EQ(ERROR_SUCCESS, key.OpenKey(L"Subkey", KEY_READ));
115 DWORD dw_value = 0;
116 EXPECT_EQ(ERROR_SUCCESS, key.ReadValueDW(L"SomeValue", &dw_value));
117 EXPECT_EQ(1U, dw_value);
118 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698