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

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

Issue 1223953003: Introduce UpdateActiveSetupVersionWorkItem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@a1_active_setup_onosup_addCB_API
Patch Set: Do not support negative values (operate on unsigned ints) Created 5 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
OLDNEW
(Empty)
1 // Copyright 2015 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 "chrome/installer/util/update_active_setup_version_work_item.h"
6
7 #include <windows.h>
8
9 #include "base/macros.h"
10 #include "base/strings/string16.h"
11 #include "base/test/test_reg_util_win.h"
12 #include "base/win/registry.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using testing::ValuesIn;
16
17 namespace {
18
19 const HKEY kActiveSetupRoot = HKEY_LOCAL_MACHINE;
20 const base::char16 kActiveSetupPath[] = L"Active Setup\\test";
21
22 struct UpdateActiveSetupVersionWorkItemTestCase {
23 // The initial value to be set in the registry prior to executing the
24 // UpdateActiveSetupVersionWorkItem. No value will be set if this null.
25 const wchar_t* initial_value;
26
27 // Whether to ask the UpdateActiveSetupVersionWorkItem to bump the OS_UPGRADES
28 // component of the Active Setup version.
29 bool bump_os_upgrades_component;
30
31 // The expected value after executing the UpdateActiveSetupVersionWorkItem.
32 const wchar_t* expected_result;
33 };
34
35 // Implements PrintTo in order for gtest to be able to print the problematic
36 // UpdateActiveSetupVersionWorkItemTestCase on failure.
37 void PrintTo(const UpdateActiveSetupVersionWorkItemTestCase& test_case,
38 ::std::ostream* os) {
39 *os << "Initial value: "
grt (UTC plus 2) 2015/07/09 14:23:54 #include <ostream>
gab 2015/07/09 20:36:38 Done.
40 << (test_case.initial_value ? test_case.initial_value : L"(empty)")
41 << ", bump_os_upgrades_component: "
42 << test_case.bump_os_upgrades_component
43 << ", expected result: " << test_case.expected_result;
44 }
45
46 class UpdateActiveSetupVersionWorkItemTest
grt (UTC plus 2) 2015/07/09 14:23:54 i don't see an advantage to having this in an unna
gab 2015/07/09 20:36:38 Thanks for the reference, makes sense, I had alway
47 : public testing::TestWithParam<UpdateActiveSetupVersionWorkItemTestCase> {
48 public:
49 UpdateActiveSetupVersionWorkItemTest() {}
50
51 void SetUp() override {
52 registry_override_manager_.OverrideRegistry(kActiveSetupRoot);
53 }
54
55 private:
56 registry_util::RegistryOverrideManager registry_override_manager_;
57
58 DISALLOW_COPY_AND_ASSIGN(UpdateActiveSetupVersionWorkItemTest);
59 };
60
61 } // namespace
62
63 TEST_P(UpdateActiveSetupVersionWorkItemTest, Execute) {
grt (UTC plus 2) 2015/07/09 14:23:54 this test is beautiful!
gab 2015/07/09 20:36:38 :-)
64 // Get the parametrized |test_case| which defines 5 steps:
65 // 1) Maybe set an initial Active Setup version in the registry according to
66 // |test_case.initial_value|.
67 // 2) Declare the work to be done by the UpdateActiveSetupVersionWorkItem
68 // based on |test_case.bump_os_upgrades_component|.
69 // 3) Unconditionally execute the Active Setup work items.
70 // 4) Verify that the updated Active Setup version is as expected by
71 // |test_case.expected_result|.
72 // 5) Rollback and verify that |test_case.initial_value| is back.
73 const UpdateActiveSetupVersionWorkItemTestCase& test_case = GetParam();
74
75 base::win::RegKey test_key;
76
77 EXPECT_EQ(ERROR_FILE_NOT_FOUND,
grt (UTC plus 2) 2015/07/09 14:23:54 should this be ASSERT_EQ? is there a reason to con
gab 2015/07/09 20:36:38 Agreed, anything after a failure here is meaningle
78 test_key.Open(kActiveSetupRoot, kActiveSetupPath, KEY_READ));
79
80 UpdateActiveSetupVersionWorkItem active_setup_work_item(
81 kActiveSetupPath, test_case.bump_os_upgrades_component
82 ? UpdateActiveSetupVersionWorkItem::
83 UPDATE_AND_BUMP_OS_UPGRADES_COMPONENT
84 : UpdateActiveSetupVersionWorkItem::UPDATE);
85
86 // Create the key and set the |initial_value| *after* the WorkItem to confirm
87 // that all of the work is done when executing the item, not when creating it.
88 EXPECT_EQ(ERROR_SUCCESS,
grt (UTC plus 2) 2015/07/09 14:23:53 ASSERT_EQ?
gab 2015/07/09 20:36:38 Agreed, anything after a failure here is meaningle
89 test_key.Create(kActiveSetupRoot, kActiveSetupPath, KEY_SET_VALUE));
90 if (test_case.initial_value) {
91 EXPECT_EQ(ERROR_SUCCESS,
grt (UTC plus 2) 2015/07/09 14:23:54 ASSERT_EQ
gab 2015/07/09 20:36:38 Agreed, anything after a failure here is meaningle
92 test_key.WriteValue(L"Version", test_case.initial_value));
93 }
94
95 active_setup_work_item.Do();
grt (UTC plus 2) 2015/07/09 14:23:54 EXPECT_TRUE?
gab 2015/07/09 20:36:38 Done.
96
97 {
98 base::string16 version_out;
99 EXPECT_EQ(ERROR_SUCCESS, test_key.Open(kActiveSetupRoot, kActiveSetupPath,
100 KEY_QUERY_VALUE));
101 EXPECT_EQ(ERROR_SUCCESS, test_key.ReadValue(L"Version", &version_out));
102 EXPECT_EQ(test_case.expected_result, version_out);
103 }
104
105 active_setup_work_item.Rollback();
106
107 {
108 EXPECT_EQ(ERROR_SUCCESS, test_key.Open(kActiveSetupRoot, kActiveSetupPath,
109 KEY_QUERY_VALUE));
110
111 base::string16 version_out;
112 LONG read_result = test_key.ReadValue(L"Version", &version_out);
113 if (test_case.initial_value) {
114 EXPECT_EQ(ERROR_SUCCESS, read_result);
115 EXPECT_EQ(test_case.initial_value, version_out);
116 } else {
117 EXPECT_EQ(ERROR_FILE_NOT_FOUND, read_result);
118 }
119 }
120 }
121
122 const UpdateActiveSetupVersionWorkItemTestCase
grt (UTC plus 2) 2015/07/09 14:23:54 can you put this up with the struct definition? it
gab 2015/07/09 20:36:38 Done.
123 kUpdateActiveSetupVersionWorkItemTestCases[] = {
124 // Initial install.
125 {nullptr, false, L"43,0,0,0"},
126 // No-op update.
127 {L"43.0.0.0", false, L"43,0,0,0"},
128 // Update only major component.
129 {L"24,1,2,3", false, L"43,1,2,3"},
130 // Reset from bogus value.
131 {L"zzz", false, L"43,0,0,0"},
132 // Reset from invalid version (too few components).
133 {L"1,2", false, L"43,0,0,0"},
134 // Reset from invalid version (too many components).
135 {L"43,1,2,3,10", false, L"43,0,0,0"},
136 // Reset from empty string.
137 {L"", false, L"43,0,0,0"},
138
139 // Same tests with an OS_UPGRADES component bump.
140 {nullptr, true, L"43,0,1,0"},
141 {L"43.0.0.0", true, L"43,0,1,0"},
142 {L"24,1,2,3", true, L"43,1,3,3"},
143 {L"zzz", true, L"43,0,1,0"},
144 {L"1,2", true, L"43,0,1,0"},
145 {L"43,1,2,3,10", true, L"43,0,1,0"},
146 {L"", true, L"43,0,1,0"},
147 // Bumping a negative OS upgrade component should result in it being
148 // reset and subsequently bumped to 1 as usual.
149 {L"43,11,-123,33", true, L"43,11,1,33"},
150 };
151
152 INSTANTIATE_TEST_CASE_P(UpdateActiveSetupVersionWorkItemTestInstance,
153 UpdateActiveSetupVersionWorkItemTest,
154 ValuesIn(kUpdateActiveSetupVersionWorkItemTestCases));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698