blob: 19898f4e34e5cf98b8b905dc9b61725f04038977 [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>
6#include <string>
7#include <gtest/gtest.h>
8#include "update_engine/install_plan.h"
Darin Petkova4a8a8c2010-07-15 22:21:12 -07009#include "update_engine/omaha_request_params.h"
adlr@google.com3defe6a2009-12-04 20:57:17 +000010#include "update_engine/test_utils.h"
11#include "update_engine/utils.h"
12
13using std::string;
14
15namespace chromeos_update_engine {
16
Darin Petkova4a8a8c2010-07-15 22:21:12 -070017class OmahaRequestDeviceParamsTest : public ::testing::Test {
Darin Petkov5a7f5652010-07-22 21:40:09 -070018 protected:
Darin Petkova4a8a8c2010-07-15 22:21:12 -070019 // Return true iff the OmahaRequestDeviceParams::Init succeeded. If
20 // out is non-NULL, it's set w/ the generated data.
Darin Petkov5a7f5652010-07-22 21:40:09 -070021 bool DoTest(OmahaRequestParams* out, const string& app_version,
22 const string& omaha_url);
23
24 virtual void SetUp() {
25 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc"));
26 ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir +
27 utils::kStatefulPartition + "/etc"));
28 }
29
30 virtual void TearDown() {
31 EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
32 }
33
adlr@google.com3defe6a2009-12-04 20:57:17 +000034 static const string kTestDir;
35};
36
Darin Petkova4a8a8c2010-07-15 22:21:12 -070037const string OmahaRequestDeviceParamsTest::kTestDir =
38 "omaha_request_device_params-test";
adlr@google.com3defe6a2009-12-04 20:57:17 +000039
Darin Petkov5a7f5652010-07-22 21:40:09 -070040bool OmahaRequestDeviceParamsTest::DoTest(OmahaRequestParams* out,
41 const string& app_version,
42 const string& omaha_url) {
Darin Petkova4a8a8c2010-07-15 22:21:12 -070043 OmahaRequestDeviceParams params;
44 params.set_root(string("./") + kTestDir);
Darin Petkov5a7f5652010-07-22 21:40:09 -070045 bool success = params.Init(app_version, omaha_url);
adlr@google.com3defe6a2009-12-04 20:57:17 +000046 if (out)
Darin Petkova4a8a8c2010-07-15 22:21:12 -070047 *out = params;
48 return success;
adlr@google.com3defe6a2009-12-04 20:57:17 +000049}
50
51namespace {
adlr@google.com3defe6a2009-12-04 20:57:17 +000052string GetMachineType() {
53 FILE* fp = popen("uname -m", "r");
54 if (!fp)
55 return "";
56 string ret;
57 for (;;) {
58 char buffer[10];
59 size_t r = fread(buffer, 1, sizeof(buffer), fp);
60 if (r == 0)
61 break;
62 ret.insert(ret.begin(), buffer, buffer + r);
63 }
64 // strip trailing '\n' if it exists
65 if ((*ret.rbegin()) == '\n')
66 ret.resize(ret.size() - 1);
67 fclose(fp);
68 return ret;
69}
70} // namespace {}
71
Darin Petkova4a8a8c2010-07-15 22:21:12 -070072TEST_F(OmahaRequestDeviceParamsTest, SimpleTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070073 ASSERT_TRUE(WriteFileString(
74 kTestDir + "/etc/lsb-release",
75 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
76 "CHROMEOS_RELEASE_FOO=bar\n"
77 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
78 "CHROMEOS_RELEASE_TRACK=footrack\n"
79 "CHROMEOS_AUSERVER=http://www.google.com"));
80 OmahaRequestParams out;
81 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -070082 EXPECT_EQ("Chrome OS", out.os_platform);
83 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
84 EXPECT_EQ("arm-generic", out.os_board);
85 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
86 EXPECT_EQ("0.2.2.3", out.app_version);
87 EXPECT_EQ("en-US", out.app_lang);
88 EXPECT_TRUE(out.delta_okay);
89 EXPECT_EQ("footrack", out.app_track);
90 EXPECT_EQ("http://www.google.com", out.update_url);
adlr@google.com3defe6a2009-12-04 20:57:17 +000091}
92
Darin Petkova4a8a8c2010-07-15 22:21:12 -070093TEST_F(OmahaRequestDeviceParamsTest, MissingTrackTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -070094 ASSERT_TRUE(WriteFileString(
95 kTestDir + "/etc/lsb-release",
96 "CHROMEOS_RELEASE_FOO=bar\n"
97 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
98 "CHROMEOS_RELEASE_TRXCK=footrack"));
99 OmahaRequestParams out;
100 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700101 EXPECT_EQ("Chrome OS", out.os_platform);
102 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
103 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
104 EXPECT_EQ("0.2.2.3", out.app_version);
105 EXPECT_EQ("en-US", out.app_lang);
106 EXPECT_EQ("", out.app_track);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000107}
108
Darin Petkova4a8a8c2010-07-15 22:21:12 -0700109TEST_F(OmahaRequestDeviceParamsTest, ConfusingReleaseTest) {
Darin Petkov5a7f5652010-07-22 21:40:09 -0700110 ASSERT_TRUE(WriteFileString(
111 kTestDir + "/etc/lsb-release",
112 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
113 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
114 "CHROMEOS_RELEASE_TRXCK=footrack"));
115 OmahaRequestParams out;
116 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700117 EXPECT_EQ("Chrome OS", out.os_platform);
118 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
119 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
120 EXPECT_EQ("0.2.2.3", out.app_version);
121 EXPECT_EQ("en-US", out.app_lang);
122 EXPECT_EQ("", out.app_track);
adlr@google.com3defe6a2009-12-04 20:57:17 +0000123}
124
Darin Petkov5a7f5652010-07-22 21:40:09 -0700125TEST_F(OmahaRequestDeviceParamsTest, MissingVersionTest) {
126 ASSERT_TRUE(WriteFileString(
127 kTestDir + "/etc/lsb-release",
128 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
129 "CHROMEOS_RELEASE_FOO=bar\n"
130 "CHROMEOS_RELEASE_TRACK=footrack"));
131 OmahaRequestParams out;
132 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700133 EXPECT_EQ("Chrome OS", out.os_platform);
134 EXPECT_EQ(string("_") + GetMachineType(), out.os_sp);
135 EXPECT_EQ("arm-generic", out.os_board);
136 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
137 EXPECT_EQ("", out.app_version);
138 EXPECT_EQ("en-US", out.app_lang);
139 EXPECT_TRUE(out.delta_okay);
140 EXPECT_EQ("footrack", out.app_track);
141}
142
143TEST_F(OmahaRequestDeviceParamsTest, ForceVersionTest) {
144 ASSERT_TRUE(WriteFileString(
145 kTestDir + "/etc/lsb-release",
146 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
147 "CHROMEOS_RELEASE_FOO=bar\n"
148 "CHROMEOS_RELEASE_TRACK=footrack"));
149 OmahaRequestParams out;
150 EXPECT_TRUE(DoTest(&out, "ForcedVersion", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700151 EXPECT_EQ("Chrome OS", out.os_platform);
152 EXPECT_EQ(string("ForcedVersion_") + GetMachineType(), out.os_sp);
153 EXPECT_EQ("arm-generic", out.os_board);
154 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
155 EXPECT_EQ("ForcedVersion", out.app_version);
156 EXPECT_EQ("en-US", out.app_lang);
157 EXPECT_TRUE(out.delta_okay);
158 EXPECT_EQ("footrack", out.app_track);
159}
160
161TEST_F(OmahaRequestDeviceParamsTest, ForcedURLTest) {
162 ASSERT_TRUE(WriteFileString(
163 kTestDir + "/etc/lsb-release",
164 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
165 "CHROMEOS_RELEASE_FOO=bar\n"
166 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
167 "CHROMEOS_RELEASE_TRACK=footrack"));
168 OmahaRequestParams out;
169 EXPECT_TRUE(DoTest(&out, "", "http://forced.google.com"));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700170 EXPECT_EQ("Chrome OS", out.os_platform);
171 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
172 EXPECT_EQ("arm-generic", out.os_board);
173 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
174 EXPECT_EQ("0.2.2.3", out.app_version);
175 EXPECT_EQ("en-US", out.app_lang);
176 EXPECT_TRUE(out.delta_okay);
177 EXPECT_EQ("footrack", out.app_track);
178 EXPECT_EQ("http://forced.google.com", out.update_url);
179}
180
181TEST_F(OmahaRequestDeviceParamsTest, MissingURLTest) {
182 ASSERT_TRUE(WriteFileString(
183 kTestDir + "/etc/lsb-release",
184 "CHROMEOS_RELEASE_BOARD=arm-generic\n"
185 "CHROMEOS_RELEASE_FOO=bar\n"
186 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
187 "CHROMEOS_RELEASE_TRACK=footrack"));
188 OmahaRequestParams out;
189 EXPECT_TRUE(DoTest(&out, "", ""));
Darin Petkov5a7f5652010-07-22 21:40:09 -0700190 EXPECT_EQ("Chrome OS", out.os_platform);
191 EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
192 EXPECT_EQ("arm-generic", out.os_board);
193 EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
194 EXPECT_EQ("0.2.2.3", out.app_version);
195 EXPECT_EQ("en-US", out.app_lang);
196 EXPECT_TRUE(out.delta_okay);
197 EXPECT_EQ("footrack", out.app_track);
198 EXPECT_EQ(OmahaRequestParams::kUpdateUrl, out.update_url);
Andrew de los Reyes970bb282009-12-09 16:34:04 -0800199}
200
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700201TEST_F(OmahaRequestDeviceParamsTest, NoDeltasTest) {
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700202 ASSERT_TRUE(WriteFileString(
203 kTestDir + "/etc/lsb-release",
204 "CHROMEOS_RELEASE_FOO=CHROMEOS_RELEASE_VERSION=1.2.3.4\n"
205 "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
206 "CHROMEOS_RELEASE_TRXCK=footrack"));
207 ASSERT_TRUE(WriteFileString(kTestDir + "/.nodelta", ""));
208 OmahaRequestParams out;
Darin Petkov5a7f5652010-07-22 21:40:09 -0700209 EXPECT_TRUE(DoTest(&out, "", ""));
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700210 EXPECT_FALSE(out.delta_okay);
Andrew de los Reyes3f0303a2010-07-15 22:35:35 -0700211}
212
adlr@google.com3defe6a2009-12-04 20:57:17 +0000213} // namespace chromeos_update_engine