buffet: Stub for StartDevice method.

This introduces StartDevice method with stub implementation
and allows buffet_client to invoke it.

BUG=None
TEST=cros_workon_make buffet --test and manual.

Change-Id: I3f89ed3fc735c0521041484bb9fdebc43d9d4b79
Reviewed-on: https://chromium-review.googlesource.com/220771
Commit-Queue: Anton Muhin <antonm@chromium.org>
Tested-by: Anton Muhin <antonm@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index bde5abe..f8ef56e 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -38,6 +38,7 @@
 void usage() {
   std::cerr << "Possible commands:" << std::endl;
   std::cerr << "  " << kManagerTestMethod << " <message>" << std::endl;
+  std::cerr << "  " << kManagerStartDevice << std::endl;
   std::cerr << "  " << kManagerCheckDeviceRegistered << std::endl;
   std::cerr << "  " << kManagerGetDeviceInfo << std::endl;
   std::cerr << "  " << kManagerStartRegisterDevice
@@ -88,6 +89,26 @@
     return EX_OK;
   }
 
+  int CallManagerStartDevice(const CommandLine::StringVector& args) {
+    if (!args.empty()) {
+      std::cerr << "Invalid number of arguments for "
+                << "Manager." << kManagerStartDevice << std::endl;
+      usage();
+      return EX_USAGE;
+    }
+
+    ErrorPtr error;
+    auto response = CallMethodAndBlock(
+        manager_proxy_,
+        kManagerInterface, kManagerStartDevice, &error);
+    if (!response || !ExtractMethodCallResults(response.get(), &error)) {
+      std::cout << "Failed to receive a response:"
+                << error->GetMessage() << std::endl;
+      return EX_UNAVAILABLE;
+    }
+    return EX_OK;
+  }
+
   int CallManagerCheckDeviceRegistered(const CommandLine::StringVector& args) {
     if (!args.empty()) {
       std::cerr << "Invalid number of arguments for "
@@ -298,6 +319,9 @@
 
   if (command.compare(kManagerTestMethod) == 0) {
     err = helper.CallTestMethod(args);
+  } else if (command.compare(kManagerStartDevice) == 0 ||
+             command.compare("sd") == 0) {
+    err = helper.CallManagerStartDevice(args);
   } else if (command.compare(kManagerCheckDeviceRegistered) == 0 ||
              command.compare("cr") == 0) {
     err = helper.CallManagerCheckDeviceRegistered(args);
diff --git a/buffet/libbuffet/dbus_constants.cc b/buffet/libbuffet/dbus_constants.cc
index be5c16c..fba4c79 100644
--- a/buffet/libbuffet/dbus_constants.cc
+++ b/buffet/libbuffet/dbus_constants.cc
@@ -15,6 +15,7 @@
 const char kManagerInterface[] = "org.chromium.Buffet.Manager";
 const char kManagerServicePath[] = "/org/chromium/Buffet/Manager";
 
+const char kManagerStartDevice[]            = "StartDevice";
 const char kManagerCheckDeviceRegistered[]  = "CheckDeviceRegistered";
 const char kManagerGetDeviceInfo[]          = "GetDeviceInfo";
 const char kManagerStartRegisterDevice[]    = "StartRegisterDevice";
diff --git a/buffet/libbuffet/dbus_constants.h b/buffet/libbuffet/dbus_constants.h
index 5890d36..0d0c63b 100644
--- a/buffet/libbuffet/dbus_constants.h
+++ b/buffet/libbuffet/dbus_constants.h
@@ -22,6 +22,7 @@
 LIBBUFFET_EXPORT extern const char kManagerServicePath[];
 
 // Methods exposed as part of kManagerInterface.
+LIBBUFFET_EXPORT extern const char kManagerStartDevice[];
 LIBBUFFET_EXPORT extern const char kManagerCheckDeviceRegistered[];
 LIBBUFFET_EXPORT extern const char kManagerGetDeviceInfo[];
 LIBBUFFET_EXPORT extern const char kManagerStartRegisterDevice[];
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 10d36cf..01716f4 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -36,6 +36,9 @@
 void Manager::RegisterAsync(const AsyncEventSequencer::CompletionAction& cb) {
   chromeos::dbus_utils::DBusInterface* itf =
       dbus_object_.AddOrGetInterface(dbus_constants::kManagerInterface);
+  itf->AddMethodHandler(dbus_constants::kManagerStartDevice,
+                        base::Unretained(this),
+                        &Manager::HandleStartDevice);
   itf->AddMethodHandler(dbus_constants::kManagerCheckDeviceRegistered,
                         base::Unretained(this),
                         &Manager::HandleCheckDeviceRegistered);
@@ -68,6 +71,11 @@
   device_info_->Load();
 }
 
+void Manager::HandleStartDevice(chromeos::ErrorPtr* error) {
+  LOG(INFO) << "Received call to Manager.StartDevice()";
+  LOG(INFO) << "Not implemented";
+}
+
 std::string Manager::HandleCheckDeviceRegistered(chromeos::ErrorPtr* error) {
   LOG(INFO) << "Received call to Manager.CheckDeviceRegistered()";
   std::string device_id;
diff --git a/buffet/manager.h b/buffet/manager.h
index 4648b95..8d7ab13 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -43,6 +43,8 @@
 
  private:
   // DBus methods:
+  // Handles calls to org.chromium.Buffet.Manager.StartDevice().
+  void HandleStartDevice(chromeos::ErrorPtr* error);
   // Handles calls to org.chromium.Buffet.Manager.CheckDeviceRegistered().
   std::string HandleCheckDeviceRegistered(chromeos::ErrorPtr* error);
   // Handles calls to org.chromium.Buffet.Manager.GetDeviceInfo().