Missed new files in last commit
Review URL: http://codereview.chromium.org/465067
git-svn-id: svn://chrome-svn/chromeos/trunk@336 06c00378-0e64-4dae-be16-12b19f9950a1
diff --git a/omaha_response_handler_action_unittest.cc b/omaha_response_handler_action_unittest.cc
new file mode 100644
index 0000000..0248daf
--- /dev/null
+++ b/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