omaha_request_params_unittest.cc revision f2065b4d77be793fe0a5b4280fe23433cbecaa1b
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/omaha_request_params.h"
13#include "update_engine/test_utils.h"
14#include "update_engine/utils.h"
15
16using std::string;
17
18namespace chromeos_update_engine {
19
20class OmahaRequestDeviceParamsTest : public ::testing::Test {
21 protected:
22  // Return true iff the OmahaRequestDeviceParams::Init succeeded. If
23  // out is non-NULL, it's set w/ the generated data.
24  bool DoTest(OmahaRequestParams* out, const string& app_version,
25              const string& omaha_url);
26
27  virtual void SetUp() {
28    ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc"));
29    ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir +
30                        utils::kStatefulPartition + "/etc"));
31    params_.set_root(string("./") + kTestDir);
32    params_.SetLockDown(false);
33  }
34
35  virtual void TearDown() {
36    EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
37  }
38
39  OmahaRequestDeviceParams params_;
40
41  static const string kTestDir;
42};
43
44const string OmahaRequestDeviceParamsTest::kTestDir =
45    "omaha_request_device_params-test";
46
47bool OmahaRequestDeviceParamsTest::DoTest(OmahaRequestParams* out,
48                                          const string& app_version,
49                                          const string& omaha_url) {
50  bool success = params_.Init(app_version, omaha_url);
51  if (out)
52    *out = params_;
53  return success;
54}
55
56namespace {
57string GetMachineType() {
58  FILE* fp = popen("uname -m", "r");
59  if (!fp)
60    return "";
61  string ret;
62  for (;;) {
63    char buffer[10];
64    size_t r = fread(buffer, 1, sizeof(buffer), fp);
65    if (r == 0)
66      break;
67    ret.insert(ret.begin(), buffer, buffer + r);
68  }
69  // strip trailing '\n' if it exists
70  if ((*ret.rbegin()) == '\n')
71    ret.resize(ret.size() - 1);
72  fclose(fp);
73  return ret;
74}
75}  // namespace {}
76
77TEST_F(OmahaRequestDeviceParamsTest, SimpleTest) {
78  ASSERT_TRUE(WriteFileString(
79      kTestDir + "/etc/lsb-release",
80      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
81      "CHROMEOS_RELEASE_FOO=bar\n"
82      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
83      "CHROMEOS_RELEASE_TRACK=footrack\n"
84      "CHROMEOS_AUSERVER=http://www.google.com"));
85  OmahaRequestParams out;
86  EXPECT_TRUE(DoTest(&out, "", ""));
87  EXPECT_EQ("Chrome OS", out.os_platform);
88  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
89  EXPECT_EQ("arm-generic", out.os_board);
90  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
91  EXPECT_EQ("0.2.2.3", out.app_version);
92  EXPECT_EQ("en-US", out.app_lang);
93  EXPECT_EQ("", out.hardware_class);
94  EXPECT_TRUE(out.delta_okay);
95  EXPECT_EQ("footrack", out.app_track);
96  EXPECT_EQ("http://www.google.com", out.update_url);
97}
98
99TEST_F(OmahaRequestDeviceParamsTest, AppIDTest) {
100  ASSERT_TRUE(WriteFileString(
101      kTestDir + "/etc/lsb-release",
102      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
103      "CHROMEOS_RELEASE_FOO=bar\n"
104      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
105      "CHROMEOS_RELEASE_TRACK=footrack\n"
106      "CHROMEOS_RELEASE_APPID={58c35cef-9d30-476e-9098-ce20377d535d}\n"
107      "CHROMEOS_AUSERVER=http://www.google.com"));
108  OmahaRequestParams out;
109  EXPECT_TRUE(DoTest(&out, "", ""));
110  EXPECT_EQ("Chrome OS", out.os_platform);
111  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
112  EXPECT_EQ("arm-generic", out.os_board);
113  EXPECT_EQ("{58c35cef-9d30-476e-9098-ce20377d535d}", out.app_id);
114  EXPECT_EQ("0.2.2.3", out.app_version);
115  EXPECT_EQ("en-US", out.app_lang);
116  EXPECT_EQ("", out.hardware_class);
117  EXPECT_TRUE(out.delta_okay);
118  EXPECT_EQ("footrack", out.app_track);
119  EXPECT_EQ("http://www.google.com", out.update_url);
120}
121
122TEST_F(OmahaRequestDeviceParamsTest, MissingTrackTest) {
123  ASSERT_TRUE(WriteFileString(
124      kTestDir + "/etc/lsb-release",
125      "CHROMEOS_RELEASE_FOO=bar\n"
126      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
127      "CHROMEOS_RELEASE_TRXCK=footrack"));
128  OmahaRequestParams out;
129  EXPECT_TRUE(DoTest(&out, "", ""));
130  EXPECT_EQ("Chrome OS", out.os_platform);
131  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
132  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
133  EXPECT_EQ("0.2.2.3", out.app_version);
134  EXPECT_EQ("en-US", out.app_lang);
135  EXPECT_EQ("", out.app_track);
136}
137
138TEST_F(OmahaRequestDeviceParamsTest, ConfusingReleaseTest) {
139  ASSERT_TRUE(WriteFileString(
140      kTestDir + "/etc/lsb-release",
141      "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
142      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
143      "CHROMEOS_RELEASE_TRXCK=footrack"));
144  OmahaRequestParams out;
145  EXPECT_TRUE(DoTest(&out, "", ""));
146  EXPECT_EQ("Chrome OS", out.os_platform);
147  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
148  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
149  EXPECT_EQ("0.2.2.3", out.app_version);
150  EXPECT_EQ("en-US", out.app_lang);
151  EXPECT_EQ("", out.app_track);
152}
153
154TEST_F(OmahaRequestDeviceParamsTest, MissingVersionTest) {
155  ASSERT_TRUE(WriteFileString(
156      kTestDir + "/etc/lsb-release",
157      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
158      "CHROMEOS_RELEASE_FOO=bar\n"
159      "CHROMEOS_RELEASE_TRACK=footrack"));
160  OmahaRequestParams out;
161  EXPECT_TRUE(DoTest(&out, "", ""));
162  EXPECT_EQ("Chrome OS", out.os_platform);
163  EXPECT_EQ(string("_") + GetMachineType(), out.os_sp);
164  EXPECT_EQ("arm-generic", out.os_board);
165  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
166  EXPECT_EQ("", out.app_version);
167  EXPECT_EQ("en-US", out.app_lang);
168  EXPECT_TRUE(out.delta_okay);
169  EXPECT_EQ("footrack", out.app_track);
170}
171
172TEST_F(OmahaRequestDeviceParamsTest, ForceVersionTest) {
173  ASSERT_TRUE(WriteFileString(
174      kTestDir + "/etc/lsb-release",
175      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
176      "CHROMEOS_RELEASE_FOO=bar\n"
177      "CHROMEOS_RELEASE_TRACK=footrack"));
178  OmahaRequestParams out;
179  EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
180  EXPECT_EQ("Chrome OS", out.os_platform);
181  EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp);
182  EXPECT_EQ("arm-generic", out.os_board);
183  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
184  EXPECT_EQ("ForcedVersion", out.app_version);
185  EXPECT_EQ("en-US", out.app_lang);
186  EXPECT_TRUE(out.delta_okay);
187  EXPECT_EQ("footrack", out.app_track);
188}
189
190TEST_F(OmahaRequestDeviceParamsTest, ForcedURLTest) {
191  ASSERT_TRUE(WriteFileString(
192      kTestDir + "/etc/lsb-release",
193      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
194      "CHROMEOS_RELEASE_FOO=bar\n"
195      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
196      "CHROMEOS_RELEASE_TRACK=footrack"));
197  OmahaRequestParams out;
198  EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
199  EXPECT_EQ("Chrome OS", out.os_platform);
200  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
201  EXPECT_EQ("arm-generic", out.os_board);
202  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
203  EXPECT_EQ("0.2.2.3", out.app_version);
204  EXPECT_EQ("en-US", out.app_lang);
205  EXPECT_TRUE(out.delta_okay);
206  EXPECT_EQ("footrack", out.app_track);
207  EXPECT_EQ("http://forced.google.com", out.update_url);
208}
209
210TEST_F(OmahaRequestDeviceParamsTest, MissingURLTest) {
211  ASSERT_TRUE(WriteFileString(
212      kTestDir + "/etc/lsb-release",
213      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
214      "CHROMEOS_RELEASE_FOO=bar\n"
215      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
216      "CHROMEOS_RELEASE_TRACK=footrack"));
217  OmahaRequestParams out;
218  EXPECT_TRUE(DoTest(&out, "", ""));
219  EXPECT_EQ("Chrome OS", out.os_platform);
220  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
221  EXPECT_EQ("arm-generic", out.os_board);
222  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
223  EXPECT_EQ("0.2.2.3", out.app_version);
224  EXPECT_EQ("en-US", out.app_lang);
225  EXPECT_TRUE(out.delta_okay);
226  EXPECT_EQ("footrack", out.app_track);
227  EXPECT_EQ(OmahaRequestParams::kUpdateUrl, out.update_url);
228}
229
230TEST_F(OmahaRequestDeviceParamsTest, NoDeltasTest) {
231  ASSERT_TRUE(WriteFileString(
232      kTestDir + "/etc/lsb-release",
233      "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
234      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
235      "CHROMEOS_RELEASE_TRXCK=footrack"));
236  ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
237  OmahaRequestParams out;
238  EXPECT_TRUE(DoTest(&out, "", ""));
239  EXPECT_FALSE(out.delta_okay);
240}
241
242TEST_F(OmahaRequestDeviceParamsTest, OverrideTest) {
243  ASSERT_TRUE(WriteFileString(
244      kTestDir + "/etc/lsb-release",
245      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
246      "CHROMEOS_RELEASE_FOO=bar\n"
247      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
248      "CHROMEOS_RELEASE_TRACK=footrack\n"
249      "CHROMEOS_AUSERVER=http://www.google.com"));
250  ASSERT_TRUE(WriteFileString(
251      kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
252      "CHROMEOS_RELEASE_BOARD=x86-generic\n"
253      "CHROMEOS_RELEASE_TRACK=bartrack\n"
254      "CHROMEOS_AUSERVER=https://www.google.com"));
255  OmahaRequestParams out;
256  EXPECT_TRUE(DoTest(&out, "", ""));
257  EXPECT_EQ("Chrome OS", out.os_platform);
258  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
259  EXPECT_EQ("x86-generic", out.os_board);
260  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
261  EXPECT_EQ("0.2.2.3", out.app_version);
262  EXPECT_EQ("en-US", out.app_lang);
263  EXPECT_EQ("", out.hardware_class);
264  EXPECT_FALSE(out.delta_okay);
265  EXPECT_EQ("bartrack", out.app_track);
266  EXPECT_EQ("https://www.google.com", out.update_url);
267}
268
269TEST_F(OmahaRequestDeviceParamsTest, OverrideLockDownTest) {
270  ASSERT_TRUE(WriteFileString(
271      kTestDir + "/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=footrack\n"
276      "CHROMEOS_AUSERVER=https://www.google.com"));
277  ASSERT_TRUE(WriteFileString(
278      kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
279      "CHROMEOS_RELEASE_BOARD=x86-generic\n"
280      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
281      "CHROMEOS_AUSERVER=http://www.google.com"));
282  params_.SetLockDown(true);
283  OmahaRequestParams out;
284  EXPECT_TRUE(DoTest(&out, "", ""));
285  EXPECT_EQ("arm-generic", out.os_board);
286  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
287  EXPECT_EQ("0.2.2.3", out.app_version);
288  EXPECT_EQ("", out.hardware_class);
289  EXPECT_FALSE(out.delta_okay);
290  EXPECT_EQ("dev-channel", out.app_track);
291  EXPECT_EQ("https://www.google.com", out.update_url);
292}
293
294TEST_F(OmahaRequestDeviceParamsTest, OverrideSameTrackTest) {
295  ASSERT_TRUE(WriteFileString(
296      kTestDir + "/etc/lsb-release",
297      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
298      "CHROMEOS_RELEASE_FOO=bar\n"
299      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
300      "CHROMEOS_RELEASE_TRACK=footrack\n"
301      "CHROMEOS_AUSERVER=http://www.google.com"));
302  ASSERT_TRUE(WriteFileString(
303      kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
304      "CHROMEOS_RELEASE_BOARD=x86-generic\n"
305      "CHROMEOS_RELEASE_TRACK=footrack"));
306  OmahaRequestParams out;
307  EXPECT_TRUE(DoTest(&out, "", ""));
308  EXPECT_EQ("x86-generic", out.os_board);
309  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
310  EXPECT_EQ("0.2.2.3", out.app_version);
311  EXPECT_EQ("", out.hardware_class);
312  EXPECT_TRUE(out.delta_okay);
313  EXPECT_EQ("footrack", out.app_track);
314  EXPECT_EQ("http://www.google.com", out.update_url);
315}
316
317TEST_F(OmahaRequestDeviceParamsTest, SetTrackSimpleTest) {
318  ASSERT_TRUE(WriteFileString(
319      kTestDir + "/etc/lsb-release",
320      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
321      "CHROMEOS_RELEASE_FOO=bar\n"
322      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
323      "CHROMEOS_RELEASE_TRACK=footrack\n"
324      "CHROMEOS_AUSERVER=http://www.google.com"));
325  {
326    OmahaRequestDeviceParams params;
327    params.set_root(string("./") + kTestDir);
328    params.SetLockDown(false);
329    EXPECT_TRUE(params.Init("", ""));
330    params.SetTrack("zootrack");
331  }
332  OmahaRequestParams out;
333  EXPECT_TRUE(DoTest(&out, "", ""));
334  EXPECT_EQ("arm-generic", out.os_board);
335  EXPECT_EQ("zootrack", out.app_track);
336}
337
338TEST_F(OmahaRequestDeviceParamsTest, SetTrackPreserveTest) {
339  ASSERT_TRUE(WriteFileString(
340      kTestDir + "/etc/lsb-release",
341      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
342      "CHROMEOS_RELEASE_FOO=bar\n"
343      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
344      "CHROMEOS_RELEASE_TRACK=footrack\n"
345      "CHROMEOS_AUSERVER=http://www.google.com"));
346  ASSERT_TRUE(WriteFileString(
347      kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
348      "CHROMEOS_RELEASE_BOARD=x86-generic\n"
349      "CHROMEOS_RELEASE_TRACK=bartrack"));
350  {
351    OmahaRequestDeviceParams params;
352    params.set_root(string("./") + kTestDir);
353    params.SetLockDown(false);
354    EXPECT_TRUE(params.Init("", ""));
355    params.SetTrack("zootrack");
356  }
357  OmahaRequestParams out;
358  EXPECT_TRUE(DoTest(&out, "", ""));
359  EXPECT_EQ("x86-generic", out.os_board);
360  EXPECT_EQ("zootrack", out.app_track);
361}
362
363TEST_F(OmahaRequestDeviceParamsTest, SetTrackInvalidTest) {
364  ASSERT_TRUE(WriteFileString(
365      kTestDir + "/etc/lsb-release",
366      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
367      "CHROMEOS_RELEASE_FOO=bar\n"
368      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
369      "CHROMEOS_RELEASE_TRACK=footrack\n"
370      "CHROMEOS_AUSERVER=http://www.google.com"));
371  {
372    OmahaRequestDeviceParams params;
373    params.set_root(string("./") + kTestDir);
374    params.SetLockDown(true);
375    EXPECT_TRUE(params.Init("", ""));
376    params.SetTrack("zootrack");
377  }
378  OmahaRequestParams out;
379  EXPECT_TRUE(DoTest(&out, "", ""));
380  EXPECT_EQ("arm-generic", out.os_board);
381  EXPECT_EQ("footrack", out.app_track);
382}
383
384TEST_F(OmahaRequestDeviceParamsTest, IsValidTrackTest) {
385  params_.SetLockDown(true);
386  EXPECT_TRUE(params_.IsValidTrack("canary-channel"));
387  EXPECT_TRUE(params_.IsValidTrack("stable-channel"));
388  EXPECT_TRUE(params_.IsValidTrack("beta-channel"));
389  EXPECT_TRUE(params_.IsValidTrack("dev-channel"));
390  EXPECT_FALSE(params_.IsValidTrack("some-channel"));
391  EXPECT_FALSE(params_.IsValidTrack(""));
392  params_.SetLockDown(false);
393  EXPECT_TRUE(params_.IsValidTrack("canary-channel"));
394  EXPECT_TRUE(params_.IsValidTrack("stable-channel"));
395  EXPECT_TRUE(params_.IsValidTrack("beta-channel"));
396  EXPECT_TRUE(params_.IsValidTrack("dev-channel"));
397  EXPECT_TRUE(params_.IsValidTrack("some-channel"));
398  EXPECT_TRUE(params_.IsValidTrack(""));
399}
400
401TEST_F(OmahaRequestDeviceParamsTest, ValidTrackTest) {
402  ASSERT_TRUE(WriteFileString(
403      kTestDir + "/etc/lsb-release",
404      "CHROMEOS_RELEASE_BOARD=arm-generic\n"
405      "CHROMEOS_RELEASE_FOO=bar\n"
406      "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
407      "CHROMEOS_RELEASE_TRACK=dev-channel\n"
408      "CHROMEOS_AUSERVER=http://www.google.com"));
409  params_.SetLockDown(true);
410  OmahaRequestParams out;
411  EXPECT_TRUE(DoTest(&out, "", ""));
412  EXPECT_EQ("Chrome OS", out.os_platform);
413  EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
414  EXPECT_EQ("arm-generic", out.os_board);
415  EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
416  EXPECT_EQ("0.2.2.3", out.app_version);
417  EXPECT_EQ("en-US", out.app_lang);
418  EXPECT_EQ("", out.hardware_class);
419  EXPECT_TRUE(out.delta_okay);
420  EXPECT_EQ("dev-channel", out.app_track);
421  EXPECT_EQ("http://www.google.com", out.update_url);
422}
423
424TEST_F(OmahaRequestDeviceParamsTest, ShouldLockDownTest) {
425  EXPECT_FALSE(params_.ShouldLockDown());
426}
427
428}  // namespace chromeos_update_engine
429