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