omaha_request_params_unittest.cc revision 1c0fe79c7ef2b43946d756b54c8505d2bf48b93b
1// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// 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>
6
7#include <string>
8
9#include "base/file_util.h"
10#include "gtest/gtest.h"
11#include "update_engine/install_plan.h"
12#include "update_engine/mock_system_state.h"
13#include "update_engine/omaha_request_params.h"
14#include "update_engine/test_utils.h"
15#include "update_engine/utils.h"
16
17using std::string;
18
19namespace chromeos_update_engine {
20
21class OmahaRequestParamsTest : public ::testing::Test {
22 public:
23  OmahaRequestParamsTest() : params_(NULL) {}
24
25 protected:
26  // Return true iff the OmahaRequestParams::Init succeeded. If
27  // out is non-NULL, it's set w/ the generated data.
28  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"));
35    // 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;
40    params_.set_root(string("./") + kTestDir);
41    params_.SetLockDown(false);
42  }
43
44  virtual void TearDown() {
45    EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
46  }
47
48  OmahaRequestParams params_;
49
50  static const string kTestDir;
51};
52
53const string OmahaRequestParamsTest::kTestDir =
54    "omaha_request_params-test";
55
56bool OmahaRequestParamsTest::DoTest(OmahaRequestParams* out,
57                                    const string& app_version,
58                                    const string& omaha_url) {
59  bool success = params_.Init(app_version, omaha_url, false);
60  if (out)
61    *out = params_;
62  return success;
63}
64
65namespace {
66string GetMachineType() {
67  string machine_type;
68  if (!utils::ReadPipe("uname -m", &machine_type))
69    return "";
70  // 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;
75}
76}  // namespace {}
77
78TEST_F(OmahaRequestParamsTest, SimpleTest) {
79  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"
84      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
85      "CHROMEOS_AUSERVER=http://www.google.com"));
86  MockSystemState mock_system_state;
87  OmahaRequestParams out(&mock_system_state);
88  EXPECT_TRUE(DoTest(&out, "", ""));
89  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());
99}
100
101TEST_F(OmahaRequestParamsTest, AppIDTest) {
102  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"
107      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
108      "CHROMEOS_RELEASE_APPID={58c35cef-9d30-476e-9098-ce20377d535d}\n"
109      "CHROMEOS_AUSERVER=http://www.google.com"));
110  MockSystemState mock_system_state;
111  OmahaRequestParams out(&mock_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("{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());
123}
124
125TEST_F(OmahaRequestParamsTest, MissingChannelTest) {
126  ASSERT_TRUE(WriteFileString(
127      kTestDir + "/etc/lsb-release",
128      "CHROMEOS_RELEASE_FOO=bar\n"
129      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
130      "CHROMEOS_RELEASE_TRXCK=dev-channel"));
131  MockSystemState mock_system_state;
132  OmahaRequestParams out(&mock_system_state);
133  EXPECT_TRUE(DoTest(&out, "", ""));
134  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());
140}
141
142TEST_F(OmahaRequestParamsTest, ConfusingReleaseTest) {
143  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"
147      "CHROMEOS_RELEASE_TRXCK=dev-channel"));
148  MockSystemState mock_system_state;
149  OmahaRequestParams out(&mock_system_state);
150  EXPECT_TRUE(DoTest(&out, "", ""));
151  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());
157}
158
159TEST_F(OmahaRequestParamsTest, MissingVersionTest) {
160  ASSERT_TRUE(WriteFileString(
161      kTestDir + "/etc/lsb-release",
162      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
163      "CHROMEOS_RELEASE_FOO=bar\n"
164      "CHROMEOS_RELEASE_TRACK=dev-channel"));
165  MockSystemState mock_system_state;
166  OmahaRequestParams out(&mock_system_state);
167  EXPECT_TRUE(DoTest(&out, "", ""));
168  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());
176}
177
178TEST_F(OmahaRequestParamsTest, ForceVersionTest) {
179  ASSERT_TRUE(WriteFileString(
180      kTestDir + "/etc/lsb-release",
181      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
182      "CHROMEOS_RELEASE_FOO=bar\n"
183      "CHROMEOS_RELEASE_TRACK=dev-channel"));
184  MockSystemState mock_system_state;
185  OmahaRequestParams out(&mock_system_state);
186  EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
187  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());
195}
196
197TEST_F(OmahaRequestParamsTest, ForcedURLTest) {
198  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"
203      "CHROMEOS_RELEASE_TRACK=dev-channel"));
204  MockSystemState mock_system_state;
205  OmahaRequestParams out(&mock_system_state);
206  EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
207  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());
216}
217
218TEST_F(OmahaRequestParamsTest, MissingURLTest) {
219  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"
224      "CHROMEOS_RELEASE_TRACK=dev-channel"));
225  MockSystemState mock_system_state;
226  OmahaRequestParams out(&mock_system_state);
227  EXPECT_TRUE(DoTest(&out, "", ""));
228  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());
237}
238
239TEST_F(OmahaRequestParamsTest, NoDeltasTest) {
240  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"
244      "CHROMEOS_RELEASE_TRXCK=dev-channel"));
245  ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
246  MockSystemState mock_system_state;
247  OmahaRequestParams out(&mock_system_state);
248  EXPECT_TRUE(DoTest(&out, "", ""));
249  EXPECT_FALSE(out.delta_okay());
250}
251
252TEST_F(OmahaRequestParamsTest, OverrideTest) {
253  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"
258      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
259      "CHROMEOS_AUSERVER=http://www.google.com"));
260  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"));
293  params_.SetLockDown(true);
294  MockSystemState mock_system_state;
295  OmahaRequestParams out(&mock_system_state);
296  EXPECT_TRUE(DoTest(&out, "", ""));
297  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());
304}
305
306TEST_F(OmahaRequestParamsTest, OverrideSameChannelTest) {
307  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"
312      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
313      "CHROMEOS_AUSERVER=http://www.google.com"));
314  ASSERT_TRUE(WriteFileString(
315      kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
316      "CHROMEOS_RELEASE_BOARD=x86-generic\n"
317      "CHROMEOS_RELEASE_TRACK=dev-channel"));
318  MockSystemState mock_system_state;
319  OmahaRequestParams out(&mock_system_state);
320  EXPECT_TRUE(DoTest(&out, "", ""));
321  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());
328}
329
330TEST_F(OmahaRequestParamsTest, SetTargetChannelTest) {
331  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"
336      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
337      "CHROMEOS_AUSERVER=http://www.google.com"));
338  {
339    MockSystemState mock_system_state;
340    OmahaRequestParams params(&mock_system_state);
341    params.set_root(string("./") + kTestDir);
342    params.SetLockDown(false);
343    EXPECT_TRUE(params.Init("", "", false));
344    params.SetTargetChannel("canary-channel", false);
345    EXPECT_FALSE(params.is_powerwash_allowed());
346  }
347  MockSystemState mock_system_state;
348  OmahaRequestParams out(&mock_system_state);
349  EXPECT_TRUE(DoTest(&out, "", ""));
350  EXPECT_EQ("canary-channel", out.target_channel());
351  EXPECT_FALSE(out.is_powerwash_allowed());
352}
353
354TEST_F(OmahaRequestParamsTest, SetIsPowerwashAllowedTest) {
355  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"
360      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
361      "CHROMEOS_AUSERVER=http://www.google.com"));
362  {
363    MockSystemState mock_system_state;
364    OmahaRequestParams params(&mock_system_state);
365    params.set_root(string("./") + kTestDir);
366    params.SetLockDown(false);
367    EXPECT_TRUE(params.Init("", "", false));
368    params.SetTargetChannel("canary-channel", true);
369    EXPECT_TRUE(params.is_powerwash_allowed());
370  }
371  MockSystemState mock_system_state;
372  OmahaRequestParams out(&mock_system_state);
373  EXPECT_TRUE(DoTest(&out, "", ""));
374  EXPECT_EQ("canary-channel", out.target_channel());
375  EXPECT_TRUE(out.is_powerwash_allowed());
376}
377
378TEST_F(OmahaRequestParamsTest, SetTargetChannelInvalidTest) {
379  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"
384      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
385      "CHROMEOS_AUSERVER=http://www.google.com"));
386  {
387    MockSystemState mock_system_state;
388    OmahaRequestParams params(&mock_system_state);
389    params.set_root(string("./") + kTestDir);
390    params.SetLockDown(true);
391    EXPECT_TRUE(params.Init("", "", false));
392    params.SetTargetChannel("dogfood-channel", true);
393    EXPECT_FALSE(params.is_powerwash_allowed());
394  }
395  MockSystemState mock_system_state;
396  OmahaRequestParams out(&mock_system_state);
397  EXPECT_TRUE(DoTest(&out, "", ""));
398  EXPECT_EQ("arm-generic", out.os_board());
399  EXPECT_EQ("dev-channel", out.target_channel());
400  EXPECT_FALSE(out.is_powerwash_allowed());
401}
402
403TEST_F(OmahaRequestParamsTest, IsValidChannelTest) {
404  params_.SetLockDown(false);
405  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(""));
413}
414
415TEST_F(OmahaRequestParamsTest, ValidChannelTest) {
416  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"));
423  params_.SetLockDown(true);
424  MockSystemState mock_system_state;
425  OmahaRequestParams out(&mock_system_state);
426  EXPECT_TRUE(DoTest(&out, "", ""));
427  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());
437}
438
439TEST_F(OmahaRequestParamsTest, SetTargetChannelWorks) {
440  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"));
447  params_.SetLockDown(false);
448
449  // Check LSB value is used by default when SetTargetChannel is not called.
450  params_.Init("", "", false);
451  EXPECT_EQ("dev-channel", params_.target_channel());
452
453  // 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
470  // succeed.
471  params_.Init("", "", false);
472  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());
493  EXPECT_EQ("beta-channel", params_.target_channel());
494}
495
496TEST_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) {
535  EXPECT_FALSE(params_.ShouldLockDown());
536}
537
538}  // namespace chromeos_update_engine
539