blob: 0150a00292d395ceb9aa8039baca24cdb6eb9f14 [file] [log] [blame]
Darin Petkova4a8a8c2010-07-15 22:21:12 -07001// Copyright (c) 2010 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"
Darin Petkova4a8a8c2010-07-15 22:21:12 -070012#include "update_engine/omaha_request_params.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000013#include "update_engine/test_utils.h"
14#include "update_engine/utils.h"
15
16using std::string;
17
18namespace chromeos_update_engine {
19
Darin Petkova4a8a8c2010-07-15 22:21:12 -070020class OmahaRequestDeviceParamsTest : public ::testing::Test {
Darin Petkov5a7f5652010-07-22 21:40:09 -070021 protected:
Darin Petkova4a8a8c2010-07-15 22:21:12 -070022 // Return true iff the OmahaRequestDeviceParams::Init succeeded. If
23 // out is non-NULL, it's set w/ the generated data.
Darin Petkov5a7f5652010-07-22 21:40:09 -070024 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 }
32
33 virtual void TearDown() {
34 EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
35 }
36
adlr@google.com3defe6a2009-12-04 20:57:17 +000037 static const string kTestDir;
38};
39
Darin Petkova4a8a8c2010-07-15 22:21:12 -070040const string OmahaRequestDeviceParamsTest::kTestDir =
41 "omaha_request_device_params-test";
adlr@google.com3defe6a2009-12-04 20:57:17 +000042
Darin Petkov5a7f5652010-07-22 21:40:09 -070043bool OmahaRequestDeviceParamsTest::DoTest(OmahaRequestParams* out,
44 const string& app_version,
45 const string& omaha_url) {
Darin Petkova4a8a8c2010-07-15 22:21:12 -070046 OmahaRequestDeviceParams params;
47 params.set_root(string("./") + kTestDir);
Darin Petkov5a7f5652010-07-22 21:40:09 -070048 bool success = params.Init(app_version, omaha_url);
adlr@google.com3defe6a2009-12-04 20:57:17 +000049 if (out)
Darin Petkova4a8a8c2010-07-15 22:21:12 -070050 *out = params;
51 return success;
adlr@google.com3defe6a2009-12-04 20:57:17 +000052}
53
54namespace {
adlr@google.com3defe6a2009-12-04 20:57:17 +000055string GetMachineType() {
56 FILE* fp = popen("uname -m", "r");
57 if (!fp)
58 return "";
59 string ret;
60 for (;;) {
61 char buffer[10];
62 size_t r = fread(buffer, 1, sizeof(buffer), fp);
63 if (r == 0)
64 break;
65 ret.insert(ret.begin(), buffer, buffer + r);
66 }
67 // strip trailing '\n' if it exists
68 if ((*ret.rbegin()) == '\n')
69 ret.resize(ret.size() - 1);
70 fclose(fp);
71 return ret;
72}
73} // namespace {}
74
Darin Petkova4a8a8c2010-07-15 22:21:12 -070075TEST_F(OmahaRequestDeviceParamsTest, SimpleTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070076 ASSERT_TRUE(WriteFileString(
77 kTestDir + "/etc/lsb-release",
78 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
79 "CHROMEOS_RELEASE_FOO=bar\n"
80 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
81 "CHROMEOS_RELEASE_TRACK=footrack\n"
82 "CHROMEOS_AUSERVER=http://www.google.com"));
83 OmahaRequestParams out;
84 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -070085 EXPECT_EQ("Chrome OS", out.os_platform);
86 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
87 EXPECT_EQ("arm-generic", out.os_board);
88 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
89 EXPECT_EQ("0.2.2.3", out.app_version);
90 EXPECT_EQ("en-US", out.app_lang);
Darin Petkovfbb40092010-07-29 17:05:50 -070091 EXPECT_EQ("", out.hardware_class);
Darin Petkov5a7f5652010-07-22 21:40:09 -070092 EXPECT_TRUE(out.delta_okay);
93 EXPECT_EQ("footrack", out.app_track);
94 EXPECT_EQ("http://www.google.com", out.update_url);
adlr@google.com3defe6a2009-12-04 20:57:17 +000095}
96
Darin Petkova4a8a8c2010-07-15 22:21:12 -070097TEST_F(OmahaRequestDeviceParamsTest, MissingTrackTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070098 ASSERT_TRUE(WriteFileString(
99 kTestDir + "/etc/lsb-release",
100 "CHROMEOS_RELEASE_FOO=bar\n"
101 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
102 "CHROMEOS_RELEASE_TRXCK=footrack"));
103 OmahaRequestParams out;
104 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700105 EXPECT_EQ("Chrome OS", out.os_platform);
106 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
107 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
108 EXPECT_EQ("0.2.2.3", out.app_version);
109 EXPECT_EQ("en-US", out.app_lang);
110 EXPECT_EQ("", out.app_track);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000111}
112
Darin Petkova4a8a8c2010-07-15 22:21:12 -0700113TEST_F(OmahaRequestDeviceParamsTest, ConfusingReleaseTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700114 ASSERT_TRUE(WriteFileString(
115 kTestDir + "/etc/lsb-release",
116 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
117 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
118 "CHROMEOS_RELEASE_TRXCK=footrack"));
119 OmahaRequestParams out;
120 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700121 EXPECT_EQ("Chrome OS", out.os_platform);
122 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
123 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
124 EXPECT_EQ("0.2.2.3", out.app_version);
125 EXPECT_EQ("en-US", out.app_lang);
126 EXPECT_EQ("", out.app_track);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000127}
128
Darin Petkov5a7f5652010-07-22 21:40:09 -0700129TEST_F(OmahaRequestDeviceParamsTest, MissingVersionTest) {
130 ASSERT_TRUE(WriteFileString(
131 kTestDir + "/etc/lsb-release",
132 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
133 "CHROMEOS_RELEASE_FOO=bar\n"
134 "CHROMEOS_RELEASE_TRACK=footrack"));
135 OmahaRequestParams out;
136 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700137 EXPECT_EQ("Chrome OS", out.os_platform);
138 EXPECT_EQ(string("_") + GetMachineType(), out.os_sp);
139 EXPECT_EQ("arm-generic", out.os_board);
140 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
141 EXPECT_EQ("", out.app_version);
142 EXPECT_EQ("en-US", out.app_lang);
143 EXPECT_TRUE(out.delta_okay);
144 EXPECT_EQ("footrack", out.app_track);
145}
146
147TEST_F(OmahaRequestDeviceParamsTest, ForceVersionTest) {
148 ASSERT_TRUE(WriteFileString(
149 kTestDir + "/etc/lsb-release",
150 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
151 "CHROMEOS_RELEASE_FOO=bar\n"
152 "CHROMEOS_RELEASE_TRACK=footrack"));
153 OmahaRequestParams out;
154 EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700155 EXPECT_EQ("Chrome OS", out.os_platform);
156 EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp);
157 EXPECT_EQ("arm-generic", out.os_board);
158 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
159 EXPECT_EQ("ForcedVersion", out.app_version);
160 EXPECT_EQ("en-US", out.app_lang);
161 EXPECT_TRUE(out.delta_okay);
162 EXPECT_EQ("footrack", out.app_track);
163}
164
165TEST_F(OmahaRequestDeviceParamsTest, ForcedURLTest) {
166 ASSERT_TRUE(WriteFileString(
167 kTestDir + "/etc/lsb-release",
168 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
169 "CHROMEOS_RELEASE_FOO=bar\n"
170 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
171 "CHROMEOS_RELEASE_TRACK=footrack"));
172 OmahaRequestParams out;
173 EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700174 EXPECT_EQ("Chrome OS", out.os_platform);
175 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
176 EXPECT_EQ("arm-generic", out.os_board);
177 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
178 EXPECT_EQ("0.2.2.3", out.app_version);
179 EXPECT_EQ("en-US", out.app_lang);
180 EXPECT_TRUE(out.delta_okay);
181 EXPECT_EQ("footrack", out.app_track);
182 EXPECT_EQ("http://forced.google.com", out.update_url);
183}
184
185TEST_F(OmahaRequestDeviceParamsTest, MissingURLTest) {
186 ASSERT_TRUE(WriteFileString(
187 kTestDir + "/etc/lsb-release",
188 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
189 "CHROMEOS_RELEASE_FOO=bar\n"
190 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
191 "CHROMEOS_RELEASE_TRACK=footrack"));
192 OmahaRequestParams out;
193 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700194 EXPECT_EQ("Chrome OS", out.os_platform);
195 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
196 EXPECT_EQ("arm-generic", out.os_board);
197 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
198 EXPECT_EQ("0.2.2.3", out.app_version);
199 EXPECT_EQ("en-US", out.app_lang);
200 EXPECT_TRUE(out.delta_okay);
201 EXPECT_EQ("footrack", out.app_track);
202 EXPECT_EQ(OmahaRequestParams::kUpdateUrl, out.update_url);
Andrew de los Reyes970bb282009-12-09 16:34:04 -0800203}
204
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700205TEST_F(OmahaRequestDeviceParamsTest, NoDeltasTest) {
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700206 ASSERT_TRUE(WriteFileString(
207 kTestDir + "/etc/lsb-release",
208 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
209 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
210 "CHROMEOS_RELEASE_TRXCK=footrack"));
211 ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
212 OmahaRequestParams out;
Darin Petkov5a7f5652010-07-22 21:40:09 -0700213 EXPECT_TRUE(DoTest(&out, "", ""));
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700214 EXPECT_FALSE(out.delta_okay);
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700215}
216
Darin Petkovfbb40092010-07-29 17:05:50 -0700217TEST_F(OmahaRequestDeviceParamsTest, HardwareClassTest) {
218 string test_class = " \t sample hardware class \n ";
219 FilePath hwid_path(kTestDir + "/sys/devices/platform/chromeos_acpi/HWID");
220 ASSERT_TRUE(file_util::CreateDirectory(hwid_path.DirName()));
221 ASSERT_EQ(test_class.size(),
222 file_util::WriteFile(hwid_path,
223 test_class.data(),
224 test_class.size()));
225 OmahaRequestParams out;
226 EXPECT_TRUE(DoTest(&out, "", ""));
227 EXPECT_EQ("sample hardware class", out.hardware_class);
228}
229
adlr@google.com3defe6a2009-12-04 20:57:17 +0000230} // namespace chromeos_update_engine