1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2011 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 163defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 178427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo#include "update_engine/omaha_request_params.h" 188427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo 193defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com#include <stdio.h> 20fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov 213defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com#include <string> 22fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov 238427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo#include <base/files/file_util.h> 24297e583af1cec04f5f332b57b91f846921744c91Sen Jiang#include <base/files/scoped_temp_dir.h> 258427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo#include <gtest/gtest.h> 268427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo 2739910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/constants.h" 28297e583af1cec04f5f332b57b91f846921744c91Sen Jiang#include "update_engine/common/fake_prefs.h" 2939910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/platform_constants.h" 3039910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/test_utils.h" 3139910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/utils.h" 325bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold#include "update_engine/fake_system_state.h" 333defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 3410875d90cf67f883ba7c9ed13bc8d706aa8c6fbcAlex Deymousing chromeos_update_engine::test_utils::WriteFileString; 353defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.comusing std::string; 363defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 373defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.comnamespace chromeos_update_engine { 383defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 39ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasanclass OmahaRequestParamsTest : public ::testing::Test { 40ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan public: 415bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParamsTest() : params_(&fake_system_state_) {} 42ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 435a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov protected: 44610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo void SetUp() override { 45c9abbec864f283d1873883bc8f9b523020ee2acbGilad Arnold // Create a uniquely named test directory. 46297e583af1cec04f5f332b57b91f846921744c91Sen Jiang ASSERT_TRUE(tempdir_.CreateUniqueTempDir()); 47ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // Create a fresh copy of the params for each test, so there's no 48ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // unintended reuse of state across tests. 49297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_ = OmahaRequestParams(&fake_system_state_); 502b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params_.set_root(tempdir_.GetPath().value()); 51856166594771c61973856f563e622ccb7dd48aa1Alex Deymo SetLockDown(false); 52297e583af1cec04f5f332b57b91f846921744c91Sen Jiang fake_system_state_.set_prefs(&fake_prefs_); 53856166594771c61973856f563e622ccb7dd48aa1Alex Deymo } 54856166594771c61973856f563e622ccb7dd48aa1Alex Deymo 55856166594771c61973856f563e622ccb7dd48aa1Alex Deymo void SetLockDown(bool locked_down) { 56856166594771c61973856f563e622ccb7dd48aa1Alex Deymo fake_system_state_.fake_hardware()->SetIsOfficialBuild(locked_down); 57856166594771c61973856f563e622ccb7dd48aa1Alex Deymo fake_system_state_.fake_hardware()->SetIsNormalBootMode(locked_down); 585a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov } 595a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov 60ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params_; 615bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state_; 62297e583af1cec04f5f332b57b91f846921744c91Sen Jiang FakePrefs fake_prefs_; 6349d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov 64297e583af1cec04f5f332b57b91f846921744c91Sen Jiang base::ScopedTempDir tempdir_; 653defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com}; 663defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 673defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.comnamespace { 683defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.comstring GetMachineType() { 6919a45f0eda0917b7788b925b501e774208474fdeGilad Arnold string machine_type; 7019a45f0eda0917b7788b925b501e774208474fdeGilad Arnold if (!utils::ReadPipe("uname -m", &machine_type)) 713defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com return ""; 7219a45f0eda0917b7788b925b501e774208474fdeGilad Arnold // Strip anything from the first newline char. 7319a45f0eda0917b7788b925b501e774208474fdeGilad Arnold size_t newline_pos = machine_type.find('\n'); 7419a45f0eda0917b7788b925b501e774208474fdeGilad Arnold if (newline_pos != string::npos) 7519a45f0eda0917b7788b925b501e774208474fdeGilad Arnold machine_type.erase(newline_pos); 7619a45f0eda0917b7788b925b501e774208474fdeGilad Arnold return machine_type; 773defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com} 78d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko} // namespace 793defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com 80ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, MissingChannelTest) { 81297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 82856166594771c61973856f563e622ccb7dd48aa1Alex Deymo // By default, if no channel is set, we should track the stable-channel. 83297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("stable-channel", params_.target_channel()); 845a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov} 855a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov 86ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ForceVersionTest) { 87297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("ForcedVersion", "", false)); 88297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), params_.os_sp()); 89297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("ForcedVersion", params_.app_version()); 905a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov} 915a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov 92ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ForcedURLTest) { 93297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "http://forced.google.com", false)); 94297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("http://forced.google.com", params_.update_url()); 955a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov} 965a7f565a542196f24eb87ddac96508f8a84e3329Darin Petkov 97ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, MissingURLTest) { 98297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 99297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ(constants::kOmahaDefaultProductionURL, params_.update_url()); 1003f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes} 1013f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes 102297e583af1cec04f5f332b57b91f846921744c91Sen JiangTEST_F(OmahaRequestParamsTest, DeltaOKTest) { 103297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 104297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.delta_okay()); 10510d02dd60d4c4f41f7f4ed92322fa7b597760118Darin Petkov} 10610d02dd60d4c4f41f7f4ed92322fa7b597760118Darin Petkov 107297e583af1cec04f5f332b57b91f846921744c91Sen JiangTEST_F(OmahaRequestParamsTest, NoDeltasTest) { 1082b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe ASSERT_TRUE( 1092b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe WriteFileString(tempdir_.GetPath().Append(".nodelta").value(), "")); 110297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 111297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_FALSE(params_.delta_okay()); 112a3df55badfc7dc25792aba1ca6e7ade582b566a7Darin Petkov} 113a3df55badfc7dc25792aba1ca6e7ade582b566a7Darin Petkov 114ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelTest) { 11549d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov { 1165bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state_); 1172b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params.set_root(tempdir_.GetPath().value()); 118ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.Init("", "", false)); 119297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params.SetTargetChannel("canary-channel", false, nullptr)); 1208500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params.mutable_image_props_.is_powerwash_allowed); 12149d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov } 1222b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params_.set_root(tempdir_.GetPath().value()); 123297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 124297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("canary-channel", params_.target_channel()); 1258500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params_.mutable_image_props_.is_powerwash_allowed); 12649d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov} 12749d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov 128ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) { 12949d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov { 1305bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state_); 1312b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params.set_root(tempdir_.GetPath().value()); 132ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.Init("", "", false)); 133297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params.SetTargetChannel("canary-channel", true, nullptr)); 1348500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_TRUE(params.mutable_image_props_.is_powerwash_allowed); 13549d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov } 1362b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params_.set_root(tempdir_.GetPath().value()); 137297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 138297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("canary-channel", params_.target_channel()); 1398500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_TRUE(params_.mutable_image_props_.is_powerwash_allowed); 14049d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov} 14149d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov 142ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) { 14349d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov { 1445bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state_); 1452b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params.set_root(tempdir_.GetPath().value()); 146856166594771c61973856f563e622ccb7dd48aa1Alex Deymo SetLockDown(true); 147ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.Init("", "", false)); 1487f785f584d943308b06596f8d279e9c4b711adb6Sen Jiang params.image_props_.allow_arbitrary_channels = false; 149d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo string error_message; 150d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_FALSE( 151d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo params.SetTargetChannel("dogfood-channel", true, &error_message)); 152d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo // The error message should include a message about the valid channels. 153d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_NE(string::npos, error_message.find("stable-channel")); 1548500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params.mutable_image_props_.is_powerwash_allowed); 15549d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov } 1562b9d2417722cd4052b0e22494886f93c5b4ef042Hidehiko Abe params_.set_root(tempdir_.GetPath().value()); 157297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.Init("", "", false)); 158297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_EQ("stable-channel", params_.target_channel()); 1598500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params_.mutable_image_props_.is_powerwash_allowed); 16049d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov} 16149d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov 162ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, IsValidChannelTest) { 163ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params_.IsValidChannel("canary-channel")); 164ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params_.IsValidChannel("stable-channel")); 165ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params_.IsValidChannel("beta-channel")); 166ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params_.IsValidChannel("dev-channel")); 167ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params_.IsValidChannel("testimage-channel")); 168ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params_.IsValidChannel("dogfood-channel")); 169ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params_.IsValidChannel("some-channel")); 170ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params_.IsValidChannel("")); 1717f785f584d943308b06596f8d279e9c4b711adb6Sen Jiang params_.image_props_.allow_arbitrary_channels = true; 1727f785f584d943308b06596f8d279e9c4b711adb6Sen Jiang EXPECT_TRUE(params_.IsValidChannel("some-channel")); 173ce3f7cf69f3a03a5371beecae003651fa7f953a3Sen Jiang EXPECT_FALSE(params_.IsValidChannel("wrong-suffix")); 174ce3f7cf69f3a03a5371beecae003651fa7f953a3Sen Jiang EXPECT_FALSE(params_.IsValidChannel("")); 17549d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov} 17649d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov 177ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) { 178297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.set_target_channel("dev-channel"); 179ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("dev-channel", params_.target_channel()); 180ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 181297e583af1cec04f5f332b57b91f846921744c91Sen Jiang // When an invalid value is set, it should be ignored. 182d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_FALSE(params_.SetTargetChannel("invalid-channel", false, nullptr)); 183ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("dev-channel", params_.target_channel()); 184ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 185ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // When set to a valid value, it should take effect. 186d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr)); 187ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("beta-channel", params_.target_channel()); 188ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 189ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // When set to the same value, it should be idempotent. 190d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr)); 191ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("beta-channel", params_.target_channel()); 192ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 193ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // When set to a valid value while a change is already pending, it should 1941c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // succeed. 195d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_TRUE(params_.SetTargetChannel("stable-channel", true, nullptr)); 1961c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan EXPECT_EQ("stable-channel", params_.target_channel()); 1971c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan 198297e583af1cec04f5f332b57b91f846921744c91Sen Jiang // Set a different channel in mutable_image_props_. 199297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.set_target_channel("stable-channel"); 2001c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan 2011c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // When set to a valid value while a change is already pending, it should 2021c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // succeed. 2031c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan params_.Init("", "", false); 204d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr)); 2051c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // The target channel should reflect the change, but the download channel 2061c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // should continue to retain the old value ... 2071c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan EXPECT_EQ("beta-channel", params_.target_channel()); 2081c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan EXPECT_EQ("stable-channel", params_.download_channel()); 2091c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan 2101c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan // ... until we update the download channel explicitly. 2111c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan params_.UpdateDownloadChannel(); 2121c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan EXPECT_EQ("beta-channel", params_.download_channel()); 213ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("beta-channel", params_.target_channel()); 214ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 2157fbbe8a9e57ec52f7bc597d0cb607036300ac54cPatrick Dubroy 216ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ChannelIndexTest) { 217ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int canary = params_.GetChannelIndex("canary-channel"); 218ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int dev = params_.GetChannelIndex("dev-channel"); 219ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int beta = params_.GetChannelIndex("beta-channel"); 220ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int stable = params_.GetChannelIndex("stable-channel"); 221ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_LE(canary, dev); 222ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_LE(dev, beta); 223ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_LE(beta, stable); 224ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 225ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // testimage-channel or other names are not recognized, so index will be -1. 226ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int testimage = params_.GetChannelIndex("testimage-channel"); 227ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan int bogus = params_.GetChannelIndex("bogus-channel"); 228ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ(-1, testimage); 229ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ(-1, bogus); 230ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 2317fbbe8a9e57ec52f7bc597d0cb607036300ac54cPatrick Dubroy 232ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ToMoreStableChannelFlagTest) { 233297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.image_props_.current_channel = "canary-channel"; 234297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.download_channel_ = "stable-channel"; 2358500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_TRUE(params_.ToMoreStableChannel()); 236ce3f7cf69f3a03a5371beecae003651fa7f953a3Sen Jiang params_.image_props_.current_channel = "stable-channel"; 2378500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params_.ToMoreStableChannel()); 238ce3f7cf69f3a03a5371beecae003651fa7f953a3Sen Jiang params_.download_channel_ = "beta-channel"; 2398500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params_.ToMoreStableChannel()); 2408500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang} 2418500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang 2428500d3a0b3e3944d7390e0eff6e9d39f92261085Sen JiangTEST_F(OmahaRequestParamsTest, ShouldPowerwashTest) { 2438500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.mutable_image_props_.is_powerwash_allowed = false; 2448500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_FALSE(params_.ShouldPowerwash()); 2458500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.mutable_image_props_.is_powerwash_allowed = true; 2468500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.image_props_.allow_arbitrary_channels = true; 2478500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.image_props_.current_channel = "foo-channel"; 2488500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.download_channel_ = "bar-channel"; 2498500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_TRUE(params_.ShouldPowerwash()); 2508500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.image_props_.allow_arbitrary_channels = false; 2518500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.image_props_.current_channel = "canary-channel"; 2528500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang params_.download_channel_ = "stable-channel"; 2538500d3a0b3e3944d7390e0eff6e9d39f92261085Sen Jiang EXPECT_TRUE(params_.ShouldPowerwash()); 254db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan} 255db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan 256297e583af1cec04f5f332b57b91f846921744c91Sen JiangTEST_F(OmahaRequestParamsTest, CollectECFWVersionsTest) { 257297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.hwid_ = string("STUMPY ALEX 12345"); 258297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_FALSE(params_.CollectECFWVersions()); 259db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan 260297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.hwid_ = string("SNOW 12345"); 261297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.CollectECFWVersions()); 262db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan 263297e583af1cec04f5f332b57b91f846921744c91Sen Jiang params_.hwid_ = string("SAMS ALEX 12345"); 264297e583af1cec04f5f332b57b91f846921744c91Sen Jiang EXPECT_TRUE(params_.CollectECFWVersions()); 265c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa} 266c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa 2673defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com} // namespace chromeos_update_engine 268