| Index: src/platform/update_engine/omaha_response_handler_action_unittest.cc
|
| diff --git a/src/platform/update_engine/omaha_response_handler_action_unittest.cc b/src/platform/update_engine/omaha_response_handler_action_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0248daf9d3c840575e5e907c18473648da34caad
|
| --- /dev/null
|
| +++ b/src/platform/update_engine/omaha_response_handler_action_unittest.cc
|
| @@ -0,0 +1,152 @@
|
| +// Copyright (c) 2009 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 <string>
|
| +#include <gtest/gtest.h>
|
| +#include "update_engine/omaha_response_handler_action.h"
|
| +#include "update_engine/test_utils.h"
|
| +#include "update_engine/utils.h"
|
| +
|
| +using std::string;
|
| +
|
| +namespace chromeos_update_engine {
|
| +
|
| +class OmahaResponseHandlerActionTest : public ::testing::Test {
|
| + public:
|
| + // Return true iff the OmahaResponseHandlerAction succeeded.
|
| + // If out is non-NULL, it's set w/ the response from the action.
|
| + bool DoTest(const UpdateCheckResponse& in,
|
| + const string& boot_dev,
|
| + InstallPlan* out);
|
| +};
|
| +
|
| +class OmahaResponseHandlerActionProcessorDelegate
|
| + : public ActionProcessorDelegate {
|
| + public:
|
| + OmahaResponseHandlerActionProcessorDelegate()
|
| + : success_(false),
|
| + success_set_(false) {}
|
| + void ActionCompleted(ActionProcessor* processor,
|
| + AbstractAction* action,
|
| + bool success) {
|
| + if (action->Type() == OmahaResponseHandlerAction::StaticType()) {
|
| + success_ = success;
|
| + success_set_ = true;
|
| + }
|
| + }
|
| + bool success_;
|
| + bool success_set_;
|
| +};
|
| +
|
| +namespace {
|
| +const string kLongName =
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
|
| + "-the_update_a.b.c.d_DELTA_.tgz";
|
| +} // namespace {}
|
| +
|
| +bool OmahaResponseHandlerActionTest::DoTest(const UpdateCheckResponse& in,
|
| + const string& boot_dev,
|
| + InstallPlan* out) {
|
| + ActionProcessor processor;
|
| + OmahaResponseHandlerActionProcessorDelegate delegate;
|
| + processor.set_delegate(&delegate);
|
| +
|
| + ObjectFeederAction<UpdateCheckResponse> feeder_action;
|
| + feeder_action.set_obj(in);
|
| + OmahaResponseHandlerAction response_handler_action;
|
| + response_handler_action.set_boot_device(boot_dev);
|
| + BondActions(&feeder_action, &response_handler_action);
|
| + ObjectCollectorAction<InstallPlan> collector_action;
|
| + BondActions(&response_handler_action, &collector_action);
|
| + processor.EnqueueAction(&feeder_action);
|
| + processor.EnqueueAction(&response_handler_action);
|
| + processor.EnqueueAction(&collector_action);
|
| + processor.StartProcessing();
|
| + EXPECT_TRUE(!processor.IsRunning())
|
| + << "Update test to handle non-asynch actions";
|
| + if (out)
|
| + *out = collector_action.object();
|
| + EXPECT_TRUE(delegate.success_set_);
|
| + return delegate.success_;
|
| +}
|
| +
|
| +TEST_F(OmahaResponseHandlerActionTest, SimpleTest) {
|
| + {
|
| + UpdateCheckResponse in;
|
| + in.update_exists = true;
|
| + in.display_version = "a.b.c.d";
|
| + in.codebase = "http://foo/the_update_a.b.c.d_FULL_.tgz";
|
| + in.more_info_url = "http://more/info";
|
| + in.hash = "HASH+";
|
| + in.size = 12;
|
| + in.needs_admin = true;
|
| + in.prompt = false;
|
| + InstallPlan install_plan;
|
| + EXPECT_TRUE(DoTest(in, "/dev/sda1", &install_plan));
|
| + EXPECT_TRUE(install_plan.is_full_update);
|
| + EXPECT_EQ(in.codebase, install_plan.download_url);
|
| + EXPECT_EQ(in.hash, install_plan.download_hash);
|
| + EXPECT_EQ(utils::kStatefulPartition + "/the_update_a.b.c.d_FULL_.tgz",
|
| + install_plan.download_path);
|
| + EXPECT_EQ("/dev/sda2", install_plan.install_path);
|
| + }
|
| + {
|
| + UpdateCheckResponse in;
|
| + in.update_exists = true;
|
| + in.display_version = "a.b.c.d";
|
| + in.codebase = "http://foo/the_update_a.b.c.d_DELTA_.tgz";
|
| + in.more_info_url = "http://more/info";
|
| + in.hash = "HASHj+";
|
| + in.size = 12;
|
| + in.needs_admin = true;
|
| + in.prompt = true;
|
| + InstallPlan install_plan;
|
| + EXPECT_TRUE(DoTest(in, "/dev/sda4", &install_plan));
|
| + EXPECT_FALSE(install_plan.is_full_update);
|
| + EXPECT_EQ(in.codebase, install_plan.download_url);
|
| + EXPECT_EQ(in.hash, install_plan.download_hash);
|
| + EXPECT_EQ(utils::kStatefulPartition + "/the_update_a.b.c.d_DELTA_.tgz",
|
| + install_plan.download_path);
|
| + EXPECT_EQ("/dev/sda3", install_plan.install_path);
|
| + }
|
| + {
|
| + UpdateCheckResponse in;
|
| + in.update_exists = true;
|
| + in.display_version = "a.b.c.d";
|
| + in.codebase = kLongName;
|
| + in.more_info_url = "http://more/info";
|
| + in.hash = "HASHj+";
|
| + in.size = 12;
|
| + in.needs_admin = true;
|
| + in.prompt = true;
|
| + InstallPlan install_plan;
|
| + EXPECT_TRUE(DoTest(in, "/dev/sda4", &install_plan));
|
| + EXPECT_FALSE(install_plan.is_full_update);
|
| + EXPECT_EQ(in.codebase, install_plan.download_url);
|
| + EXPECT_EQ(in.hash, install_plan.download_hash);
|
| + EXPECT_EQ(utils::kStatefulPartition + "/" + kLongName.substr(0, 255),
|
| + install_plan.download_path);
|
| + EXPECT_EQ("/dev/sda3", install_plan.install_path);
|
| + }
|
| +}
|
| +
|
| +TEST_F(OmahaResponseHandlerActionTest, NoUpdatesTest) {
|
| + UpdateCheckResponse in;
|
| + in.update_exists = false;
|
| + InstallPlan install_plan;
|
| + EXPECT_FALSE(DoTest(in, "/dev/sda1", &install_plan));
|
| + EXPECT_FALSE(install_plan.is_full_update);
|
| + EXPECT_EQ("", install_plan.download_url);
|
| + EXPECT_EQ("", install_plan.download_hash);
|
| + EXPECT_EQ("", install_plan.download_path);
|
| + EXPECT_EQ("", install_plan.install_path);
|
| +}
|
| +
|
| +} // namespace chromeos_update_engine
|
|
|