blob: 242cf616294e9a8dbf04a281c9782e30c79eef9a [file] [log] [blame]
Darin Petkov7ed561b2011-10-04 02:59:03 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
adlr@google.com3defe6a2009-12-04 20:57:17 +00002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <string>
Darin Petkov73058b42010-10-06 16:32:19 -07006
adlr@google.com3defe6a2009-12-04 20:57:17 +00007#include <gtest/gtest.h>
Darin Petkov73058b42010-10-06 16:32:19 -07008
Jay Srinivasand29695d2013-04-08 15:08:05 -07009#include "update_engine/constants.h"
Gilad Arnold5bb4c902014-04-10 12:32:13 -070010#include "update_engine/fake_system_state.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000011#include "update_engine/omaha_response_handler_action.h"
12#include "update_engine/test_utils.h"
13#include "update_engine/utils.h"
14
15using std::string;
Darin Petkov73058b42010-10-06 16:32:19 -070016using testing::Return;
adlr@google.com3defe6a2009-12-04 20:57:17 +000017
18namespace chromeos_update_engine {
19
20class OmahaResponseHandlerActionTest : public ::testing::Test {
21 public:
22 // Return true iff the OmahaResponseHandlerAction succeeded.
Alex Vakulenko88b591f2014-08-28 16:48:57 -070023 // If out is non-null, it's set w/ the response from the action.
Gilad Arnold5bb4c902014-04-10 12:32:13 -070024 bool DoTestCommon(FakeSystemState* fake_system_state,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070025 const OmahaResponse& in,
26 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070027 const string& deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070028 InstallPlan* out);
Darin Petkov6a5b3222010-07-13 14:55:28 -070029 bool DoTest(const OmahaResponse& in,
adlr@google.com3defe6a2009-12-04 20:57:17 +000030 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070031 const string& deadline_file,
adlr@google.com3defe6a2009-12-04 20:57:17 +000032 InstallPlan* out);
33};
34
35class OmahaResponseHandlerActionProcessorDelegate
36 : public ActionProcessorDelegate {
37 public:
38 OmahaResponseHandlerActionProcessorDelegate()
Gilad Arnoldd1c4d2d2014-06-05 14:07:53 -070039 : code_(ErrorCode::kError),
Darin Petkovc1a8b422010-07-19 11:34:49 -070040 code_set_(false) {}
adlr@google.com3defe6a2009-12-04 20:57:17 +000041 void ActionCompleted(ActionProcessor* processor,
42 AbstractAction* action,
David Zeuthena99981f2013-04-29 13:42:47 -070043 ErrorCode code) {
adlr@google.com3defe6a2009-12-04 20:57:17 +000044 if (action->Type() == OmahaResponseHandlerAction::StaticType()) {
Darin Petkovc1a8b422010-07-19 11:34:49 -070045 code_ = code;
46 code_set_ = true;
adlr@google.com3defe6a2009-12-04 20:57:17 +000047 }
48 }
David Zeuthena99981f2013-04-29 13:42:47 -070049 ErrorCode code_;
Darin Petkovc1a8b422010-07-19 11:34:49 -070050 bool code_set_;
adlr@google.com3defe6a2009-12-04 20:57:17 +000051};
52
53namespace {
Alex Vakulenkod2779df2014-06-16 13:19:00 -070054const char* const kLongName =
adlr@google.com3defe6a2009-12-04 20:57:17 +000055 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
56 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
57 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
58 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
59 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
60 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
61 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
62 "-the_update_a.b.c.d_DELTA_.tgz";
Alex Vakulenkod2779df2014-06-16 13:19:00 -070063const char* const kBadVersion = "don't update me";
64} // namespace
adlr@google.com3defe6a2009-12-04 20:57:17 +000065
Jay Srinivasanae4697c2013-03-18 17:08:08 -070066bool OmahaResponseHandlerActionTest::DoTestCommon(
Gilad Arnold5bb4c902014-04-10 12:32:13 -070067 FakeSystemState* fake_system_state,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070068 const OmahaResponse& in,
69 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070070 const string& test_deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070071 InstallPlan* out) {
adlr@google.com3defe6a2009-12-04 20:57:17 +000072 ActionProcessor processor;
73 OmahaResponseHandlerActionProcessorDelegate delegate;
74 processor.set_delegate(&delegate);
75
Darin Petkov6a5b3222010-07-13 14:55:28 -070076 ObjectFeederAction<OmahaResponse> feeder_action;
adlr@google.com3defe6a2009-12-04 20:57:17 +000077 feeder_action.set_obj(in);
Alex Vakulenkod2779df2014-06-16 13:19:00 -070078 if (in.update_exists && in.version != kBadVersion) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -070079 EXPECT_CALL(*(fake_system_state->mock_prefs()),
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080080 SetString(kPrefsUpdateCheckResponseHash, in.hash))
Darin Petkov73058b42010-10-06 16:32:19 -070081 .WillOnce(Return(true));
82 }
Jay Srinivasan53173b92013-05-17 17:13:01 -070083
84 string current_url = in.payload_urls.size() ? in.payload_urls[0] : "";
Gilad Arnold5bb4c902014-04-10 12:32:13 -070085 EXPECT_CALL(*(fake_system_state->mock_payload_state()), GetCurrentUrl())
Jay Srinivasan53173b92013-05-17 17:13:01 -070086 .WillRepeatedly(Return(current_url));
87
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070088 OmahaResponseHandlerAction response_handler_action(
Gilad Arnold5bb4c902014-04-10 12:32:13 -070089 fake_system_state,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070090 (test_deadline_file.empty() ?
91 OmahaResponseHandlerAction::kDeadlineFile : test_deadline_file));
adlr@google.com3defe6a2009-12-04 20:57:17 +000092 response_handler_action.set_boot_device(boot_dev);
93 BondActions(&feeder_action, &response_handler_action);
94 ObjectCollectorAction<InstallPlan> collector_action;
95 BondActions(&response_handler_action, &collector_action);
96 processor.EnqueueAction(&feeder_action);
97 processor.EnqueueAction(&response_handler_action);
98 processor.EnqueueAction(&collector_action);
99 processor.StartProcessing();
100 EXPECT_TRUE(!processor.IsRunning())
Alex Vakulenko072359c2014-07-18 11:41:07 -0700101 << "Update test to handle non-async actions";
adlr@google.com3defe6a2009-12-04 20:57:17 +0000102 if (out)
103 *out = collector_action.object();
Darin Petkovc1a8b422010-07-19 11:34:49 -0700104 EXPECT_TRUE(delegate.code_set_);
Gilad Arnoldd1c4d2d2014-06-05 14:07:53 -0700105 return delegate.code_ == ErrorCode::kSuccess;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000106}
107
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700108bool OmahaResponseHandlerActionTest::DoTest(const OmahaResponse& in,
109 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700110 const string& deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700111 InstallPlan* out) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700112 FakeSystemState fake_system_state;
113 return DoTestCommon(&fake_system_state, in, boot_dev, deadline_file, out);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700114}
115
adlr@google.com3defe6a2009-12-04 20:57:17 +0000116TEST_F(OmahaResponseHandlerActionTest, SimpleTest) {
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700117 string test_deadline_file;
118 CHECK(utils::MakeTempFile(
Gilad Arnolda6742b32014-01-11 00:18:34 -0800119 "omaha_response_handler_action_unittest-XXXXXX",
Alex Vakulenko88b591f2014-08-28 16:48:57 -0700120 &test_deadline_file, nullptr));
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700121 ScopedPathUnlinker deadline_unlinker(test_deadline_file);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000122 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700123 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000124 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700125 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800126 in.payload_urls.push_back("http://foo/the_update_a.b.c.d.tgz");
adlr@google.com3defe6a2009-12-04 20:57:17 +0000127 in.more_info_url = "http://more/info";
128 in.hash = "HASH+";
129 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000130 in.prompt = false;
Darin Petkov6c118642010-10-21 12:06:30 -0700131 in.deadline = "20101020";
adlr@google.com3defe6a2009-12-04 20:57:17 +0000132 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700133 EXPECT_TRUE(DoTest(in, "/dev/sda3", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800134 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700135 EXPECT_EQ(in.hash, install_plan.payload_hash);
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700136 EXPECT_EQ("/dev/sda5", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700137 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700138 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline));
Darin Petkov6c118642010-10-21 12:06:30 -0700139 EXPECT_EQ("20101020", deadline);
140 struct stat deadline_stat;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700141 EXPECT_EQ(0, stat(test_deadline_file.c_str(), &deadline_stat));
Darin Petkov6c118642010-10-21 12:06:30 -0700142 EXPECT_EQ(S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
143 deadline_stat.st_mode);
Chris Sosafb1020e2013-07-29 17:27:33 -0700144 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000145 }
146 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700147 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000148 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700149 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800150 in.payload_urls.push_back("http://foo/the_update_a.b.c.d.tgz");
adlr@google.com3defe6a2009-12-04 20:57:17 +0000151 in.more_info_url = "http://more/info";
152 in.hash = "HASHj+";
153 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000154 in.prompt = true;
155 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700156 EXPECT_TRUE(DoTest(in, "/dev/sda5", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800157 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700158 EXPECT_EQ(in.hash, install_plan.payload_hash);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000159 EXPECT_EQ("/dev/sda3", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700160 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700161 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline) &&
162 deadline.empty());
Chris Sosafb1020e2013-07-29 17:27:33 -0700163 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000164 }
165 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700166 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000167 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700168 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800169 in.payload_urls.push_back(kLongName);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000170 in.more_info_url = "http://more/info";
171 in.hash = "HASHj+";
172 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000173 in.prompt = true;
Darin Petkov6c118642010-10-21 12:06:30 -0700174 in.deadline = "some-deadline";
adlr@google.com3defe6a2009-12-04 20:57:17 +0000175 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700176 EXPECT_TRUE(DoTest(in, "/dev/sda3", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800177 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700178 EXPECT_EQ(in.hash, install_plan.payload_hash);
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700179 EXPECT_EQ("/dev/sda5", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700180 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700181 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline));
Darin Petkov6c118642010-10-21 12:06:30 -0700182 EXPECT_EQ("some-deadline", deadline);
Chris Sosafb1020e2013-07-29 17:27:33 -0700183 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000184 }
185}
186
187TEST_F(OmahaResponseHandlerActionTest, NoUpdatesTest) {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700188 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000189 in.update_exists = false;
190 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700191 EXPECT_FALSE(DoTest(in, "/dev/sda1", "", &install_plan));
adlr@google.com3defe6a2009-12-04 20:57:17 +0000192 EXPECT_EQ("", install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700193 EXPECT_EQ("", install_plan.payload_hash);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000194 EXPECT_EQ("", install_plan.install_path);
Chris Sosafb1020e2013-07-29 17:27:33 -0700195 EXPECT_EQ("", install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000196}
197
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800198TEST_F(OmahaResponseHandlerActionTest, HashChecksForHttpTest) {
199 OmahaResponse in;
200 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700201 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800202 in.payload_urls.push_back("http://test.should/need/hash.checks.signed");
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800203 in.more_info_url = "http://more/info";
204 in.hash = "HASHj+";
205 in.size = 12;
206 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700207 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800208 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800209 EXPECT_EQ(in.hash, install_plan.payload_hash);
210 EXPECT_TRUE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700211 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800212}
213
214TEST_F(OmahaResponseHandlerActionTest, HashChecksForHttpsTest) {
215 OmahaResponse in;
216 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700217 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800218 in.payload_urls.push_back("https://test.should.not/need/hash.checks.signed");
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800219 in.more_info_url = "http://more/info";
220 in.hash = "HASHj+";
221 in.size = 12;
222 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700223 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800224 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800225 EXPECT_EQ(in.hash, install_plan.payload_hash);
226 EXPECT_FALSE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700227 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800228}
229
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800230TEST_F(OmahaResponseHandlerActionTest, HashChecksForBothHttpAndHttpsTest) {
231 OmahaResponse in;
232 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700233 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800234 in.payload_urls.push_back("http://test.should.still/need/hash.checks");
235 in.payload_urls.push_back("https://test.should.still/need/hash.checks");
236 in.more_info_url = "http://more/info";
237 in.hash = "HASHj+";
238 in.size = 12;
239 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700240 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800241 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
242 EXPECT_EQ(in.hash, install_plan.payload_hash);
243 EXPECT_TRUE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700244 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800245}
246
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700247TEST_F(OmahaResponseHandlerActionTest, ChangeToMoreStableChannelTest) {
248 OmahaResponse in;
249 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700250 in.version = "a.b.c.d";
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700251 in.payload_urls.push_back("https://MoreStableChannelTest");
252 in.more_info_url = "http://more/info";
253 in.hash = "HASHjk";
254 in.size = 15;
255
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700256 // Create a uniquely named test directory.
257 string test_dir;
258 ASSERT_TRUE(utils::MakeTempDirectory(
259 "omaha_response_handler_action-test-XXXXXX", &test_dir));
260
261 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc"));
262 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir +
Chris Sosabe45bef2013-04-09 18:25:12 -0700263 kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700264 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700265 test_dir + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700266 "CHROMEOS_RELEASE_TRACK=canary-channel\n"));
267 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700268 test_dir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700269 "CHROMEOS_IS_POWERWASH_ALLOWED=true\n"
270 "CHROMEOS_RELEASE_TRACK=stable-channel\n"));
271
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700272 FakeSystemState fake_system_state;
273 OmahaRequestParams params(&fake_system_state);
Gilad Arnoldd04f8e22014-01-09 13:13:40 -0800274 params.set_root(test_dir);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700275 params.SetLockDown(false);
276 params.Init("1.2.3.4", "", 0);
277 EXPECT_EQ("canary-channel", params.current_channel());
278 EXPECT_EQ("stable-channel", params.target_channel());
279 EXPECT_TRUE(params.to_more_stable_channel());
280 EXPECT_TRUE(params.is_powerwash_allowed());
281
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700282 fake_system_state.set_request_params(&params);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700283 InstallPlan install_plan;
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700284 EXPECT_TRUE(DoTestCommon(&fake_system_state, in, "/dev/sda5", "",
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700285 &install_plan));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700286 EXPECT_TRUE(install_plan.powerwash_required);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700287
288 ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700289}
290
291TEST_F(OmahaResponseHandlerActionTest, ChangeToLessStableChannelTest) {
292 OmahaResponse in;
293 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700294 in.version = "a.b.c.d";
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700295 in.payload_urls.push_back("https://LessStableChannelTest");
296 in.more_info_url = "http://more/info";
297 in.hash = "HASHjk";
298 in.size = 15;
299
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700300 // Create a uniquely named test directory.
301 string test_dir;
302 ASSERT_TRUE(utils::MakeTempDirectory(
303 "omaha_response_handler_action-test-XXXXXX", &test_dir));
304
305 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc"));
306 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir +
Chris Sosabe45bef2013-04-09 18:25:12 -0700307 kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700308 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700309 test_dir + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700310 "CHROMEOS_RELEASE_TRACK=stable-channel\n"));
311 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700312 test_dir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700313 "CHROMEOS_RELEASE_TRACK=canary-channel\n"));
314
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700315 FakeSystemState fake_system_state;
316 OmahaRequestParams params(&fake_system_state);
Gilad Arnoldd04f8e22014-01-09 13:13:40 -0800317 params.set_root(test_dir);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700318 params.SetLockDown(false);
319 params.Init("5.6.7.8", "", 0);
320 EXPECT_EQ("stable-channel", params.current_channel());
321 params.SetTargetChannel("canary-channel", false);
322 EXPECT_EQ("canary-channel", params.target_channel());
323 EXPECT_FALSE(params.to_more_stable_channel());
324 EXPECT_FALSE(params.is_powerwash_allowed());
325
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700326 fake_system_state.set_request_params(&params);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700327 InstallPlan install_plan;
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700328 EXPECT_TRUE(DoTestCommon(&fake_system_state, in, "/dev/sda5", "",
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700329 &install_plan));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700330 EXPECT_FALSE(install_plan.powerwash_required);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700331
332 ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700333}
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800334
David Zeuthen8f191b22013-08-06 12:27:50 -0700335TEST_F(OmahaResponseHandlerActionTest, P2PUrlIsUsedAndHashChecksMandatory) {
336 OmahaResponse in;
337 in.update_exists = true;
338 in.version = "a.b.c.d";
339 in.payload_urls.push_back("https://would.not/cause/hash/checks");
340 in.more_info_url = "http://more/info";
341 in.hash = "HASHj+";
342 in.size = 12;
343
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700344 FakeSystemState fake_system_state;
345 OmahaRequestParams params(&fake_system_state);
346 fake_system_state.set_request_params(&params);
David Zeuthen8f191b22013-08-06 12:27:50 -0700347
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700348 EXPECT_CALL(*fake_system_state.mock_payload_state(),
David Zeuthenbb8bdc72013-09-03 13:43:48 -0700349 SetUsingP2PForDownloading(true));
350
David Zeuthen8f191b22013-08-06 12:27:50 -0700351 string p2p_url = "http://9.8.7.6/p2p";
352 params.set_p2p_url(p2p_url);
353 params.set_use_p2p_for_downloading(true);
354
355 InstallPlan install_plan;
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700356 EXPECT_TRUE(DoTestCommon(&fake_system_state, in, "/dev/sda5", "",
David Zeuthen8f191b22013-08-06 12:27:50 -0700357 &install_plan));
358 EXPECT_EQ(in.hash, install_plan.payload_hash);
359 EXPECT_EQ(install_plan.download_url, p2p_url);
360 EXPECT_TRUE(install_plan.hash_checks_mandatory);
361}
362
adlr@google.com3defe6a2009-12-04 20:57:17 +0000363} // namespace chromeos_update_engine