blob: 7d81ba787cb524f0624b1428d35abbe89a800898 [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"
adlr@google.com3defe6a2009-12-04 20:57:17 +000011#include "update_engine/install_plan.h"
Jay Srinivasanae4697c2013-03-18 17:08:08 -070012#include "update_engine/mock_system_state.h"
Darin Petkova4a8a8c2010-07-15 22:21:12 -070013#include "update_engine/omaha_request_params.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000014#include "update_engine/test_utils.h"
15#include "update_engine/utils.h"
16
17using std::string;
18
19namespace chromeos_update_engine {
20
Jay Srinivasanae4697c2013-03-18 17:08:08 -070021class OmahaRequestParamsTest : public ::testing::Test {
22 public:
23 OmahaRequestParamsTest() : params_(NULL) {}
24
Darin Petkov5a7f5652010-07-22 21:40:09 -070025 protected:
Jay Srinivasanae4697c2013-03-18 17:08:08 -070026 // Return true iff the OmahaRequestParams::Init succeeded. If
Darin Petkova4a8a8c2010-07-15 22:21:12 -070027 // out is non-NULL, it's set w/ the generated data.
Darin Petkov5a7f5652010-07-22 21:40:09 -070028 bool DoTest(OmahaRequestParams* out, const string& app_version,
29 const string& omaha_url);
30
31 virtual void SetUp() {
32 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc"));
33 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir +
34 utils::kStatefulPartition + "/etc"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070035 // Create a fresh copy of the params for each test, so there's no
36 // unintended reuse of state across tests.
37 MockSystemState mock_system_state;
38 OmahaRequestParams new_params(&mock_system_state);
39 params_ = new_params;
Darin Petkov49d91322010-10-25 16:34:58 -070040 params_.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -080041 params_.SetLockDown(false);
Darin Petkov5a7f5652010-07-22 21:40:09 -070042 }
43
44 virtual void TearDown() {
45 EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
46 }
47
Jay Srinivasanae4697c2013-03-18 17:08:08 -070048 OmahaRequestParams params_;
Darin Petkov49d91322010-10-25 16:34:58 -070049
adlr@google.com3defe6a2009-12-04 20:57:17 +000050 static const string kTestDir;
51};
52
Jay Srinivasanae4697c2013-03-18 17:08:08 -070053const string OmahaRequestParamsTest::kTestDir =
54 "omaha_request_params-test";
adlr@google.com3defe6a2009-12-04 20:57:17 +000055
Jay Srinivasanae4697c2013-03-18 17:08:08 -070056bool OmahaRequestParamsTest::DoTest(OmahaRequestParams* out,
57 const string& app_version,
58 const string& omaha_url) {
59 bool success = params_.Init(app_version, omaha_url, false);
adlr@google.com3defe6a2009-12-04 20:57:17 +000060 if (out)
Darin Petkov49d91322010-10-25 16:34:58 -070061 *out = params_;
Darin Petkova4a8a8c2010-07-15 22:21:12 -070062 return success;
adlr@google.com3defe6a2009-12-04 20:57:17 +000063}
64
65namespace {
adlr@google.com3defe6a2009-12-04 20:57:17 +000066string GetMachineType() {
Gilad Arnold19a45f02012-07-19 12:36:10 -070067 string machine_type;
68 if (!utils::ReadPipe("uname -m", &machine_type))
adlr@google.com3defe6a2009-12-04 20:57:17 +000069 return "";
Gilad Arnold19a45f02012-07-19 12:36:10 -070070 // Strip anything from the first newline char.
71 size_t newline_pos = machine_type.find('\n');
72 if (newline_pos != string::npos)
73 machine_type.erase(newline_pos);
74 return machine_type;
adlr@google.com3defe6a2009-12-04 20:57:17 +000075}
76} // namespace {}
77
Jay Srinivasanae4697c2013-03-18 17:08:08 -070078TEST_F(OmahaRequestParamsTest, SimpleTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070079 ASSERT_TRUE(WriteFileString(
80 kTestDir + "/etc/lsb-release",
81 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
82 "CHROMEOS_RELEASE_FOO=bar\n"
83 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -070084 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov5a7f5652010-07-22 21:40:09 -070085 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070086 MockSystemState mock_system_state;
87 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -070088 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -070089 EXPECT_EQ("Chrome OS", out.os_platform());
90 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
91 EXPECT_EQ("arm-generic", out.os_board());
92 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
93 EXPECT_EQ("0.2.2.3", out.app_version());
94 EXPECT_EQ("en-US", out.app_lang());
95 EXPECT_EQ("", out.hwid());
96 EXPECT_TRUE(out.delta_okay());
97 EXPECT_EQ("dev-channel", out.target_channel());
98 EXPECT_EQ("http://www.google.com", out.update_url());
adlr@google.com3defe6a2009-12-04 20:57:17 +000099}
100
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700101TEST_F(OmahaRequestParamsTest, AppIDTest) {
Darin Petkovd315dc72010-11-15 09:52:24 -0800102 ASSERT_TRUE(WriteFileString(
103 kTestDir + "/etc/lsb-release",
104 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
105 "CHROMEOS_RELEASE_FOO=bar\n"
106 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700107 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkovd315dc72010-11-15 09:52:24 -0800108 "CHROMEOS_RELEASE_APPID={58c35cef-9d30-476e-9098-ce20377d535d}\n"
109 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700110 MockSystemState mock_system_state;
111 OmahaRequestParams out(&mock_system_state);
Darin Petkovd315dc72010-11-15 09:52:24 -0800112 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700113 EXPECT_EQ("Chrome OS", out.os_platform());
114 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
115 EXPECT_EQ("arm-generic", out.os_board());
116 EXPECT_EQ("{58c35cef-9d30-476e-9098-ce20377d535d}", out.app_id());
117 EXPECT_EQ("0.2.2.3", out.app_version());
118 EXPECT_EQ("en-US", out.app_lang());
119 EXPECT_EQ("", out.hwid());
120 EXPECT_TRUE(out.delta_okay());
121 EXPECT_EQ("dev-channel", out.target_channel());
122 EXPECT_EQ("http://www.google.com", out.update_url());
Darin Petkovd315dc72010-11-15 09:52:24 -0800123}
124
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700125TEST_F(OmahaRequestParamsTest, MissingChannelTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700126 ASSERT_TRUE(WriteFileString(
127 kTestDir + "/etc/lsb-release",
128 "CHROMEOS_RELEASE_FOO=bar\n"
129 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700130 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
131 MockSystemState mock_system_state;
132 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700133 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700134 EXPECT_EQ("Chrome OS", out.os_platform());
135 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
136 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
137 EXPECT_EQ("0.2.2.3", out.app_version());
138 EXPECT_EQ("en-US", out.app_lang());
139 EXPECT_EQ("", out.target_channel());
adlr@google.com3defe6a2009-12-04 20:57:17 +0000140}
141
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700142TEST_F(OmahaRequestParamsTest, ConfusingReleaseTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700143 ASSERT_TRUE(WriteFileString(
144 kTestDir + "/etc/lsb-release",
145 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
146 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700147 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
148 MockSystemState mock_system_state;
149 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700150 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700151 EXPECT_EQ("Chrome OS", out.os_platform());
152 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
153 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
154 EXPECT_EQ("0.2.2.3", out.app_version());
155 EXPECT_EQ("en-US", out.app_lang());
156 EXPECT_EQ("", out.target_channel());
adlr@google.com3defe6a2009-12-04 20:57:17 +0000157}
158
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700159TEST_F(OmahaRequestParamsTest, MissingVersionTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700160 ASSERT_TRUE(WriteFileString(
161 kTestDir + "/etc/lsb-release",
162 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
163 "CHROMEOS_RELEASE_FOO=bar\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700164 "CHROMEOS_RELEASE_TRACK=dev-channel"));
165 MockSystemState mock_system_state;
166 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700167 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700168 EXPECT_EQ("Chrome OS", out.os_platform());
169 EXPECT_EQ(string("_") + GetMachineType(), out.os_sp());
170 EXPECT_EQ("arm-generic", out.os_board());
171 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
172 EXPECT_EQ("", out.app_version());
173 EXPECT_EQ("en-US", out.app_lang());
174 EXPECT_TRUE(out.delta_okay());
175 EXPECT_EQ("dev-channel", out.target_channel());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700176}
177
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700178TEST_F(OmahaRequestParamsTest, ForceVersionTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700179 ASSERT_TRUE(WriteFileString(
180 kTestDir + "/etc/lsb-release",
181 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
182 "CHROMEOS_RELEASE_FOO=bar\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700183 "CHROMEOS_RELEASE_TRACK=dev-channel"));
184 MockSystemState mock_system_state;
185 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700186 EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700187 EXPECT_EQ("Chrome OS", out.os_platform());
188 EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp());
189 EXPECT_EQ("arm-generic", out.os_board());
190 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
191 EXPECT_EQ("ForcedVersion", out.app_version());
192 EXPECT_EQ("en-US", out.app_lang());
193 EXPECT_TRUE(out.delta_okay());
194 EXPECT_EQ("dev-channel", out.target_channel());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700195}
196
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700197TEST_F(OmahaRequestParamsTest, ForcedURLTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700198 ASSERT_TRUE(WriteFileString(
199 kTestDir + "/etc/lsb-release",
200 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
201 "CHROMEOS_RELEASE_FOO=bar\n"
202 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700203 "CHROMEOS_RELEASE_TRACK=dev-channel"));
204 MockSystemState mock_system_state;
205 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700206 EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700207 EXPECT_EQ("Chrome OS", out.os_platform());
208 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
209 EXPECT_EQ("arm-generic", out.os_board());
210 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
211 EXPECT_EQ("0.2.2.3", out.app_version());
212 EXPECT_EQ("en-US", out.app_lang());
213 EXPECT_TRUE(out.delta_okay());
214 EXPECT_EQ("dev-channel", out.target_channel());
215 EXPECT_EQ("http://forced.google.com", out.update_url());
Darin Petkov5a7f5652010-07-22 21:40:09 -0700216}
217
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700218TEST_F(OmahaRequestParamsTest, MissingURLTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700219 ASSERT_TRUE(WriteFileString(
220 kTestDir + "/etc/lsb-release",
221 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
222 "CHROMEOS_RELEASE_FOO=bar\n"
223 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700224 "CHROMEOS_RELEASE_TRACK=dev-channel"));
225 MockSystemState mock_system_state;
226 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700227 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700228 EXPECT_EQ("Chrome OS", out.os_platform());
229 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
230 EXPECT_EQ("arm-generic", out.os_board());
231 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
232 EXPECT_EQ("0.2.2.3", out.app_version());
233 EXPECT_EQ("en-US", out.app_lang());
234 EXPECT_TRUE(out.delta_okay());
235 EXPECT_EQ("dev-channel", out.target_channel());
236 EXPECT_EQ(kProductionOmahaUrl, out.update_url());
Andrew de los Reyes970bb282009-12-09 16:34:04 -0800237}
238
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700239TEST_F(OmahaRequestParamsTest, NoDeltasTest) {
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700240 ASSERT_TRUE(WriteFileString(
241 kTestDir + "/etc/lsb-release",
242 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
243 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700244 "CHROMEOS_RELEASE_TRXCK=dev-channel"));
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700245 ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700246 MockSystemState mock_system_state;
247 OmahaRequestParams out(&mock_system_state);
Darin Petkov5a7f5652010-07-22 21:40:09 -0700248 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700249 EXPECT_FALSE(out.delta_okay());
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700250}
251
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700252TEST_F(OmahaRequestParamsTest, OverrideTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700253 ASSERT_TRUE(WriteFileString(
254 kTestDir + "/etc/lsb-release",
255 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
256 "CHROMEOS_RELEASE_FOO=bar\n"
257 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Darin Petkov10d02dd2011-01-10 14:57:39 -0800258 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
259 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700260 ASSERT_TRUE(WriteFileString(
261 kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
262 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
263 "CHROMEOS_RELEASE_TRACK=beta-channel\n"
264 "CHROMEOS_AUSERVER=https://www.google.com"));
265 MockSystemState mock_system_state;
266 OmahaRequestParams out(&mock_system_state);
267 EXPECT_TRUE(DoTest(&out, "", ""));
268 EXPECT_EQ("Chrome OS", out.os_platform());
269 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
270 EXPECT_EQ("x86-generic", out.os_board());
271 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
272 EXPECT_EQ("0.2.2.3", out.app_version());
273 EXPECT_EQ("en-US", out.app_lang());
274 EXPECT_EQ("", out.hwid());
275 EXPECT_FALSE(out.delta_okay());
276 EXPECT_EQ("beta-channel", out.target_channel());
277 EXPECT_EQ("https://www.google.com", out.update_url());
278}
279
280TEST_F(OmahaRequestParamsTest, OverrideLockDownTest) {
281 ASSERT_TRUE(WriteFileString(
282 kTestDir + "/etc/lsb-release",
283 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
284 "CHROMEOS_RELEASE_FOO=bar\n"
285 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
286 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
287 "CHROMEOS_AUSERVER=https://www.google.com"));
288 ASSERT_TRUE(WriteFileString(
289 kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
290 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
291 "CHROMEOS_RELEASE_TRACK=stable-channel\n"
292 "CHROMEOS_AUSERVER=http://www.google.com"));
Darin Petkov10d02dd2011-01-10 14:57:39 -0800293 params_.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700294 MockSystemState mock_system_state;
295 OmahaRequestParams out(&mock_system_state);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800296 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700297 EXPECT_EQ("arm-generic", out.os_board());
298 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
299 EXPECT_EQ("0.2.2.3", out.app_version());
300 EXPECT_EQ("", out.hwid());
301 EXPECT_FALSE(out.delta_okay());
302 EXPECT_EQ("stable-channel", out.target_channel());
303 EXPECT_EQ("https://www.google.com", out.update_url());
Darin Petkov49d91322010-10-25 16:34:58 -0700304}
305
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700306TEST_F(OmahaRequestParamsTest, OverrideSameChannelTest) {
Darin Petkova3df55b2010-11-15 13:33:55 -0800307 ASSERT_TRUE(WriteFileString(
308 kTestDir + "/etc/lsb-release",
309 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
310 "CHROMEOS_RELEASE_FOO=bar\n"
311 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700312 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkova3df55b2010-11-15 13:33:55 -0800313 "CHROMEOS_AUSERVER=http://www.google.com"));
314 ASSERT_TRUE(WriteFileString(
315 kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
316 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700317 "CHROMEOS_RELEASE_TRACK=dev-channel"));
318 MockSystemState mock_system_state;
319 OmahaRequestParams out(&mock_system_state);
Darin Petkova3df55b2010-11-15 13:33:55 -0800320 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700321 EXPECT_EQ("x86-generic", out.os_board());
322 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
323 EXPECT_EQ("0.2.2.3", out.app_version());
324 EXPECT_EQ("", out.hwid());
325 EXPECT_TRUE(out.delta_okay());
326 EXPECT_EQ("dev-channel", out.target_channel());
327 EXPECT_EQ("http://www.google.com", out.update_url());
Darin Petkova3df55b2010-11-15 13:33:55 -0800328}
329
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700330TEST_F(OmahaRequestParamsTest, SetTargetChannelTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700331 ASSERT_TRUE(WriteFileString(
332 kTestDir + "/etc/lsb-release",
333 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
334 "CHROMEOS_RELEASE_FOO=bar\n"
335 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700336 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700337 "CHROMEOS_AUSERVER=http://www.google.com"));
338 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700339 MockSystemState mock_system_state;
340 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700341 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800342 params.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700343 EXPECT_TRUE(params.Init("", "", false));
344 params.SetTargetChannel("canary-channel", false);
345 EXPECT_FALSE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700346 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700347 MockSystemState mock_system_state;
348 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700349 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700350 EXPECT_EQ("canary-channel", out.target_channel());
351 EXPECT_FALSE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700352}
353
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700354TEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700355 ASSERT_TRUE(WriteFileString(
356 kTestDir + "/etc/lsb-release",
357 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
358 "CHROMEOS_RELEASE_FOO=bar\n"
359 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700360 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700361 "CHROMEOS_AUSERVER=http://www.google.com"));
Darin Petkov49d91322010-10-25 16:34:58 -0700362 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700363 MockSystemState mock_system_state;
364 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700365 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800366 params.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700367 EXPECT_TRUE(params.Init("", "", false));
368 params.SetTargetChannel("canary-channel", true);
369 EXPECT_TRUE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700370 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700371 MockSystemState mock_system_state;
372 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700373 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700374 EXPECT_EQ("canary-channel", out.target_channel());
375 EXPECT_TRUE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700376}
377
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700378TEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700379 ASSERT_TRUE(WriteFileString(
380 kTestDir + "/etc/lsb-release",
381 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
382 "CHROMEOS_RELEASE_FOO=bar\n"
383 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700384 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
Darin Petkov49d91322010-10-25 16:34:58 -0700385 "CHROMEOS_AUSERVER=http://www.google.com"));
386 {
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700387 MockSystemState mock_system_state;
388 OmahaRequestParams params(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700389 params.set_root(string("./") + kTestDir);
Darin Petkov10d02dd2011-01-10 14:57:39 -0800390 params.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700391 EXPECT_TRUE(params.Init("", "", false));
392 params.SetTargetChannel("dogfood-channel", true);
393 EXPECT_FALSE(params.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700394 }
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700395 MockSystemState mock_system_state;
396 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700397 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700398 EXPECT_EQ("arm-generic", out.os_board());
399 EXPECT_EQ("dev-channel", out.target_channel());
400 EXPECT_FALSE(out.is_powerwash_allowed());
Darin Petkov49d91322010-10-25 16:34:58 -0700401}
402
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700403TEST_F(OmahaRequestParamsTest, IsValidChannelTest) {
Darin Petkov10d02dd2011-01-10 14:57:39 -0800404 params_.SetLockDown(false);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700405 EXPECT_TRUE(params_.IsValidChannel("canary-channel"));
406 EXPECT_TRUE(params_.IsValidChannel("stable-channel"));
407 EXPECT_TRUE(params_.IsValidChannel("beta-channel"));
408 EXPECT_TRUE(params_.IsValidChannel("dev-channel"));
409 EXPECT_FALSE(params_.IsValidChannel("testimage-channel"));
410 EXPECT_FALSE(params_.IsValidChannel("dogfood-channel"));
411 EXPECT_FALSE(params_.IsValidChannel("some-channel"));
412 EXPECT_FALSE(params_.IsValidChannel(""));
Darin Petkov49d91322010-10-25 16:34:58 -0700413}
414
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700415TEST_F(OmahaRequestParamsTest, ValidChannelTest) {
Darin Petkov49d91322010-10-25 16:34:58 -0700416 ASSERT_TRUE(WriteFileString(
417 kTestDir + "/etc/lsb-release",
418 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
419 "CHROMEOS_RELEASE_FOO=bar\n"
420 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
421 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
422 "CHROMEOS_AUSERVER=http://www.google.com"));
Darin Petkov10d02dd2011-01-10 14:57:39 -0800423 params_.SetLockDown(true);
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700424 MockSystemState mock_system_state;
425 OmahaRequestParams out(&mock_system_state);
Darin Petkov49d91322010-10-25 16:34:58 -0700426 EXPECT_TRUE(DoTest(&out, "", ""));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700427 EXPECT_EQ("Chrome OS", out.os_platform());
428 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp());
429 EXPECT_EQ("arm-generic", out.os_board());
430 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id());
431 EXPECT_EQ("0.2.2.3", out.app_version());
432 EXPECT_EQ("en-US", out.app_lang());
433 EXPECT_EQ("", out.hwid());
434 EXPECT_TRUE(out.delta_okay());
435 EXPECT_EQ("dev-channel", out.target_channel());
436 EXPECT_EQ("http://www.google.com", out.update_url());
Darin Petkov49d91322010-10-25 16:34:58 -0700437}
438
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700439TEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) {
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200440 ASSERT_TRUE(WriteFileString(
441 kTestDir + "/etc/lsb-release",
442 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
443 "CHROMEOS_RELEASE_FOO=bar\n"
444 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
445 "CHROMEOS_RELEASE_TRACK=dev-channel\n"
446 "CHROMEOS_AUSERVER=http://www.google.com"));
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700447 params_.SetLockDown(false);
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200448
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700449 // Check LSB value is used by default when SetTargetChannel is not called.
450 params_.Init("", "", false);
451 EXPECT_EQ("dev-channel", params_.target_channel());
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200452
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700453 // When an invalid value is set, it should be ignored and the
454 // value from lsb-release should be used instead.
455 params_.Init("", "", false);
456 EXPECT_FALSE(params_.SetTargetChannel("invalid-channel", false));
457 EXPECT_EQ("dev-channel", params_.target_channel());
458
459 // When set to a valid value, it should take effect.
460 params_.Init("", "", false);
461 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true));
462 EXPECT_EQ("beta-channel", params_.target_channel());
463
464 // When set to the same value, it should be idempotent.
465 params_.Init("", "", false);
466 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true));
467 EXPECT_EQ("beta-channel", params_.target_channel());
468
469 // When set to a valid value while a change is already pending, it should
Jay Srinivasan1c0fe792013-03-28 16:45:25 -0700470 // succeed.
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700471 params_.Init("", "", false);
Jay Srinivasan1c0fe792013-03-28 16:45:25 -0700472 EXPECT_TRUE(params_.SetTargetChannel("stable-channel", true));
473 EXPECT_EQ("stable-channel", params_.target_channel());
474
475 // Set a different channel in stateful LSB release.
476 ASSERT_TRUE(WriteFileString(
477 kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
478 "CHROMEOS_RELEASE_TRACK=stable-channel\n"
479 "CHROMEOS_IS_POWERWASH_ALLOWED=true\n"));
480
481 // When set to a valid value while a change is already pending, it should
482 // succeed.
483 params_.Init("", "", false);
484 EXPECT_TRUE(params_.SetTargetChannel("beta-channel", true));
485 // The target channel should reflect the change, but the download channel
486 // should continue to retain the old value ...
487 EXPECT_EQ("beta-channel", params_.target_channel());
488 EXPECT_EQ("stable-channel", params_.download_channel());
489
490 // ... until we update the download channel explicitly.
491 params_.UpdateDownloadChannel();
492 EXPECT_EQ("beta-channel", params_.download_channel());
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700493 EXPECT_EQ("beta-channel", params_.target_channel());
Patrick Dubroy7fbbe8a2011-08-01 17:28:22 +0200494}
495
Jay Srinivasanae4697c2013-03-18 17:08:08 -0700496TEST_F(OmahaRequestParamsTest, ChannelIndexTest) {
497 int canary = params_.GetChannelIndex("canary-channel");
498 int dev = params_.GetChannelIndex("dev-channel");
499 int beta = params_.GetChannelIndex("beta-channel");
500 int stable = params_.GetChannelIndex("stable-channel");
501 EXPECT_LE(canary, dev);
502 EXPECT_LE(dev, beta);
503 EXPECT_LE(beta, stable);
504
505 // testimage-channel or other names are not recognized, so index will be -1.
506 int testimage = params_.GetChannelIndex("testimage-channel");
507 int bogus = params_.GetChannelIndex("bogus-channel");
508 EXPECT_EQ(-1, testimage);
509 EXPECT_EQ(-1, bogus);
510}
511
512TEST_F(OmahaRequestParamsTest, ToMoreStableChannelFlagTest) {
513 ASSERT_TRUE(WriteFileString(
514 kTestDir + "/etc/lsb-release",
515 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
516 "CHROMEOS_RELEASE_FOO=bar\n"
517 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
518 "CHROMEOS_RELEASE_TRACK=canary-channel\n"
519 "CHROMEOS_AUSERVER=http://www.google.com"));
520 ASSERT_TRUE(WriteFileString(
521 kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
522 "CHROMEOS_RELEASE_BOARD=x86-generic\n"
523 "CHROMEOS_RELEASE_TRACK=stable-channel\n"
524 "CHROMEOS_AUSERVER=https://www.google.com"));
525 MockSystemState mock_system_state;
526 OmahaRequestParams out(&mock_system_state);
527 EXPECT_TRUE(DoTest(&out, "", ""));
528 EXPECT_EQ("https://www.google.com", out.update_url());
529 EXPECT_FALSE(out.delta_okay());
530 EXPECT_EQ("stable-channel", out.target_channel());
531 EXPECT_TRUE(out.to_more_stable_channel());
532}
533
534TEST_F(OmahaRequestParamsTest, ShouldLockDownTest) {
Darin Petkov10d02dd2011-01-10 14:57:39 -0800535 EXPECT_FALSE(params_.ShouldLockDown());
536}
537
adlr@google.com3defe6a2009-12-04 20:57:17 +0000538} // namespace chromeos_update_engine