buffet: Expose RegistrationStatus over DBus

This new property lets applications monitor Buffet's connection to
cloud services.

BUG=brillo:16
TEST=Unittests, buffet_Registration has been expanded appropriately.
CQ-DEPEND=CL:*199337
Change-Id: I30253e8199cb65068a74dd8b780a8ab0954bf9fa
Reviewed-on: https://chromium-review.googlesource.com/250011
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Christopher Wiley <wiley@chromium.org>
Commit-Queue: Christopher Wiley <wiley@chromium.org>
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 10efa6e..5a8a72a 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -146,7 +146,12 @@
       return return_code;
 
     object_manager_.reset(new org::chromium::Buffet::ObjectManagerProxy{bus_});
-    manager_proxy_.reset(new org::chromium::Buffet::ManagerProxy{bus_});
+    auto manager_instances = object_manager_->GetManagerInstances();
+    if (manager_instances.empty()) {
+      fprintf(stderr, "Buffet daemon was offline.");
+      return EX_UNAVAILABLE;
+    }
+    manager_proxy_ = manager_instances.front();
 
     auto args = CommandLine::ForCurrentProcess()->GetArgs();
 
@@ -361,8 +366,8 @@
   }
 
   std::unique_ptr<org::chromium::Buffet::ObjectManagerProxy> object_manager_;
-  std::unique_ptr<org::chromium::Buffet::ManagerProxy> manager_proxy_;
-  int exit_code_ = EX_OK;
+  org::chromium::Buffet::ManagerProxy* manager_proxy_{nullptr};
+  int exit_code_{EX_OK};
 
   DISALLOW_COPY_AND_ASSIGN(Daemon);
 };