omaha_request_params_unittest.cc revision 1c0fe79c7ef2b43946d756b54c8505d2bf48b93b
1// Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <stdio.h> 6 7#include <string> 8 9#include "base/file_util.h" 10#include "gtest/gtest.h" 11#include "update_engine/install_plan.h" 12#include "update_engine/mock_system_state.h" 13#include "update_engine/omaha_request_params.h" 14#include "update_engine/test_utils.h" 15#include "update_engine/utils.h" 16 17using std::string; 18 19namespace chromeos_update_engine { 20 21class OmahaRequestParamsTest : public ::testing::Test { 22 public: 23 OmahaRequestParamsTest() : params_(NULL) {} 24 25 protected: 26 // Return true iff the OmahaRequestParams::Init succeeded. If 27 // out is non-NULL, it's set w/ the generated data. 28 bool DoTest(OmahaRequestParams* out, const string& app_version, 29 const string& omaha_url); 30 31 virtual void SetUp() { 32 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc")); 33 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + 34 utils::kStatefulPartition + "/etc")); 35 // Create a fresh copy of the params for each test, so there's no 36 // unintended reuse of state across tests. 37 MockSystemState mock_system_state; 38 OmahaRequestParams new_params(&mock_system_state); 39 params_ = new_params; 40 params_.set_root(string("./") + kTestDir); 41 params_.SetLockDown(false); 42 } 43 44 virtual void TearDown() { 45 EXPECT_EQ(0, System(string("rm -rf ") + kTestDir)); 46 } 47 48 OmahaRequestParams params_; 49 50 static const string kTestDir; 51}; 52 53const string OmahaRequestParamsTest::kTestDir = 54 "omaha_request_params-test"; 55 56bool OmahaRequestParamsTest::DoTest(OmahaRequestParams* out, 57 const string& app_version, 58 const string& omaha_url) { 59 bool success = params_.Init(app_version, omaha_url, false); 60 if (out) 61 *out = params_; 62 return success; 63} 64 65namespace { 66string GetMachineType() { 67 string machine_type; 68 if (!utils::ReadPipe("uname -m", &machine_type)) 69 return ""; 70 // Strip anything from the first newline char. 71 size_t newline_pos = machine_type.find('\n'); 72 if (newline_pos != string::npos) 73 machine_type.erase(newline_pos); 74 return machine_type; 75} 76} // namespace {} 77 78TEST_F(OmahaRequestParamsTest, SimpleTest) { 79 ASSERT_TRUE(WriteFileString( 80 kTestDir + "/etc/lsb-release", 81 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 82 "CHROMEOS_RELEASE_FOO=bar\n" 83 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 84 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 85 "CHROMEOS_AUSERVER=http://www.google.com")); 86 MockSystemState mock_system_state; 87 OmahaRequestParams out(&mock_system_state); 88 EXPECT_TRUE(DoTest(&out, "", "")); 89 EXPECT_EQ("Chrome OS", out.os_platform()); 90 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 91 EXPECT_EQ("arm-generic", out.os_board()); 92 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 93 EXPECT_EQ("0.2.2.3", out.app_version()); 94 EXPECT_EQ("en-US", out.app_lang()); 95 EXPECT_EQ("", out.hwid()); 96 EXPECT_TRUE(out.delta_okay()); 97 EXPECT_EQ("dev-channel", out.target_channel()); 98 EXPECT_EQ("http://www.google.com", out.update_url()); 99} 100 101TEST_F(OmahaRequestParamsTest, AppIDTest) { 102 ASSERT_TRUE(WriteFileString( 103 kTestDir + "/etc/lsb-release", 104 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 105 "CHROMEOS_RELEASE_FOO=bar\n" 106 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 107 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 108 "CHROMEOS_RELEASE_APPID={58c35cef-9d30-476e-9098-ce20377d535d}\n" 109 "CHROMEOS_AUSERVER=http://www.google.com")); 110 MockSystemState mock_system_state; 111 OmahaRequestParams out(&mock_system_state); 112 EXPECT_TRUE(DoTest(&out, "", "")); 113 EXPECT_EQ("Chrome OS", out.os_platform()); 114 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 115 EXPECT_EQ("arm-generic", out.os_board()); 116 EXPECT_EQ("{58c35cef-9d30-476e-9098-ce20377d535d}", out.app_id()); 117 EXPECT_EQ("0.2.2.3", out.app_version()); 118 EXPECT_EQ("en-US", out.app_lang()); 119 EXPECT_EQ("", out.hwid()); 120 EXPECT_TRUE(out.delta_okay()); 121 EXPECT_EQ("dev-channel", out.target_channel()); 122 EXPECT_EQ("http://www.google.com", out.update_url()); 123} 124 125TEST_F(OmahaRequestParamsTest, MissingChannelTest) { 126 ASSERT_TRUE(WriteFileString( 127 kTestDir + "/etc/lsb-release", 128 "CHROMEOS_RELEASE_FOO=bar\n" 129 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 130 "CHROMEOS_RELEASE_TRXCK=dev-channel")); 131 MockSystemState mock_system_state; 132 OmahaRequestParams out(&mock_system_state); 133 EXPECT_TRUE(DoTest(&out, "", "")); 134 EXPECT_EQ("Chrome OS", out.os_platform()); 135 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 136 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 137 EXPECT_EQ("0.2.2.3", out.app_version()); 138 EXPECT_EQ("en-US", out.app_lang()); 139 EXPECT_EQ("", out.target_channel()); 140} 141 142TEST_F(OmahaRequestParamsTest, ConfusingReleaseTest) { 143 ASSERT_TRUE(WriteFileString( 144 kTestDir + "/etc/lsb-release", 145 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n" 146 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 147 "CHROMEOS_RELEASE_TRXCK=dev-channel")); 148 MockSystemState mock_system_state; 149 OmahaRequestParams out(&mock_system_state); 150 EXPECT_TRUE(DoTest(&out, "", "")); 151 EXPECT_EQ("Chrome OS", out.os_platform()); 152 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 153 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 154 EXPECT_EQ("0.2.2.3", out.app_version()); 155 EXPECT_EQ("en-US", out.app_lang()); 156 EXPECT_EQ("", out.target_channel()); 157} 158 159TEST_F(OmahaRequestParamsTest, MissingVersionTest) { 160 ASSERT_TRUE(WriteFileString( 161 kTestDir + "/etc/lsb-release", 162 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 163 "CHROMEOS_RELEASE_FOO=bar\n" 164 "CHROMEOS_RELEASE_TRACK=dev-channel")); 165 MockSystemState mock_system_state; 166 OmahaRequestParams out(&mock_system_state); 167 EXPECT_TRUE(DoTest(&out, "", "")); 168 EXPECT_EQ("Chrome OS", out.os_platform()); 169 EXPECT_EQ(string("_") + GetMachineType(), out.os_sp()); 170 EXPECT_EQ("arm-generic", out.os_board()); 171 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 172 EXPECT_EQ("", out.app_version()); 173 EXPECT_EQ("en-US", out.app_lang()); 174 EXPECT_TRUE(out.delta_okay()); 175 EXPECT_EQ("dev-channel", out.target_channel()); 176} 177 178TEST_F(OmahaRequestParamsTest, ForceVersionTest) { 179 ASSERT_TRUE(WriteFileString( 180 kTestDir + "/etc/lsb-release", 181 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 182 "CHROMEOS_RELEASE_FOO=bar\n" 183 "CHROMEOS_RELEASE_TRACK=dev-channel")); 184 MockSystemState mock_system_state; 185 OmahaRequestParams out(&mock_system_state); 186 EXPECT_TRUE(DoTest(&out, "ForcedVersion", "")); 187 EXPECT_EQ("Chrome OS", out.os_platform()); 188 EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp()); 189 EXPECT_EQ("arm-generic", out.os_board()); 190 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 191 EXPECT_EQ("ForcedVersion", out.app_version()); 192 EXPECT_EQ("en-US", out.app_lang()); 193 EXPECT_TRUE(out.delta_okay()); 194 EXPECT_EQ("dev-channel", out.target_channel()); 195} 196 197TEST_F(OmahaRequestParamsTest, ForcedURLTest) { 198 ASSERT_TRUE(WriteFileString( 199 kTestDir + "/etc/lsb-release", 200 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 201 "CHROMEOS_RELEASE_FOO=bar\n" 202 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 203 "CHROMEOS_RELEASE_TRACK=dev-channel")); 204 MockSystemState mock_system_state; 205 OmahaRequestParams out(&mock_system_state); 206 EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com")); 207 EXPECT_EQ("Chrome OS", out.os_platform()); 208 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 209 EXPECT_EQ("arm-generic", out.os_board()); 210 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 211 EXPECT_EQ("0.2.2.3", out.app_version()); 212 EXPECT_EQ("en-US", out.app_lang()); 213 EXPECT_TRUE(out.delta_okay()); 214 EXPECT_EQ("dev-channel", out.target_channel()); 215 EXPECT_EQ("http://forced.google.com", out.update_url()); 216} 217 218TEST_F(OmahaRequestParamsTest, MissingURLTest) { 219 ASSERT_TRUE(WriteFileString( 220 kTestDir + "/etc/lsb-release", 221 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 222 "CHROMEOS_RELEASE_FOO=bar\n" 223 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 224 "CHROMEOS_RELEASE_TRACK=dev-channel")); 225 MockSystemState mock_system_state; 226 OmahaRequestParams out(&mock_system_state); 227 EXPECT_TRUE(DoTest(&out, "", "")); 228 EXPECT_EQ("Chrome OS", out.os_platform()); 229 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 230 EXPECT_EQ("arm-generic", out.os_board()); 231 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 232 EXPECT_EQ("0.2.2.3", out.app_version()); 233 EXPECT_EQ("en-US", out.app_lang()); 234 EXPECT_TRUE(out.delta_okay()); 235 EXPECT_EQ("dev-channel", out.target_channel()); 236 EXPECT_EQ(kProductionOmahaUrl, out.update_url()); 237} 238 239TEST_F(OmahaRequestParamsTest, NoDeltasTest) { 240 ASSERT_TRUE(WriteFileString( 241 kTestDir + "/etc/lsb-release", 242 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n" 243 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 244 "CHROMEOS_RELEASE_TRXCK=dev-channel")); 245 ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", "")); 246 MockSystemState mock_system_state; 247 OmahaRequestParams out(&mock_system_state); 248 EXPECT_TRUE(DoTest(&out, "", "")); 249 EXPECT_FALSE(out.delta_okay()); 250} 251 252TEST_F(OmahaRequestParamsTest, OverrideTest) { 253 ASSERT_TRUE(WriteFileString( 254 kTestDir + "/etc/lsb-release", 255 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 256 "CHROMEOS_RELEASE_FOO=bar\n" 257 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 258 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 259 "CHROMEOS_AUSERVER=http://www.google.com")); 260 ASSERT_TRUE(WriteFileString( 261 kTestDir + utils::kStatefulPartition + "/etc/lsb-release", 262 "CHROMEOS_RELEASE_BOARD=x86-generic\n" 263 "CHROMEOS_RELEASE_TRACK=beta-channel\n" 264 "CHROMEOS_AUSERVER=https://www.google.com")); 265 MockSystemState mock_system_state; 266 OmahaRequestParams out(&mock_system_state); 267 EXPECT_TRUE(DoTest(&out, "", "")); 268 EXPECT_EQ("Chrome OS", out.os_platform()); 269 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 270 EXPECT_EQ("x86-generic", out.os_board()); 271 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 272 EXPECT_EQ("0.2.2.3", out.app_version()); 273 EXPECT_EQ("en-US", out.app_lang()); 274 EXPECT_EQ("", out.hwid()); 275 EXPECT_FALSE(out.delta_okay()); 276 EXPECT_EQ("beta-channel", out.target_channel()); 277 EXPECT_EQ("https://www.google.com", out.update_url()); 278} 279 280TEST_F(OmahaRequestParamsTest, OverrideLockDownTest) { 281 ASSERT_TRUE(WriteFileString( 282 kTestDir + "/etc/lsb-release", 283 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 284 "CHROMEOS_RELEASE_FOO=bar\n" 285 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 286 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 287 "CHROMEOS_AUSERVER=https://www.google.com")); 288 ASSERT_TRUE(WriteFileString( 289 kTestDir + utils::kStatefulPartition + "/etc/lsb-release", 290 "CHROMEOS_RELEASE_BOARD=x86-generic\n" 291 "CHROMEOS_RELEASE_TRACK=stable-channel\n" 292 "CHROMEOS_AUSERVER=http://www.google.com")); 293 params_.SetLockDown(true); 294 MockSystemState mock_system_state; 295 OmahaRequestParams out(&mock_system_state); 296 EXPECT_TRUE(DoTest(&out, "", "")); 297 EXPECT_EQ("arm-generic", out.os_board()); 298 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 299 EXPECT_EQ("0.2.2.3", out.app_version()); 300 EXPECT_EQ("", out.hwid()); 301 EXPECT_FALSE(out.delta_okay()); 302 EXPECT_EQ("stable-channel", out.target_channel()); 303 EXPECT_EQ("https://www.google.com", out.update_url()); 304} 305 306TEST_F(OmahaRequestParamsTest, OverrideSameChannelTest) { 307 ASSERT_TRUE(WriteFileString( 308 kTestDir + "/etc/lsb-release", 309 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 310 "CHROMEOS_RELEASE_FOO=bar\n" 311 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 312 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 313 "CHROMEOS_AUSERVER=http://www.google.com")); 314 ASSERT_TRUE(WriteFileString( 315 kTestDir + utils::kStatefulPartition + "/etc/lsb-release", 316 "CHROMEOS_RELEASE_BOARD=x86-generic\n" 317 "CHROMEOS_RELEASE_TRACK=dev-channel")); 318 MockSystemState mock_system_state; 319 OmahaRequestParams out(&mock_system_state); 320 EXPECT_TRUE(DoTest(&out, "", "")); 321 EXPECT_EQ("x86-generic", out.os_board()); 322 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 323 EXPECT_EQ("0.2.2.3", out.app_version()); 324 EXPECT_EQ("", out.hwid()); 325 EXPECT_TRUE(out.delta_okay()); 326 EXPECT_EQ("dev-channel", out.target_channel()); 327 EXPECT_EQ("http://www.google.com", out.update_url()); 328} 329 330TEST_F(OmahaRequestParamsTest, SetTargetChannelTest) { 331 ASSERT_TRUE(WriteFileString( 332 kTestDir + "/etc/lsb-release", 333 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 334 "CHROMEOS_RELEASE_FOO=bar\n" 335 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 336 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 337 "CHROMEOS_AUSERVER=http://www.google.com")); 338 { 339 MockSystemState mock_system_state; 340 OmahaRequestParams params(&mock_system_state); 341 params.set_root(string("./") + kTestDir); 342 params.SetLockDown(false); 343 EXPECT_TRUE(params.Init("", "", false)); 344 params.SetTargetChannel("canary-channel", false); 345 EXPECT_FALSE(params.is_powerwash_allowed()); 346 } 347 MockSystemState mock_system_state; 348 OmahaRequestParams out(&mock_system_state); 349 EXPECT_TRUE(DoTest(&out, "", "")); 350 EXPECT_EQ("canary-channel", out.target_channel()); 351 EXPECT_FALSE(out.is_powerwash_allowed()); 352} 353 354TEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) { 355 ASSERT_TRUE(WriteFileString( 356 kTestDir + "/etc/lsb-release", 357 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 358 "CHROMEOS_RELEASE_FOO=bar\n" 359 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 360 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 361 "CHROMEOS_AUSERVER=http://www.google.com")); 362 { 363 MockSystemState mock_system_state; 364 OmahaRequestParams params(&mock_system_state); 365 params.set_root(string("./") + kTestDir); 366 params.SetLockDown(false); 367 EXPECT_TRUE(params.Init("", "", false)); 368 params.SetTargetChannel("canary-channel", true); 369 EXPECT_TRUE(params.is_powerwash_allowed()); 370 } 371 MockSystemState mock_system_state; 372 OmahaRequestParams out(&mock_system_state); 373 EXPECT_TRUE(DoTest(&out, "", "")); 374 EXPECT_EQ("canary-channel", out.target_channel()); 375 EXPECT_TRUE(out.is_powerwash_allowed()); 376} 377 378TEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) { 379 ASSERT_TRUE(WriteFileString( 380 kTestDir + "/etc/lsb-release", 381 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 382 "CHROMEOS_RELEASE_FOO=bar\n" 383 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 384 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 385 "CHROMEOS_AUSERVER=http://www.google.com")); 386 { 387 MockSystemState mock_system_state; 388 OmahaRequestParams params(&mock_system_state); 389 params.set_root(string("./") + kTestDir); 390 params.SetLockDown(true); 391 EXPECT_TRUE(params.Init("", "", false)); 392 params.SetTargetChannel("dogfood-channel", true); 393 EXPECT_FALSE(params.is_powerwash_allowed()); 394 } 395 MockSystemState mock_system_state; 396 OmahaRequestParams out(&mock_system_state); 397 EXPECT_TRUE(DoTest(&out, "", "")); 398 EXPECT_EQ("arm-generic", out.os_board()); 399 EXPECT_EQ("dev-channel", out.target_channel()); 400 EXPECT_FALSE(out.is_powerwash_allowed()); 401} 402 403TEST_F(OmahaRequestParamsTest, IsValidChannelTest) { 404 params_.SetLockDown(false); 405 EXPECT_TRUE(params_.IsValidChannel("canary-channel")); 406 EXPECT_TRUE(params_.IsValidChannel("stable-channel")); 407 EXPECT_TRUE(params_.IsValidChannel("beta-channel")); 408 EXPECT_TRUE(params_.IsValidChannel("dev-channel")); 409 EXPECT_FALSE(params_.IsValidChannel("testimage-channel")); 410 EXPECT_FALSE(params_.IsValidChannel("dogfood-channel")); 411 EXPECT_FALSE(params_.IsValidChannel("some-channel")); 412 EXPECT_FALSE(params_.IsValidChannel("")); 413} 414 415TEST_F(OmahaRequestParamsTest, ValidChannelTest) { 416 ASSERT_TRUE(WriteFileString( 417 kTestDir + "/etc/lsb-release", 418 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 419 "CHROMEOS_RELEASE_FOO=bar\n" 420 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 421 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 422 "CHROMEOS_AUSERVER=http://www.google.com")); 423 params_.SetLockDown(true); 424 MockSystemState mock_system_state; 425 OmahaRequestParams out(&mock_system_state); 426 EXPECT_TRUE(DoTest(&out, "", "")); 427 EXPECT_EQ("Chrome OS", out.os_platform()); 428 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp()); 429 EXPECT_EQ("arm-generic", out.os_board()); 430 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id()); 431 EXPECT_EQ("0.2.2.3", out.app_version()); 432 EXPECT_EQ("en-US", out.app_lang()); 433 EXPECT_EQ("", out.hwid()); 434 EXPECT_TRUE(out.delta_okay()); 435 EXPECT_EQ("dev-channel", out.target_channel()); 436 EXPECT_EQ("http://www.google.com", out.update_url()); 437} 438 439TEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) { 440 ASSERT_TRUE(WriteFileString( 441 kTestDir + "/etc/lsb-release", 442 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 443 "CHROMEOS_RELEASE_FOO=bar\n" 444 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 445 "CHROMEOS_RELEASE_TRACK=dev-channel\n" 446 "CHROMEOS_AUSERVER=http://www.google.com")); 447 params_.SetLockDown(false); 448 449 // Check LSB value is used by default when SetTargetChannel is not called. 450 params_.Init("", "", false); 451 EXPECT_EQ("dev-channel", params_.target_channel()); 452 453 // When an invalid value is set, it should be ignored and the 454 // value from lsb-release should be used instead. 455 params_.Init("", "", false); 456 EXPECT_FALSE(params_.SetTargetChannel("invalid-channel", false)); 457 EXPECT_EQ("dev-channel", params_.target_channel()); 458 459 // When set to a valid value, it should take effect. 460 params_.Init("", "", false); 461 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true)); 462 EXPECT_EQ("beta-channel", params_.target_channel()); 463 464 // When set to the same value, it should be idempotent. 465 params_.Init("", "", false); 466 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true)); 467 EXPECT_EQ("beta-channel", params_.target_channel()); 468 469 // When set to a valid value while a change is already pending, it should 470 // succeed. 471 params_.Init("", "", false); 472 EXPECT_TRUE(params_.SetTargetChannel("stable-channel", true)); 473 EXPECT_EQ("stable-channel", params_.target_channel()); 474 475 // Set a different channel in stateful LSB release. 476 ASSERT_TRUE(WriteFileString( 477 kTestDir + utils::kStatefulPartition + "/etc/lsb-release", 478 "CHROMEOS_RELEASE_TRACK=stable-channel\n" 479 "CHROMEOS_IS_POWERWASH_ALLOWED=true\n")); 480 481 // When set to a valid value while a change is already pending, it should 482 // succeed. 483 params_.Init("", "", false); 484 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true)); 485 // The target channel should reflect the change, but the download channel 486 // should continue to retain the old value ... 487 EXPECT_EQ("beta-channel", params_.target_channel()); 488 EXPECT_EQ("stable-channel", params_.download_channel()); 489 490 // ... until we update the download channel explicitly. 491 params_.UpdateDownloadChannel(); 492 EXPECT_EQ("beta-channel", params_.download_channel()); 493 EXPECT_EQ("beta-channel", params_.target_channel()); 494} 495 496TEST_F(OmahaRequestParamsTest, ChannelIndexTest) { 497 int canary = params_.GetChannelIndex("canary-channel"); 498 int dev = params_.GetChannelIndex("dev-channel"); 499 int beta = params_.GetChannelIndex("beta-channel"); 500 int stable = params_.GetChannelIndex("stable-channel"); 501 EXPECT_LE(canary, dev); 502 EXPECT_LE(dev, beta); 503 EXPECT_LE(beta, stable); 504 505 // testimage-channel or other names are not recognized, so index will be -1. 506 int testimage = params_.GetChannelIndex("testimage-channel"); 507 int bogus = params_.GetChannelIndex("bogus-channel"); 508 EXPECT_EQ(-1, testimage); 509 EXPECT_EQ(-1, bogus); 510} 511 512TEST_F(OmahaRequestParamsTest, ToMoreStableChannelFlagTest) { 513 ASSERT_TRUE(WriteFileString( 514 kTestDir + "/etc/lsb-release", 515 "CHROMEOS_RELEASE_BOARD=arm-generic\n" 516 "CHROMEOS_RELEASE_FOO=bar\n" 517 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n" 518 "CHROMEOS_RELEASE_TRACK=canary-channel\n" 519 "CHROMEOS_AUSERVER=http://www.google.com")); 520 ASSERT_TRUE(WriteFileString( 521 kTestDir + utils::kStatefulPartition + "/etc/lsb-release", 522 "CHROMEOS_RELEASE_BOARD=x86-generic\n" 523 "CHROMEOS_RELEASE_TRACK=stable-channel\n" 524 "CHROMEOS_AUSERVER=https://www.google.com")); 525 MockSystemState mock_system_state; 526 OmahaRequestParams out(&mock_system_state); 527 EXPECT_TRUE(DoTest(&out, "", "")); 528 EXPECT_EQ("https://www.google.com", out.update_url()); 529 EXPECT_FALSE(out.delta_okay()); 530 EXPECT_EQ("stable-channel", out.target_channel()); 531 EXPECT_TRUE(out.to_more_stable_channel()); 532} 533 534TEST_F(OmahaRequestParamsTest, ShouldLockDownTest) { 535 EXPECT_FALSE(params_.ShouldLockDown()); 536} 537 538} // namespace chromeos_update_engine 539