update_engine: Template specialized UpdateManager interface for mockability
This change is to create an interface that is for testing
|UpdateManager|. Currently the |UpdateMaanger| exists by having two main
member functions that are templatized allowing for a generic set of
policy methods to be passed in taking a abitrary set of arguments. The
downside of this design is the difficulty when testing such a class.
Next steps are to refactor |Policy| and |UpdateManager| to exist
together without the need for templatized member function within
|UpdateManager| as the whole set of policy methods that can be passed in
are already determined (UpdateCheckAllowed, UpdateCanBeApplied,
UpdateCanStart, UpdateDownloadAllowed, P2PEnabled, P2PEnabledChanged).
The issue is that these functions each take a different set of arguments
and can probably be combined into one generic set of arguments making
the |UpdateManager| much simpler to manage.
BUG=chromium:924165
TEST=unittests
TEST=FEATURES="test" emerge-${BOARD} update_engine
Change-Id: Ia8091495079f9324bccf5e717d5f26ea7ef24514
diff --git a/update_manager/update_manager.cc b/update_manager/update_manager.cc
index 5dfc09c..0069496 100644
--- a/update_manager/update_manager.cc
+++ b/update_manager/update_manager.cc
@@ -50,6 +50,13 @@
ec->RemoveObserversAndTimeout();
}
+void UpdateManager::AsyncPolicyRequestUpdateCheckAllowed(
+ base::Callback<void(EvalStatus, const UpdateCheckParams& result)> callback,
+ EvalStatus (Policy::*policy_method)(
+ EvaluationContext*, State*, std::string*, UpdateCheckParams*) const) {
+ AsyncPolicyRequest(callback, policy_method);
+}
+
void UpdateManager::UnregisterEvalContext(EvaluationContext* ec) {
if (!ec_repo_.erase(ec)) {
LOG(ERROR) << "Unregistering an unknown evaluation context, this is a bug.";