blob: c3efb8bf6a2c4e87024a88c3ba9486ff6eee04ba [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"
adlr@google.com3defe6a2009-12-04 20:57:17 +000010#include "update_engine/omaha_response_handler_action.h"
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080011#include "update_engine/mock_system_state.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000012#include "update_engine/test_utils.h"
13#include "update_engine/utils.h"
14
15using std::string;
Darin Petkov9c096d62010-11-17 14:49:04 -080016using testing::NiceMock;
Darin Petkov73058b42010-10-06 16:32:19 -070017using testing::Return;
adlr@google.com3defe6a2009-12-04 20:57:17 +000018
19namespace chromeos_update_engine {
20
21class OmahaResponseHandlerActionTest : public ::testing::Test {
22 public:
23 // Return true iff the OmahaResponseHandlerAction succeeded.
24 // If out is non-NULL, it's set w/ the response from the action.
Jay Srinivasanae4697c2013-03-18 17:08:08 -070025 bool DoTestCommon(MockSystemState* mock_system_state,
26 const OmahaResponse& in,
27 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070028 const string& deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070029 InstallPlan* out);
Darin Petkov6a5b3222010-07-13 14:55:28 -070030 bool DoTest(const OmahaResponse& in,
adlr@google.com3defe6a2009-12-04 20:57:17 +000031 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070032 const string& deadline_file,
adlr@google.com3defe6a2009-12-04 20:57:17 +000033 InstallPlan* out);
34};
35
36class OmahaResponseHandlerActionProcessorDelegate
37 : public ActionProcessorDelegate {
38 public:
39 OmahaResponseHandlerActionProcessorDelegate()
David Zeuthena99981f2013-04-29 13:42:47 -070040 : code_(kErrorCodeError),
Darin Petkovc1a8b422010-07-19 11:34:49 -070041 code_set_(false) {}
adlr@google.com3defe6a2009-12-04 20:57:17 +000042 void ActionCompleted(ActionProcessor* processor,
43 AbstractAction* action,
David Zeuthena99981f2013-04-29 13:42:47 -070044 ErrorCode code) {
adlr@google.com3defe6a2009-12-04 20:57:17 +000045 if (action->Type() == OmahaResponseHandlerAction::StaticType()) {
Darin Petkovc1a8b422010-07-19 11:34:49 -070046 code_ = code;
47 code_set_ = true;
adlr@google.com3defe6a2009-12-04 20:57:17 +000048 }
49 }
David Zeuthena99981f2013-04-29 13:42:47 -070050 ErrorCode code_;
Darin Petkovc1a8b422010-07-19 11:34:49 -070051 bool code_set_;
adlr@google.com3defe6a2009-12-04 20:57:17 +000052};
53
54namespace {
55const string kLongName =
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 "very_long_name_and_no_slashes-very_long_name_and_no_slashes"
63 "-the_update_a.b.c.d_DELTA_.tgz";
Chris Sosaaa18e162013-06-20 13:20:30 -070064const string kBadVersion = "don't update me";
adlr@google.com3defe6a2009-12-04 20:57:17 +000065} // namespace {}
66
Jay Srinivasanae4697c2013-03-18 17:08:08 -070067bool OmahaResponseHandlerActionTest::DoTestCommon(
68 MockSystemState* mock_system_state,
69 const OmahaResponse& in,
70 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070071 const string& test_deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -070072 InstallPlan* out) {
adlr@google.com3defe6a2009-12-04 20:57:17 +000073 ActionProcessor processor;
74 OmahaResponseHandlerActionProcessorDelegate delegate;
75 processor.set_delegate(&delegate);
76
Darin Petkov6a5b3222010-07-13 14:55:28 -070077 ObjectFeederAction<OmahaResponse> feeder_action;
adlr@google.com3defe6a2009-12-04 20:57:17 +000078 feeder_action.set_obj(in);
Chris Sosaaa18e162013-06-20 13:20:30 -070079 if (in.update_exists and in.version != kBadVersion) {
Jay Srinivasanae4697c2013-03-18 17:08:08 -070080 EXPECT_CALL(*(mock_system_state->mock_prefs()),
Jay Srinivasan6f6ea002012-12-14 11:26:28 -080081 SetString(kPrefsUpdateCheckResponseHash, in.hash))
Darin Petkov73058b42010-10-06 16:32:19 -070082 .WillOnce(Return(true));
83 }
Jay Srinivasan53173b92013-05-17 17:13:01 -070084
85 string current_url = in.payload_urls.size() ? in.payload_urls[0] : "";
86 EXPECT_CALL(*(mock_system_state->mock_payload_state()), GetCurrentUrl())
87 .WillRepeatedly(Return(current_url));
Chris Sosaaa18e162013-06-20 13:20:30 -070088 EXPECT_CALL(*(mock_system_state->mock_payload_state()), GetRollbackVersion())
89 .WillRepeatedly(Return(kBadVersion));
Jay Srinivasan53173b92013-05-17 17:13:01 -070090
Gilad Arnold4dbd47e2013-07-22 05:39:26 -070091 OmahaResponseHandlerAction response_handler_action(
92 mock_system_state,
93 (test_deadline_file.empty() ?
94 OmahaResponseHandlerAction::kDeadlineFile : test_deadline_file));
adlr@google.com3defe6a2009-12-04 20:57:17 +000095 response_handler_action.set_boot_device(boot_dev);
96 BondActions(&feeder_action, &response_handler_action);
97 ObjectCollectorAction<InstallPlan> collector_action;
98 BondActions(&response_handler_action, &collector_action);
99 processor.EnqueueAction(&feeder_action);
100 processor.EnqueueAction(&response_handler_action);
101 processor.EnqueueAction(&collector_action);
102 processor.StartProcessing();
103 EXPECT_TRUE(!processor.IsRunning())
104 << "Update test to handle non-asynch actions";
105 if (out)
106 *out = collector_action.object();
Darin Petkovc1a8b422010-07-19 11:34:49 -0700107 EXPECT_TRUE(delegate.code_set_);
David Zeuthena99981f2013-04-29 13:42:47 -0700108 return delegate.code_ == kErrorCodeSuccess;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000109}
110
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700111bool OmahaResponseHandlerActionTest::DoTest(const OmahaResponse& in,
112 const string& boot_dev,
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700113 const string& deadline_file,
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700114 InstallPlan* out) {
115 MockSystemState mock_system_state;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700116 return DoTestCommon(&mock_system_state, in, boot_dev, deadline_file, out);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700117}
118
adlr@google.com3defe6a2009-12-04 20:57:17 +0000119TEST_F(OmahaResponseHandlerActionTest, SimpleTest) {
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700120 string test_deadline_file;
121 CHECK(utils::MakeTempFile(
122 "/tmp/omaha_response_handler_action_unittest-XXXXXX",
123 &test_deadline_file, NULL));
124 ScopedPathUnlinker deadline_unlinker(test_deadline_file);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000125 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700126 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000127 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700128 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800129 in.payload_urls.push_back("http://foo/the_update_a.b.c.d.tgz");
adlr@google.com3defe6a2009-12-04 20:57:17 +0000130 in.more_info_url = "http://more/info";
131 in.hash = "HASH+";
132 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000133 in.prompt = false;
Darin Petkov6c118642010-10-21 12:06:30 -0700134 in.deadline = "20101020";
adlr@google.com3defe6a2009-12-04 20:57:17 +0000135 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700136 EXPECT_TRUE(DoTest(in, "/dev/sda3", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800137 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700138 EXPECT_EQ(in.hash, install_plan.payload_hash);
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700139 EXPECT_EQ("/dev/sda5", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700140 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700141 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline));
Darin Petkov6c118642010-10-21 12:06:30 -0700142 EXPECT_EQ("20101020", deadline);
143 struct stat deadline_stat;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700144 EXPECT_EQ(0, stat(test_deadline_file.c_str(), &deadline_stat));
Darin Petkov6c118642010-10-21 12:06:30 -0700145 EXPECT_EQ(S_IFREG | S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH,
146 deadline_stat.st_mode);
Chris Sosafb1020e2013-07-29 17:27:33 -0700147 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000148 }
149 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700150 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000151 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700152 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800153 in.payload_urls.push_back("http://foo/the_update_a.b.c.d.tgz");
adlr@google.com3defe6a2009-12-04 20:57:17 +0000154 in.more_info_url = "http://more/info";
155 in.hash = "HASHj+";
156 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000157 in.prompt = true;
158 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700159 EXPECT_TRUE(DoTest(in, "/dev/sda5", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800160 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700161 EXPECT_EQ(in.hash, install_plan.payload_hash);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000162 EXPECT_EQ("/dev/sda3", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700163 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700164 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline) &&
165 deadline.empty());
Chris Sosafb1020e2013-07-29 17:27:33 -0700166 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000167 }
168 {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700169 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000170 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700171 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800172 in.payload_urls.push_back(kLongName);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000173 in.more_info_url = "http://more/info";
174 in.hash = "HASHj+";
175 in.size = 12;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000176 in.prompt = true;
Darin Petkov6c118642010-10-21 12:06:30 -0700177 in.deadline = "some-deadline";
adlr@google.com3defe6a2009-12-04 20:57:17 +0000178 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700179 EXPECT_TRUE(DoTest(in, "/dev/sda3", test_deadline_file, &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800180 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700181 EXPECT_EQ(in.hash, install_plan.payload_hash);
Andrew de los Reyesf98bff82010-05-06 13:33:25 -0700182 EXPECT_EQ("/dev/sda5", install_plan.install_path);
Darin Petkov6c118642010-10-21 12:06:30 -0700183 string deadline;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700184 EXPECT_TRUE(utils::ReadFile(test_deadline_file, &deadline));
Darin Petkov6c118642010-10-21 12:06:30 -0700185 EXPECT_EQ("some-deadline", deadline);
Chris Sosafb1020e2013-07-29 17:27:33 -0700186 EXPECT_EQ(in.version, install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000187 }
188}
189
190TEST_F(OmahaResponseHandlerActionTest, NoUpdatesTest) {
Darin Petkov6a5b3222010-07-13 14:55:28 -0700191 OmahaResponse in;
adlr@google.com3defe6a2009-12-04 20:57:17 +0000192 in.update_exists = false;
193 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700194 EXPECT_FALSE(DoTest(in, "/dev/sda1", "", &install_plan));
adlr@google.com3defe6a2009-12-04 20:57:17 +0000195 EXPECT_EQ("", install_plan.download_url);
Jay Srinivasan51dcf262012-09-13 17:24:32 -0700196 EXPECT_EQ("", install_plan.payload_hash);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000197 EXPECT_EQ("", install_plan.install_path);
Chris Sosafb1020e2013-07-29 17:27:33 -0700198 EXPECT_EQ("", install_plan.version);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000199}
200
Chris Sosaaa18e162013-06-20 13:20:30 -0700201TEST_F(OmahaResponseHandlerActionTest, RollbackVersionTest) {
202 string version_ok = "124.0.0";
203
204 InstallPlan install_plan;
205 OmahaResponse in;
206 in.update_exists = true;
207 in.version = kBadVersion;
208 in.payload_urls.push_back("http://foo/the_update_a.b.c.d.tgz");
209 in.more_info_url = "http://more/info";
210 in.hash = "HASHj+";
211 in.size = 12;
212 in.prompt = true;
213
214 // Version is blacklisted for first call so no update.
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700215 EXPECT_FALSE(DoTest(in, "/dev/sda5", "", &install_plan));
Chris Sosaaa18e162013-06-20 13:20:30 -0700216 EXPECT_EQ("", install_plan.download_url);
217 EXPECT_EQ("", install_plan.payload_hash);
218 EXPECT_EQ("", install_plan.install_path);
Chris Sosafb1020e2013-07-29 17:27:33 -0700219 EXPECT_EQ("", install_plan.version);
Chris Sosaaa18e162013-06-20 13:20:30 -0700220
221 // Version isn't blacklisted.
222 in.version = version_ok;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700223 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Chris Sosaaa18e162013-06-20 13:20:30 -0700224 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Chris Sosafb1020e2013-07-29 17:27:33 -0700225 EXPECT_EQ(version_ok, install_plan.version);
Chris Sosaaa18e162013-06-20 13:20:30 -0700226}
227
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800228TEST_F(OmahaResponseHandlerActionTest, HashChecksForHttpTest) {
229 OmahaResponse in;
230 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700231 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800232 in.payload_urls.push_back("http://test.should/need/hash.checks.signed");
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800233 in.more_info_url = "http://more/info";
234 in.hash = "HASHj+";
235 in.size = 12;
236 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700237 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800238 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800239 EXPECT_EQ(in.hash, install_plan.payload_hash);
240 EXPECT_TRUE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700241 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800242}
243
244TEST_F(OmahaResponseHandlerActionTest, HashChecksForHttpsTest) {
245 OmahaResponse in;
246 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700247 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800248 in.payload_urls.push_back("https://test.should.not/need/hash.checks.signed");
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800249 in.more_info_url = "http://more/info";
250 in.hash = "HASHj+";
251 in.size = 12;
252 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700253 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800254 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800255 EXPECT_EQ(in.hash, install_plan.payload_hash);
256 EXPECT_FALSE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700257 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan738fdf32012-12-07 17:40:54 -0800258}
259
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800260TEST_F(OmahaResponseHandlerActionTest, HashChecksForBothHttpAndHttpsTest) {
261 OmahaResponse in;
262 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700263 in.version = "a.b.c.d";
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800264 in.payload_urls.push_back("http://test.should.still/need/hash.checks");
265 in.payload_urls.push_back("https://test.should.still/need/hash.checks");
266 in.more_info_url = "http://more/info";
267 in.hash = "HASHj+";
268 in.size = 12;
269 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700270 EXPECT_TRUE(DoTest(in, "/dev/sda5", "", &install_plan));
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800271 EXPECT_EQ(in.payload_urls[0], install_plan.download_url);
272 EXPECT_EQ(in.hash, install_plan.payload_hash);
273 EXPECT_TRUE(install_plan.hash_checks_mandatory);
Chris Sosafb1020e2013-07-29 17:27:33 -0700274 EXPECT_EQ(in.version, install_plan.version);
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800275}
276
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700277TEST_F(OmahaResponseHandlerActionTest, ChangeToMoreStableChannelTest) {
278 OmahaResponse in;
279 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700280 in.version = "a.b.c.d";
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700281 in.payload_urls.push_back("https://MoreStableChannelTest");
282 in.more_info_url = "http://more/info";
283 in.hash = "HASHjk";
284 in.size = 15;
285
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700286 // Create a uniquely named test directory.
287 string test_dir;
288 ASSERT_TRUE(utils::MakeTempDirectory(
289 "omaha_response_handler_action-test-XXXXXX", &test_dir));
290
291 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc"));
292 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir +
Chris Sosabe45bef2013-04-09 18:25:12 -0700293 kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700294 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700295 test_dir + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700296 "CHROMEOS_RELEASE_TRACK=canary-channel\n"));
297 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700298 test_dir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700299 "CHROMEOS_IS_POWERWASH_ALLOWED=true\n"
300 "CHROMEOS_RELEASE_TRACK=stable-channel\n"));
301
302 MockSystemState mock_system_state;
303 OmahaRequestParams params(&mock_system_state);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700304 params.set_root(string("./") + test_dir);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700305 params.SetLockDown(false);
306 params.Init("1.2.3.4", "", 0);
307 EXPECT_EQ("canary-channel", params.current_channel());
308 EXPECT_EQ("stable-channel", params.target_channel());
309 EXPECT_TRUE(params.to_more_stable_channel());
310 EXPECT_TRUE(params.is_powerwash_allowed());
311
312 mock_system_state.set_request_params(&params);
313 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700314 EXPECT_TRUE(DoTestCommon(&mock_system_state, in, "/dev/sda5", "",
315 &install_plan));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700316 EXPECT_TRUE(install_plan.powerwash_required);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700317
318 ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700319}
320
321TEST_F(OmahaResponseHandlerActionTest, ChangeToLessStableChannelTest) {
322 OmahaResponse in;
323 in.update_exists = true;
Chris Sosa3b748432013-06-20 16:42:59 -0700324 in.version = "a.b.c.d";
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700325 in.payload_urls.push_back("https://LessStableChannelTest");
326 in.more_info_url = "http://more/info";
327 in.hash = "HASHjk";
328 in.size = 15;
329
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700330 // Create a uniquely named test directory.
331 string test_dir;
332 ASSERT_TRUE(utils::MakeTempDirectory(
333 "omaha_response_handler_action-test-XXXXXX", &test_dir));
334
335 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc"));
336 ASSERT_EQ(0, System(string("mkdir -p ") + test_dir +
Chris Sosabe45bef2013-04-09 18:25:12 -0700337 kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700338 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700339 test_dir + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700340 "CHROMEOS_RELEASE_TRACK=stable-channel\n"));
341 ASSERT_TRUE(WriteFileString(
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700342 test_dir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700343 "CHROMEOS_RELEASE_TRACK=canary-channel\n"));
344
345 MockSystemState mock_system_state;
346 OmahaRequestParams params(&mock_system_state);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700347 params.set_root(string("./") + test_dir);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700348 params.SetLockDown(false);
349 params.Init("5.6.7.8", "", 0);
350 EXPECT_EQ("stable-channel", params.current_channel());
351 params.SetTargetChannel("canary-channel", false);
352 EXPECT_EQ("canary-channel", params.target_channel());
353 EXPECT_FALSE(params.to_more_stable_channel());
354 EXPECT_FALSE(params.is_powerwash_allowed());
355
356 mock_system_state.set_request_params(&params);
357 InstallPlan install_plan;
Gilad Arnold4dbd47e2013-07-22 05:39:26 -0700358 EXPECT_TRUE(DoTestCommon(&mock_system_state, in, "/dev/sda5", "",
359 &install_plan));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700360 EXPECT_FALSE(install_plan.powerwash_required);
Gilad Arnoldeff87cc2013-07-22 18:32:09 -0700361
362 ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700363}
Jay Srinivasan6f6ea002012-12-14 11:26:28 -0800364
adlr@google.com3defe6a2009-12-04 20:57:17 +0000365} // namespace chromeos_update_engine