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.h b/omaha_request_params.h
index 551a3a3..d7d2493 100644
--- a/omaha_request_params.h
+++ b/omaha_request_params.h
@@ -7,7 +7,8 @@
#include <string>
-#include "base/basictypes.h"
+#include <base/basictypes.h>
+#include <gtest/gtest_prod.h> // for FRIEND_TEST
// This gathers local system information and prepares info used by the
// Omaha request action.
@@ -55,6 +56,8 @@
std::string update_url;
+ static const char kUpdateTrackKey[];
+
// Suggested defaults
static const char* const kAppId;
static const char* const kOsPlatform;
@@ -64,7 +67,7 @@
class OmahaRequestDeviceParams : public OmahaRequestParams {
public:
- OmahaRequestDeviceParams() {}
+ OmahaRequestDeviceParams();
// Initializes all the data in the object. Non-empty
// |in_app_version| or |in_update_url| prevents automatic detection
@@ -72,15 +75,40 @@
bool Init(const std::string& in_app_version,
const std::string& in_update_url);
+ // Permanently changes the release track to |track|. Returns true on success,
+ // false otherwise.
+ bool SetTrack(const std::string& track);
+ static bool SetDeviceTrack(const std::string& track);
+
// For unit-tests.
void set_root(const std::string& root) { root_ = root; }
+ // Force build type for testing purposes.
+ void SetBuildTypeOfficial(bool is_official);
+
private:
+ FRIEND_TEST(OmahaRequestDeviceParamsTest, IsValidTrackTest);
+
+ // Use a validator that is a non-static member of this class so that its
+ // inputs can be mocked in unit tests (e.g., build type for IsValidTrack).
+ typedef bool(OmahaRequestDeviceParams::*ValueValidator)(
+ const std::string&) const;
+
+ // Returns true if this is an official build, false otherwise.
+ bool IsOfficialBuild() const;
+
+ // Returns true if |track| is a valid track, false otherwise. This method
+ // restricts the track value only if the image is official (see
+ // IsOfficialBuild).
+ bool IsValidTrack(const std::string& track) const;
+
// Fetches the value for a given key from
- // /mnt/stateful_partition/etc/lsb-release if possible. Failing that,
- // it looks for the key in /etc/lsb-release.
+ // /mnt/stateful_partition/etc/lsb-release if possible. Failing that, it looks
+ // for the key in /etc/lsb-release. If |validator| is non-NULL, uses it to
+ // validate and ignore invalid valies.
std::string GetLsbValue(const std::string& key,
- const std::string& default_value) const;
+ const std::string& default_value,
+ ValueValidator validator) const;
// Gets the machine type (e.g. "i686").
std::string GetMachineType() const;
@@ -92,6 +120,10 @@
// When reading files, prepend root_ to the paths. Useful for testing.
std::string root_;
+ // Force build type for testing purposes.
+ bool force_build_type_;
+ bool forced_official_build_;
+
DISALLOW_COPY_AND_ASSIGN(OmahaRequestDeviceParams);
};