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