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

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

Issue 2897593003: Generalize Active Setup triggering. (Closed)
Patch Set: test fixins Created 3 years, 7 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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 "chrome/installer/setup/update_active_setup_version_work_item.h" 5 #include "chrome/installer/setup/update_active_setup_version_work_item.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 8
9 #include <ostream> 9 #include <ostream>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
13 #include "base/test/test_reg_util_win.h" 13 #include "base/test/test_reg_util_win.h"
14 #include "base/win/registry.h" 14 #include "base/win/registry.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using testing::ValuesIn; 17 using testing::ValuesIn;
18 18
19 namespace { 19 namespace {
20 20
21 const HKEY kActiveSetupRoot = HKEY_LOCAL_MACHINE; 21 const HKEY kActiveSetupRoot = HKEY_LOCAL_MACHINE;
22 const base::char16 kActiveSetupPath[] = L"Active Setup\\test"; 22 const base::char16 kActiveSetupPath[] = L"Active Setup\\test";
23 23
24 struct UpdateActiveSetupVersionWorkItemTestCase { 24 struct UpdateActiveSetupVersionWorkItemTestCase {
25 // The initial value to be set in the registry prior to executing the 25 // The initial value to be set in the registry prior to executing the
26 // UpdateActiveSetupVersionWorkItem. No value will be set if this null. 26 // UpdateActiveSetupVersionWorkItem. No value will be set if this null.
27 const wchar_t* initial_value; 27 const wchar_t* initial_value;
28 28
29 // Whether to ask the UpdateActiveSetupVersionWorkItem to bump the OS_UPGRADES 29 // Whether to ask the UpdateActiveSetupVersionWorkItem to bump the
30 // component of the Active Setup version. 30 // SELECTIVE_TRIGGER component of the Active Setup version.
31 bool bump_os_upgrades_component; 31 bool bump_selective_trigger;
32 32
33 // The expected value after executing the UpdateActiveSetupVersionWorkItem. 33 // The expected value after executing the UpdateActiveSetupVersionWorkItem.
34 const wchar_t* expected_result; 34 const wchar_t* expected_result;
35 } const kUpdateActiveSetupVersionWorkItemTestCases[] = { 35 } const kUpdateActiveSetupVersionWorkItemTestCases[] = {
36 // Initial install. 36 // Initial install.
37 {nullptr, false, L"43,0,0,0"}, 37 {nullptr, false, L"43,0,0,0"},
38 // No-op update. 38 // No-op update.
39 {L"43.0.0.0", false, L"43,0,0,0"}, 39 {L"43,0,0,0", false, L"43,0,0,0"},
40 // Update only major component. 40 // Update only major component.
41 {L"24,1,2,3", false, L"43,1,2,3"}, 41 {L"24,1,2,3", false, L"43,0,0,0"},
42 // Reset from bogus value. 42 // Reset from bogus value.
43 {L"zzz", false, L"43,0,0,0"}, 43 {L"zzz", false, L"43,0,0,0"},
44 // Reset from invalid version (too few components). 44 // Reset from invalid version (too few components).
45 {L"1,2", false, L"43,0,0,0"}, 45 {L"1,2", false, L"43,0,0,0"},
46 // Reset from invalid version (too many components). 46 // Reset from invalid version (too many components).
47 {L"43,1,2,3,10", false, L"43,0,0,0"}, 47 {L"43,1,2,3,10", false, L"43,1,2,3"},
48 // Reset from empty string. 48 // Reset from empty string.
49 {L"", false, L"43,0,0,0"}, 49 {L"", false, L"43,0,0,0"},
50 50
51 // Same tests with an OS_UPGRADES component bump. 51 // Same tests with a SELECTIVE_TRIGGER component bump.
52 {nullptr, true, L"43,0,1,0"}, 52 {nullptr, true, L"43,0,0,0"},
53 {L"43.0.0.0", true, L"43,0,1,0"}, 53 {L"43,0,0,0", true, L"43,0,1,0"},
54 {L"24,1,2,3", true, L"43,1,3,3"}, 54 {L"43,0,46,0", true, L"43,0,47,0"},
55 {L"zzz", true, L"43,0,1,0"}, 55 {L"24,1,2,3", true, L"43,0,0,0"},
56 {L"1,2", true, L"43,0,1,0"}, 56 {L"zzz", true, L"43,0,0,0"},
57 {L"43,1,2,3,10", true, L"43,0,1,0"}, 57 {L"1,2", true, L"43,0,0,0"},
58 {L"", true, L"43,0,1,0"}, 58 {L"43,1,2,3,10", true, L"43,1,3,3"},
59 // Bumping a negative OS upgrade component should result in it being 59 {L"", true, L"43,0,0,0"},
60 // reset and subsequently bumped to 1 as usual. 60 // Bumping a negative selective trigger component should result in it being
61 // reset and subsequently bumped to 1.
61 {L"43,11,-123,33", true, L"43,11,1,33"}, 62 {L"43,11,-123,33", true, L"43,11,1,33"},
62 }; 63 };
63 64
64 // Implements PrintTo in order for gtest to be able to print the problematic 65 // Implements PrintTo in order for gtest to be able to print the problematic
65 // UpdateActiveSetupVersionWorkItemTestCase on failure. 66 // UpdateActiveSetupVersionWorkItemTestCase on failure.
66 void PrintTo(const UpdateActiveSetupVersionWorkItemTestCase& test_case, 67 void PrintTo(const UpdateActiveSetupVersionWorkItemTestCase& test_case,
67 ::std::ostream* os) { 68 ::std::ostream* os) {
68 *os << "Initial value: " 69 *os << "Initial value: "
69 << (test_case.initial_value ? test_case.initial_value : L"(empty)") 70 << (test_case.initial_value ? test_case.initial_value : L"(empty)")
70 << ", bump_os_upgrades_component: " 71 << ", bump_selective_trigger: " << test_case.bump_selective_trigger
71 << test_case.bump_os_upgrades_component
72 << ", expected result: " << test_case.expected_result; 72 << ", expected result: " << test_case.expected_result;
73 } 73 }
74 74
75 } // namespace 75 } // namespace
76 76
77 class UpdateActiveSetupVersionWorkItemTest 77 class UpdateActiveSetupVersionWorkItemTest
78 : public testing::TestWithParam<UpdateActiveSetupVersionWorkItemTestCase> { 78 : public testing::TestWithParam<UpdateActiveSetupVersionWorkItemTestCase> {
79 public: 79 public:
80 UpdateActiveSetupVersionWorkItemTest() {} 80 UpdateActiveSetupVersionWorkItemTest() {}
81 81
82 void SetUp() override { 82 void SetUp() override {
83 ASSERT_NO_FATAL_FAILURE( 83 ASSERT_NO_FATAL_FAILURE(
84 registry_override_manager_.OverrideRegistry(kActiveSetupRoot)); 84 registry_override_manager_.OverrideRegistry(kActiveSetupRoot));
85 } 85 }
86 86
87 private: 87 private:
88 registry_util::RegistryOverrideManager registry_override_manager_; 88 registry_util::RegistryOverrideManager registry_override_manager_;
89 89
90 DISALLOW_COPY_AND_ASSIGN(UpdateActiveSetupVersionWorkItemTest); 90 DISALLOW_COPY_AND_ASSIGN(UpdateActiveSetupVersionWorkItemTest);
91 }; 91 };
92 92
93 TEST_P(UpdateActiveSetupVersionWorkItemTest, Execute) { 93 TEST_P(UpdateActiveSetupVersionWorkItemTest, Execute) {
94 // Get the parametrized |test_case| which defines 5 steps: 94 // Get the parametrized |test_case| which defines 5 steps:
95 // 1) Maybe set an initial Active Setup version in the registry according to 95 // 1) Maybe set an initial Active Setup version in the registry according to
96 // |test_case.initial_value|. 96 // |test_case.initial_value|.
97 // 2) Declare the work to be done by the UpdateActiveSetupVersionWorkItem 97 // 2) Declare the work to be done by the UpdateActiveSetupVersionWorkItem
98 // based on |test_case.bump_os_upgrades_component|. 98 // based on |test_case.bump_selective_trigger|.
99 // 3) Unconditionally execute the Active Setup work items. 99 // 3) Unconditionally execute the Active Setup work items.
100 // 4) Verify that the updated Active Setup version is as expected by 100 // 4) Verify that the updated Active Setup version is as expected by
101 // |test_case.expected_result|. 101 // |test_case.expected_result|.
102 // 5) Rollback and verify that |test_case.initial_value| is back. 102 // 5) Rollback and verify that |test_case.initial_value| is back.
103 const UpdateActiveSetupVersionWorkItemTestCase& test_case = GetParam(); 103 const UpdateActiveSetupVersionWorkItemTestCase& test_case = GetParam();
104 104
105 base::win::RegKey test_key; 105 base::win::RegKey test_key;
106 106
107 ASSERT_EQ(ERROR_FILE_NOT_FOUND, 107 ASSERT_EQ(ERROR_FILE_NOT_FOUND,
108 test_key.Open(kActiveSetupRoot, kActiveSetupPath, KEY_READ)); 108 test_key.Open(kActiveSetupRoot, kActiveSetupPath, KEY_READ));
109 109
110 UpdateActiveSetupVersionWorkItem active_setup_work_item( 110 UpdateActiveSetupVersionWorkItem active_setup_work_item(
111 kActiveSetupPath, test_case.bump_os_upgrades_component 111 kActiveSetupPath,
112 ? UpdateActiveSetupVersionWorkItem:: 112 test_case.bump_selective_trigger
113 UPDATE_AND_BUMP_OS_UPGRADES_COMPONENT 113 ? UpdateActiveSetupVersionWorkItem::UPDATE_AND_BUMP_SELECTIVE_TRIGGER
114 : UpdateActiveSetupVersionWorkItem::UPDATE); 114 : UpdateActiveSetupVersionWorkItem::UPDATE);
115 115
116 // Create the key and set the |initial_value| *after* the WorkItem to confirm 116 // Create the key and set the |initial_value| *after* the WorkItem to confirm
117 // that all of the work is done when executing the item, not when creating it. 117 // that all of the work is done when executing the item, not when creating it.
118 ASSERT_EQ(ERROR_SUCCESS, 118 ASSERT_EQ(ERROR_SUCCESS,
119 test_key.Create(kActiveSetupRoot, kActiveSetupPath, KEY_SET_VALUE)); 119 test_key.Create(kActiveSetupRoot, kActiveSetupPath, KEY_SET_VALUE));
120 if (test_case.initial_value) { 120 if (test_case.initial_value) {
121 ASSERT_EQ(ERROR_SUCCESS, 121 ASSERT_EQ(ERROR_SUCCESS,
122 test_key.WriteValue(L"Version", test_case.initial_value)); 122 test_key.WriteValue(L"Version", test_case.initial_value));
123 } 123 }
124 124
(...skipping 20 matching lines...) Expand all
145 EXPECT_EQ(test_case.initial_value, version_out); 145 EXPECT_EQ(test_case.initial_value, version_out);
146 } else { 146 } else {
147 EXPECT_EQ(ERROR_FILE_NOT_FOUND, read_result); 147 EXPECT_EQ(ERROR_FILE_NOT_FOUND, read_result);
148 } 148 }
149 } 149 }
150 } 150 }
151 151
152 INSTANTIATE_TEST_CASE_P(UpdateActiveSetupVersionWorkItemTestInstance, 152 INSTANTIATE_TEST_CASE_P(UpdateActiveSetupVersionWorkItemTestInstance,
153 UpdateActiveSetupVersionWorkItemTest, 153 UpdateActiveSetupVersionWorkItemTest,
154 ValuesIn(kUpdateActiveSetupVersionWorkItemTestCases)); 154 ValuesIn(kUpdateActiveSetupVersionWorkItemTestCases));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698