AU: Implement switching of tracks through SetTrack.
On official images, update engine allows updating the track
only to dev-channel or beta-channel. The track is verified
both at setting and at getting time.
BUG=8104
TEST=unit test; tested on device
Change-Id: Ic81d4e3a9e09554d2239ee5c7a6c78e4dfe30d19
Review URL: http://codereview.chromium.org/4103002
diff --git a/omaha_request_params_unittest.cc b/omaha_request_params_unittest.cc
index 0150a00..c136e06 100644
--- a/omaha_request_params_unittest.cc
+++ b/omaha_request_params_unittest.cc
@@ -28,12 +28,16 @@
ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc"));
ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir +
utils::kStatefulPartition + "/etc"));
+ params_.set_root(string("./") + kTestDir);
+ params_.SetBuildTypeOfficial(false);
}
virtual void TearDown() {
EXPECT_EQ(0, System(string("rm -rf ") + kTestDir));
}
+ OmahaRequestDeviceParams params_;
+
static const string kTestDir;
};
@@ -43,11 +47,9 @@
bool OmahaRequestDeviceParamsTest::DoTest(OmahaRequestParams* out,
const string& app_version,
const string& omaha_url) {
- OmahaRequestDeviceParams params;
- params.set_root(string("./") + kTestDir);
- bool success = params.Init(app_version, omaha_url);
+ bool success = params_.Init(app_version, omaha_url);
if (out)
- *out = params;
+ *out = params_;
return success;
}
@@ -227,4 +229,157 @@
EXPECT_EQ("sample hardware class", out.hardware_class);
}
+TEST_F(OmahaRequestDeviceParamsTest, OverrideTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=footrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=x86-generic\n"
+ "CHROMEOS_RELEASE_TRACK=bartrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("Chrome OS", out.os_platform);
+ EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
+ EXPECT_EQ("x86-generic", out.os_board);
+ EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
+ EXPECT_EQ("0.2.2.3", out.app_version);
+ EXPECT_EQ("en-US", out.app_lang);
+ EXPECT_EQ("", out.hardware_class);
+ EXPECT_TRUE(out.delta_okay);
+ EXPECT_EQ("bartrack", out.app_track);
+ EXPECT_EQ("http://www.google.com", out.update_url);
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, SetTrackSimpleTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=footrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ {
+ OmahaRequestDeviceParams params;
+ params.set_root(string("./") + kTestDir);
+ params.SetBuildTypeOfficial(false);
+ EXPECT_TRUE(params.Init("", ""));
+ params.SetTrack("zootrack");
+ }
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("arm-generic", out.os_board);
+ EXPECT_EQ("zootrack", out.app_track);
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, SetTrackPreserveTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=footrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + utils::kStatefulPartition + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=x86-generic\n"
+ "CHROMEOS_RELEASE_TRACK=bartrack"));
+ {
+ OmahaRequestDeviceParams params;
+ params.set_root(string("./") + kTestDir);
+ params.SetBuildTypeOfficial(false);
+ EXPECT_TRUE(params.Init("", ""));
+ params.SetTrack("zootrack");
+ }
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("x86-generic", out.os_board);
+ EXPECT_EQ("zootrack", out.app_track);
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, SetTrackInvalidTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=footrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ {
+ OmahaRequestDeviceParams params;
+ params.set_root(string("./") + kTestDir);
+ params.SetBuildTypeOfficial(true);
+ EXPECT_TRUE(params.Init("", ""));
+ params.SetTrack("zootrack");
+ }
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("arm-generic", out.os_board);
+ EXPECT_EQ("footrack", out.app_track);
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, IsValidTrackTest) {
+ params_.SetBuildTypeOfficial(true);
+ EXPECT_TRUE(params_.IsValidTrack("beta-channel"));
+ EXPECT_TRUE(params_.IsValidTrack("dev-channel"));
+ EXPECT_FALSE(params_.IsValidTrack("some-channel"));
+ EXPECT_FALSE(params_.IsValidTrack(""));
+ params_.SetBuildTypeOfficial(false);
+ EXPECT_TRUE(params_.IsValidTrack("beta-channel"));
+ EXPECT_TRUE(params_.IsValidTrack("dev-channel"));
+ EXPECT_TRUE(params_.IsValidTrack("some-channel"));
+ EXPECT_TRUE(params_.IsValidTrack(""));
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, InvalidTrackTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=footrack\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ params_.SetBuildTypeOfficial(true);
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("Chrome OS", out.os_platform);
+ EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
+ EXPECT_EQ("arm-generic", out.os_board);
+ EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
+ EXPECT_EQ("0.2.2.3", out.app_version);
+ EXPECT_EQ("en-US", out.app_lang);
+ EXPECT_EQ("", out.hardware_class);
+ EXPECT_TRUE(out.delta_okay);
+ EXPECT_EQ("", out.app_track);
+ EXPECT_EQ("http://www.google.com", out.update_url);
+}
+
+TEST_F(OmahaRequestDeviceParamsTest, ValidTrackTest) {
+ ASSERT_TRUE(WriteFileString(
+ kTestDir + "/etc/lsb-release",
+ "CHROMEOS_RELEASE_BOARD=arm-generic\n"
+ "CHROMEOS_RELEASE_FOO=bar\n"
+ "CHROMEOS_RELEASE_VERSION=0.2.2.3\n"
+ "CHROMEOS_RELEASE_TRACK=dev-channel\n"
+ "CHROMEOS_AUSERVER=http://www.google.com"));
+ params_.SetBuildTypeOfficial(true);
+ OmahaRequestParams out;
+ EXPECT_TRUE(DoTest(&out, "", ""));
+ EXPECT_EQ("Chrome OS", out.os_platform);
+ EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp);
+ EXPECT_EQ("arm-generic", out.os_board);
+ EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id);
+ EXPECT_EQ("0.2.2.3", out.app_version);
+ EXPECT_EQ("en-US", out.app_lang);
+ EXPECT_EQ("", out.hardware_class);
+ EXPECT_TRUE(out.delta_okay);
+ EXPECT_EQ("dev-channel", out.app_track);
+ EXPECT_EQ("http://www.google.com", out.update_url);
+}
+
} // namespace chromeos_update_engine