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