blob: c12abcbe7caa09069bd50d5b14b01223f0424ec2 [file] [log] [blame]
Darin Petkovf2065b42011-05-17 16:36:27 -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 <stdio.h>
Darin Petkovfbb40092010-07-29 17:05:50 -07006
adlr@google.com3defe6a2009-12-04 20:57:17 +00007#include <string>
Darin Petkovfbb40092010-07-29 17:05:50 -07008
9#include "base/file_util.h"
10#include "gtest/gtest.h"
Chris Sosabe45bef2013-04-09 18:25:12 -070011#include "update_engine/constants.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000012#include "update_engine/install_plan.h"
Jay Srinivasanae4697c2013-03-18 17:08:08 -070013#include "update_engine/mock_system_state.h"
Darin Petkova4a8a8c2010-07-15 22:21:12 -070014#include "update_engine/omaha_request_params.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000015#include "update_engine/test_utils.h"
16#include "update_engine/utils.h"
17
18using std::string;
19
20namespace chromeos_update_engine {
21
Jay Srinivasanae4697c2013-03-18 17:08:08 -070022class OmahaRequestParamsTest : public ::testing::Test {
23 public:
24 OmahaRequestParamsTest() : params_(NULL) {}
25
Darin Petkov5a7f5652010-07-22 21:40:09 -070026 protected:
Jay Srinivasanae4697c2013-03-18 17:08:08 -070027 // Return true iff the OmahaRequestParams::Init succeeded. If
Darin Petkova4a8a8c2010-07-15 22:21:12 -070028 // out is non-NULL, it's set w/ the generated data.
Darin Petkov5a7f5652010-07-22 21:40:09 -070029 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 +
Chris Sosabe45bef2013-04-09 18:25:12 -070035 kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070036 // 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;
Darin Petkov49d91322010-10-25 16:34:58 -070041 params_.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -080042 params_.SetLockDown(false);
Darin Petkov5a7f5652010-07-22 21:40:09 -070043 }
44
45 virtual void TearDown() {
46 EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
47 }
48
Jay Srinivasanae4697c2013-03-18 17:08:08 -070049 OmahaRequestParams params_;
Darin Petkov49d91322010-10-25 16:34:58 -070050
adlr@google.com3defe6a2009-12-04 20:57:17 +000051 static const string kTestDir;
52};
53
Jay Srinivasanae4697c2013-03-18 17:08:08 -070054const string OmahaRequestParamsTest::kTestDir =
55 "omaha_request_params-test";
adlr@google.com3defe6a2009-12-04 20:57:17 +000056
Jay Srinivasanae4697c2013-03-18 17:08:08 -070057bool OmahaRequestParamsTest::DoTest(OmahaRequestParams* out,
58 const string& app_version,
59 const string& omaha_url) {
60 bool success = params_.Init(app_version, omaha_url, false);
adlr@google.com3defe6a2009-12-04 20:57:17 +000061 if (out)
Darin Petkov49d91322010-10-25 16:34:58 -070062 *out = params_;
Darin Petkova4a8a8c2010-07-15 22:21:12 -070063 return success;
adlr@google.com3defe6a2009-12-04 20:57:17 +000064}
65
66namespace {
adlr@google.com3defe6a2009-12-04 20:57:17 +000067string GetMachineType() {
Gilad Arnold19a45f02012-07-19 12:36:10 -070068 string machine_type;
69 if (!utils::ReadPipe("uname -m", &machine_type))
adlr@google.com3defe6a2009-12-04 20:57:17 +000070 return "";
Gilad Arnold19a45f02012-07-19 12:36:10 -070071 // 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;
adlr@google.com3defe6a2009-12-04 20:57:17 +000076}
77} // namespace {}
78
Jay Srinivasanae4697c2013-03-18 17:08:08 -070079TEST_F(OmahaRequestParamsTest, SimpleTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070080 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -070085 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov5a7f5652010-07-22 21:40:09 -070086 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070087 MockSystemState mock_system_state;
88 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -070089 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070090 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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -070093 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -070094 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());
adlr@google.com3defe6a2009-12-04 20:57:17 +0000100}
101
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700102TEST_F(OmahaRequestParamsTest, AppIDTest) {
Darin Petkovd315dc72010-11-15 09:52:24 -0800103 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700108 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkovd315dc72010-11-15 09:52:24 -0800109 "CHROMEOS_RELEASE_APPID={58c35cef-9d30-476e-9098-ce20377d535d}\n"
110 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700111 MockSystemState mock_system_state;
112 OmahaRequestParams out(&mock_system_state);
Darin Petkovd315dc72010-11-15 09:52:24 -0800113 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700114 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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700117 EXPECT_EQ("{58c35cef-9d30-476e-9098-ce20377d535d}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700118 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());
Darin Petkovd315dc72010-11-15 09:52:24 -0800124}
125
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700126TEST_F(OmahaRequestParamsTest, MissingChannelTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700127 ASSERT_TRUE(WriteFileString(
128 kTestDir + "/etc/lsb-release",
129 "CHROMEOS_RELEASE_FOO=bar\n"
130 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700131 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
132 MockSystemState mock_system_state;
133 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700134 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700135 EXPECT_EQ("Chrome OS", out.os_platform());
136 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700137 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700138 EXPECT_EQ("0.2.2.3", out.app_version());
139 EXPECT_EQ("en-US", out.app_lang());
140 EXPECT_EQ("", out.target_channel());
adlr@google.com3defe6a2009-12-04 20:57:17 +0000141}
142
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700143TEST_F(OmahaRequestParamsTest, ConfusingReleaseTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700144 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700148 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
149 MockSystemState mock_system_state;
150 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700151 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700152 EXPECT_EQ("Chrome OS", out.os_platform());
153 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700154 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700155 EXPECT_EQ("0.2.2.3", out.app_version());
156 EXPECT_EQ("en-US", out.app_lang());
157 EXPECT_EQ("", out.target_channel());
adlr@google.com3defe6a2009-12-04 20:57:17 +0000158}
159
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700160TEST_F(OmahaRequestParamsTest, MissingVersionTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700161 ASSERT_TRUE(WriteFileString(
162 kTestDir + "/etc/lsb-release",
163 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
164 "CHROMEOS_RELEASE_FOO=bar\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700165 "CHROMEOS_RELEASE_TRACK=dev-channel"));
166 MockSystemState mock_system_state;
167 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700168 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700169 EXPECT_EQ("Chrome OS", out.os_platform());
170 EXPECT_EQ(string("_") + GetMachineType(), out.os_sp());
171 EXPECT_EQ("arm-generic", out.os_board());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700172 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700173 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());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700177}
178
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700179TEST_F(OmahaRequestParamsTest, ForceVersionTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700180 ASSERT_TRUE(WriteFileString(
181 kTestDir + "/etc/lsb-release",
182 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
183 "CHROMEOS_RELEASE_FOO=bar\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700184 "CHROMEOS_RELEASE_TRACK=dev-channel"));
185 MockSystemState mock_system_state;
186 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700187 EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700188 EXPECT_EQ("Chrome OS", out.os_platform());
189 EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp());
190 EXPECT_EQ("arm-generic", out.os_board());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700191 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700192 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());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700196}
197
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700198TEST_F(OmahaRequestParamsTest, ForcedURLTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700199 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700204 "CHROMEOS_RELEASE_TRACK=dev-channel"));
205 MockSystemState mock_system_state;
206 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700207 EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700208 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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700211 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700212 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());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700217}
218
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700219TEST_F(OmahaRequestParamsTest, MissingURLTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700220 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700225 "CHROMEOS_RELEASE_TRACK=dev-channel"));
226 MockSystemState mock_system_state;
227 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700228 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700229 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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700232 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700233 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());
Andrew de los Reyes970bb282009-12-09 16:34:04 -0800238}
239
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700240TEST_F(OmahaRequestParamsTest, NoDeltasTest) {
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700241 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700245 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700246 ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700247 MockSystemState mock_system_state;
248 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700249 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700250 EXPECT_FALSE(out.delta_okay());
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700251}
252
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700253TEST_F(OmahaRequestParamsTest, OverrideTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700254 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"
Darin Petkov10d02dd2011-01-10 14:57:39 -0800259 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
260 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700261 ASSERT_TRUE(WriteFileString(
Chris Sosabe45bef2013-04-09 18:25:12 -0700262 kTestDir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700263 "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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700272 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700273 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(
Chris Sosabe45bef2013-04-09 18:25:12 -0700290 kTestDir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700291 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
292 "CHROMEOS_RELEASE_TRACK=stable-channel\n"
293 "CHROMEOS_AUSERVER=http://www.google.com"));
Darin Petkov10d02dd2011-01-10 14:57:39 -0800294 params_.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700295 MockSystemState mock_system_state;
296 OmahaRequestParams out(&mock_system_state);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800297 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700298 EXPECT_EQ("arm-generic", out.os_board());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700299 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700300 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());
Darin Petkov49d91322010-10-25 16:34:58 -0700305}
306
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700307TEST_F(OmahaRequestParamsTest, OverrideSameChannelTest) {
Darin Petkova3df55b2010-11-15 13:33:55 -0800308 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700313 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkova3df55b2010-11-15 13:33:55 -0800314 "CHROMEOS_AUSERVER=http://www.google.com"));
315 ASSERT_TRUE(WriteFileString(
Chris Sosabe45bef2013-04-09 18:25:12 -0700316 kTestDir + kStatefulPartition + "/etc/lsb-release",
Darin Petkova3df55b2010-11-15 13:33:55 -0800317 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700318 "CHROMEOS_RELEASE_TRACK=dev-channel"));
319 MockSystemState mock_system_state;
320 OmahaRequestParams out(&mock_system_state);
Darin Petkova3df55b2010-11-15 13:33:55 -0800321 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700322 EXPECT_EQ("x86-generic", out.os_board());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700323 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700324 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());
Darin Petkova3df55b2010-11-15 13:33:55 -0800329}
330
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700331TEST_F(OmahaRequestParamsTest, SetTargetChannelTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700332 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700337 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700338 "CHROMEOS_AUSERVER=http://www.google.com"));
339 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700340 MockSystemState mock_system_state;
341 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700342 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800343 params.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700344 EXPECT_TRUE(params.Init("", "", false));
345 params.SetTargetChannel("canary-channel", false);
346 EXPECT_FALSE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700347 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700348 MockSystemState mock_system_state;
349 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700350 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700351 EXPECT_EQ("canary-channel", out.target_channel());
352 EXPECT_FALSE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700353}
354
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700355TEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700356 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700361 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700362 "CHROMEOS_AUSERVER=http://www.google.com"));
Darin Petkov49d91322010-10-25 16:34:58 -0700363 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700364 MockSystemState mock_system_state;
365 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700366 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800367 params.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700368 EXPECT_TRUE(params.Init("", "", false));
369 params.SetTargetChannel("canary-channel", true);
370 EXPECT_TRUE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700371 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700372 MockSystemState mock_system_state;
373 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700374 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700375 EXPECT_EQ("canary-channel", out.target_channel());
376 EXPECT_TRUE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700377}
378
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700379TEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700380 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"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700385 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700386 "CHROMEOS_AUSERVER=http://www.google.com"));
387 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700388 MockSystemState mock_system_state;
389 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700390 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800391 params.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700392 EXPECT_TRUE(params.Init("", "", false));
393 params.SetTargetChannel("dogfood-channel", true);
394 EXPECT_FALSE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700395 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700396 MockSystemState mock_system_state;
397 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700398 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700399 EXPECT_EQ("arm-generic", out.os_board());
400 EXPECT_EQ("dev-channel", out.target_channel());
401 EXPECT_FALSE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700402}
403
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700404TEST_F(OmahaRequestParamsTest, IsValidChannelTest) {
Darin Petkov10d02dd2011-01-10 14:57:39 -0800405 params_.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700406 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(""));
Darin Petkov49d91322010-10-25 16:34:58 -0700414}
415
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700416TEST_F(OmahaRequestParamsTest, ValidChannelTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700417 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"));
Darin Petkov10d02dd2011-01-10 14:57:39 -0800424 params_.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700425 MockSystemState mock_system_state;
426 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700427 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700428 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());
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700431 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.GetAppId());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700432 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());
Darin Petkov49d91322010-10-25 16:34:58 -0700438}
439
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700440TEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) {
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200441 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"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700448 params_.SetLockDown(false);
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200449
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700450 // Check LSB value is used by default when SetTargetChannel is not called.
451 params_.Init("", "", false);
452 EXPECT_EQ("dev-channel", params_.target_channel());
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200453
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700454 // 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
Jay Srinivasan1c0fe792013-03-28 16:45:25 -0700471 // succeed.
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700472 params_.Init("", "", false);
Jay Srinivasan1c0fe792013-03-28 16:45:25 -0700473 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(
Chris Sosabe45bef2013-04-09 18:25:12 -0700478 kTestDir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasan1c0fe792013-03-28 16:45:25 -0700479 "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());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700494 EXPECT_EQ("beta-channel", params_.target_channel());
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200495}
496
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700497TEST_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(
Chris Sosabe45bef2013-04-09 18:25:12 -0700522 kTestDir + kStatefulPartition + "/etc/lsb-release",
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700523 "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) {
Darin Petkov10d02dd2011-01-10 14:57:39 -0800536 EXPECT_FALSE(params_.ShouldLockDown());
537}
538
Jay Srinivasandb0acdf2013-04-02 14:47:45 -0700539TEST_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
adlr@google.com3defe6a2009-12-04 20:57:17 +0000580} // namespace chromeos_update_engine