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_);
50297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    params_.set_root(tempdir_.path().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) {
108297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  ASSERT_TRUE(WriteFileString(tempdir_.path().Append(".nodelta").value(), ""));
109297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.Init("", "", false));
110297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_FALSE(params_.delta_okay());
111a3df55badfc7dc25792aba1ca6e7ade582b566a7Darin Petkov}
112a3df55badfc7dc25792aba1ca6e7ade582b566a7Darin Petkov
113ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelTest) {
11449d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  {
1155bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold    OmahaRequestParams params(&fake_system_state_);
116297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    params.set_root(tempdir_.path().value());
117ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_TRUE(params.Init("", "", false));
118297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    EXPECT_TRUE(params.SetTargetChannel("canary-channel", false, nullptr));
119ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_FALSE(params.is_powerwash_allowed());
12049d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  }
121297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.set_root(tempdir_.path().value());
122297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.Init("", "", false));
123297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_EQ("canary-channel", params_.target_channel());
124297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_FALSE(params_.is_powerwash_allowed());
12549d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov}
12649d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov
127ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) {
12849d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  {
1295bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold    OmahaRequestParams params(&fake_system_state_);
130297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    params.set_root(tempdir_.path().value());
131ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_TRUE(params.Init("", "", false));
132297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    EXPECT_TRUE(params.SetTargetChannel("canary-channel", true, nullptr));
133ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_TRUE(params.is_powerwash_allowed());
13449d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  }
135297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.set_root(tempdir_.path().value());
136297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.Init("", "", false));
137297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_EQ("canary-channel", params_.target_channel());
138297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.is_powerwash_allowed());
13949d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov}
14049d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov
141ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) {
14249d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  {
1435bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold    OmahaRequestParams params(&fake_system_state_);
144297e583af1cec04f5f332b57b91f846921744c91Sen Jiang    params.set_root(tempdir_.path().value());
145856166594771c61973856f563e622ccb7dd48aa1Alex Deymo    SetLockDown(true);
146ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_TRUE(params.Init("", "", false));
147d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo    string error_message;
148d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo    EXPECT_FALSE(
149d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo        params.SetTargetChannel("dogfood-channel", true, &error_message));
150d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo    // The error message should include a message about the valid channels.
151d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo    EXPECT_NE(string::npos, error_message.find("stable-channel"));
152ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan    EXPECT_FALSE(params.is_powerwash_allowed());
15349d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov  }
154297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.set_root(tempdir_.path().value());
155297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.Init("", "", false));
156297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_EQ("stable-channel", params_.target_channel());
157297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_FALSE(params_.is_powerwash_allowed());
15849d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov}
15949d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov
160ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, IsValidChannelTest) {
161ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_TRUE(params_.IsValidChannel("canary-channel"));
162ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_TRUE(params_.IsValidChannel("stable-channel"));
163ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_TRUE(params_.IsValidChannel("beta-channel"));
164ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_TRUE(params_.IsValidChannel("dev-channel"));
165ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_FALSE(params_.IsValidChannel("testimage-channel"));
166ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_FALSE(params_.IsValidChannel("dogfood-channel"));
167ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_FALSE(params_.IsValidChannel("some-channel"));
168ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_FALSE(params_.IsValidChannel(""));
16949d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov}
17049d91329a3a84d7e2b35f6e1ffc8a9b4d478515bDarin Petkov
171ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) {
172297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.set_target_channel("dev-channel");
173ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ("dev-channel", params_.target_channel());
174ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan
175297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  // When an invalid value is set, it should be ignored.
176d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo  EXPECT_FALSE(params_.SetTargetChannel("invalid-channel", false, nullptr));
177ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ("dev-channel", params_.target_channel());
178ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan
179ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  // When set to a valid value, it should take effect.
180d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo  EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr));
181ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ("beta-channel", params_.target_channel());
182ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan
183ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  // When set to the same value, it should be idempotent.
184d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo  EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr));
185ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ("beta-channel", params_.target_channel());
186ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan
187ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  // When set to a valid value while a change is already pending, it should
1881c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // succeed.
189d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo  EXPECT_TRUE(params_.SetTargetChannel("stable-channel", true, nullptr));
1901c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  EXPECT_EQ("stable-channel", params_.target_channel());
1911c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
192297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  // Set a different channel in mutable_image_props_.
193297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.set_target_channel("stable-channel");
1941c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
1951c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // When set to a valid value while a change is already pending, it should
1961c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // succeed.
1971c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  params_.Init("", "", false);
198d942f9d3c8529f896329b19261df6eba044de1b2Alex Deymo  EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true, nullptr));
1991c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // The target channel should reflect the change, but the download channel
2001c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // should continue to retain the old value ...
2011c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  EXPECT_EQ("beta-channel", params_.target_channel());
2021c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  EXPECT_EQ("stable-channel", params_.download_channel());
2031c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan
2041c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  // ... until we update the download channel explicitly.
2051c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  params_.UpdateDownloadChannel();
2061c0fe79c7ef2b43946d756b54c8505d2bf48b93bJay Srinivasan  EXPECT_EQ("beta-channel", params_.download_channel());
207ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ("beta-channel", params_.target_channel());
208ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan}
2097fbbe8a9e57ec52f7bc597d0cb607036300ac54cPatrick Dubroy
210ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ChannelIndexTest) {
211ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int canary = params_.GetChannelIndex("canary-channel");
212ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int dev = params_.GetChannelIndex("dev-channel");
213ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int beta = params_.GetChannelIndex("beta-channel");
214ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int stable = params_.GetChannelIndex("stable-channel");
215ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_LE(canary, dev);
216ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_LE(dev, beta);
217ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_LE(beta, stable);
218ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan
219ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  // testimage-channel or other names are not recognized, so index will be -1.
220ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int testimage = params_.GetChannelIndex("testimage-channel");
221ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  int bogus = params_.GetChannelIndex("bogus-channel");
222ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ(-1, testimage);
223ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan  EXPECT_EQ(-1, bogus);
224ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan}
2257fbbe8a9e57ec52f7bc597d0cb607036300ac54cPatrick Dubroy
226ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST_F(OmahaRequestParamsTest, ToMoreStableChannelFlagTest) {
227297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.image_props_.current_channel = "canary-channel";
228297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.download_channel_ = "stable-channel";
229297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.to_more_stable_channel());
230db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan}
231db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan
232297e583af1cec04f5f332b57b91f846921744c91Sen JiangTEST_F(OmahaRequestParamsTest, CollectECFWVersionsTest) {
233297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.hwid_ = string("STUMPY ALEX 12345");
234297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_FALSE(params_.CollectECFWVersions());
235db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan
236297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.hwid_ = string("SNOW 12345");
237297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.CollectECFWVersions());
238db0acdfca1ea33987e8b29325f4594417d1fae57Jay Srinivasan
239297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  params_.hwid_ = string("SAMS ALEX 12345");
240297e583af1cec04f5f332b57b91f846921744c91Sen Jiang  EXPECT_TRUE(params_.CollectECFWVersions());
241c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa}
242c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa
2433defe6acb3609e70e851a6eff062577d25a2af9dadlr@google.com}  // namespace chromeos_update_engine
244