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

Unified Diff: chrome/installer/setup/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: merge to r338517 add GN support for setup_unittests 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/setup/update_active_setup_version_work_item_unittest.cc
diff --git a/chrome/installer/setup/update_active_setup_version_work_item_unittest.cc b/chrome/installer/setup/update_active_setup_version_work_item_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bf3ca46e6ce7cc6ac6b028931e3e99dbb9542644
--- /dev/null
+++ b/chrome/installer/setup/update_active_setup_version_work_item_unittest.cc
@@ -0,0 +1,153 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/installer/setup/update_active_setup_version_work_item.h"
+
+#include <windows.h>
+
+#include <ostream>
+
+#include "base/macros.h"
+#include "base/strings/string16.h"
+#include "base/test/test_reg_util_win.h"
+#include "base/win/registry.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::ValuesIn;
+
+namespace {
+
+const HKEY kActiveSetupRoot = HKEY_LOCAL_MACHINE;
+const base::char16 kActiveSetupPath[] = L"Active Setup\\test";
+
+struct UpdateActiveSetupVersionWorkItemTestCase {
+ // The initial value to be set in the registry prior to executing the
+ // UpdateActiveSetupVersionWorkItem. No value will be set if this null.
+ const wchar_t* initial_value;
+
+ // Whether to ask the UpdateActiveSetupVersionWorkItem to bump the OS_UPGRADES
+ // component of the Active Setup version.
+ bool bump_os_upgrades_component;
+
+ // The expected value after executing the UpdateActiveSetupVersionWorkItem.
+ const wchar_t* expected_result;
+} const kUpdateActiveSetupVersionWorkItemTestCases[] = {
+ // Initial install.
+ {nullptr, false, L"43,0,0,0"},
+ // No-op update.
+ {L"43.0.0.0", false, L"43,0,0,0"},
+ // Update only major component.
+ {L"24,1,2,3", false, L"43,1,2,3"},
+ // Reset from bogus value.
+ {L"zzz", false, L"43,0,0,0"},
+ // Reset from invalid version (too few components).
+ {L"1,2", false, L"43,0,0,0"},
+ // Reset from invalid version (too many components).
+ {L"43,1,2,3,10", false, L"43,0,0,0"},
+ // Reset from empty string.
+ {L"", false, L"43,0,0,0"},
+
+ // Same tests with an OS_UPGRADES component bump.
+ {nullptr, true, L"43,0,1,0"},
+ {L"43.0.0.0", true, L"43,0,1,0"},
+ {L"24,1,2,3", true, L"43,1,3,3"},
+ {L"zzz", true, L"43,0,1,0"},
+ {L"1,2", true, L"43,0,1,0"},
+ {L"43,1,2,3,10", true, L"43,0,1,0"},
+ {L"", true, L"43,0,1,0"},
+ // Bumping a negative OS upgrade component should result in it being
+ // reset and subsequently bumped to 1 as usual.
+ {L"43,11,-123,33", true, L"43,11,1,33"},
+};
+
+// Implements PrintTo in order for gtest to be able to print the problematic
+// UpdateActiveSetupVersionWorkItemTestCase on failure.
+void PrintTo(const UpdateActiveSetupVersionWorkItemTestCase& test_case,
+ ::std::ostream* os) {
+ *os << "Initial value: "
+ << (test_case.initial_value ? test_case.initial_value : L"(empty)")
+ << ", bump_os_upgrades_component: "
+ << test_case.bump_os_upgrades_component
+ << ", expected result: " << test_case.expected_result;
+}
+
+} // namespace
+
+class UpdateActiveSetupVersionWorkItemTest
+ : public testing::TestWithParam<UpdateActiveSetupVersionWorkItemTestCase> {
+ public:
+ UpdateActiveSetupVersionWorkItemTest() {}
+
+ void SetUp() override {
+ registry_override_manager_.OverrideRegistry(kActiveSetupRoot);
+ }
+
+ private:
+ registry_util::RegistryOverrideManager registry_override_manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(UpdateActiveSetupVersionWorkItemTest);
+};
+
+TEST_P(UpdateActiveSetupVersionWorkItemTest, Execute) {
+ // Get the parametrized |test_case| which defines 5 steps:
+ // 1) Maybe set an initial Active Setup version in the registry according to
+ // |test_case.initial_value|.
+ // 2) Declare the work to be done by the UpdateActiveSetupVersionWorkItem
+ // based on |test_case.bump_os_upgrades_component|.
+ // 3) Unconditionally execute the Active Setup work items.
+ // 4) Verify that the updated Active Setup version is as expected by
+ // |test_case.expected_result|.
+ // 5) Rollback and verify that |test_case.initial_value| is back.
+ const UpdateActiveSetupVersionWorkItemTestCase& test_case = GetParam();
+
+ base::win::RegKey test_key;
+
+ ASSERT_EQ(ERROR_FILE_NOT_FOUND,
+ test_key.Open(kActiveSetupRoot, kActiveSetupPath, KEY_READ));
+
+ UpdateActiveSetupVersionWorkItem active_setup_work_item(
+ kActiveSetupPath, test_case.bump_os_upgrades_component
+ ? UpdateActiveSetupVersionWorkItem::
+ UPDATE_AND_BUMP_OS_UPGRADES_COMPONENT
+ : UpdateActiveSetupVersionWorkItem::UPDATE);
+
+ // Create the key and set the |initial_value| *after* the WorkItem to confirm
+ // that all of the work is done when executing the item, not when creating it.
+ ASSERT_EQ(ERROR_SUCCESS,
+ test_key.Create(kActiveSetupRoot, kActiveSetupPath, KEY_SET_VALUE));
+ if (test_case.initial_value) {
+ ASSERT_EQ(ERROR_SUCCESS,
+ test_key.WriteValue(L"Version", test_case.initial_value));
+ }
+
+ EXPECT_TRUE(active_setup_work_item.Do());
+
+ {
+ base::string16 version_out;
+ EXPECT_EQ(ERROR_SUCCESS, test_key.Open(kActiveSetupRoot, kActiveSetupPath,
+ KEY_QUERY_VALUE));
+ EXPECT_EQ(ERROR_SUCCESS, test_key.ReadValue(L"Version", &version_out));
+ EXPECT_EQ(test_case.expected_result, version_out);
+ }
+
+ active_setup_work_item.Rollback();
+
+ {
+ EXPECT_EQ(ERROR_SUCCESS, test_key.Open(kActiveSetupRoot, kActiveSetupPath,
+ KEY_QUERY_VALUE));
+
+ base::string16 version_out;
+ LONG read_result = test_key.ReadValue(L"Version", &version_out);
+ if (test_case.initial_value) {
+ EXPECT_EQ(ERROR_SUCCESS, read_result);
+ EXPECT_EQ(test_case.initial_value, version_out);
+ } else {
+ EXPECT_EQ(ERROR_FILE_NOT_FOUND, read_result);
+ }
+ }
+}
+
+INSTANTIATE_TEST_CASE_P(UpdateActiveSetupVersionWorkItemTestInstance,
+ UpdateActiveSetupVersionWorkItemTest,
+ ValuesIn(kUpdateActiveSetupVersionWorkItemTestCases));
« no previous file with comments | « chrome/installer/setup/update_active_setup_version_work_item.cc ('k') | chrome/installer/util/set_reg_value_work_item.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698