shill: DHCPClient: Output status metrics

Output metrics about the DHCP client status whenever this state
changes.  This will allow us track aggregate activity so we can
track the efficacy of the various DHCP client features.

BUG=chromium:384897
TEST=Unit tests + manual: restart shill and browse to chrome://histograms

Change-Id: I8e9628243c8b9b6e8bd0270e86795737a2f75846
Reviewed-on: https://chromium-review.googlesource.com/208825
Reviewed-by: Peter Qiu <zqiu@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcp_config_unittest.cc b/dhcp_config_unittest.cc
index 3b4d353..255a7a1 100644
--- a/dhcp_config_unittest.cc
+++ b/dhcp_config_unittest.cc
@@ -20,6 +20,7 @@
 #include "shill/mock_dhcp_proxy.h"
 #include "shill/mock_glib.h"
 #include "shill/mock_log.h"
+#include "shill/mock_metrics.h"
 #include "shill/mock_minijail.h"
 #include "shill/mock_proxy_factory.h"
 #include "shill/property_store_unittest.h"
@@ -56,6 +57,7 @@
   DHCPConfigTest()
       : proxy_(new MockDHCPProxy()),
         minijail_(new MockMinijail()),
+        metrics_(dispatcher()),
         config_(new DHCPConfig(&control_,
                                dispatcher(),
                                DHCPProvider::GetInstance(),
@@ -63,7 +65,8 @@
                                kHostName,
                                kLeaseFileSuffix,
                                kArpGateway,
-                               glib())) {}
+                               glib(),
+                               &metrics_)) {}
 
   virtual void SetUp() {
     config_->proxy_factory_ = &proxy_factory_;
@@ -99,6 +102,7 @@
   MockProxyFactory proxy_factory_;
   MockControl control_;
   scoped_ptr<MockMinijail> minijail_;
+  MockMetrics metrics_;
   DHCPConfigRefPtr config_;
 };
 
@@ -116,7 +120,8 @@
                                          hostname,
                                          lease_suffix,
                                          arp_gateway,
-                                         glib()));
+                                         glib(),
+                                         &metrics_));
   config->minijail_ = minijail_.get();
 
   return config;
@@ -132,7 +137,8 @@
                                          hostname,
                                          lease_suffix,
                                          arp_gateway,
-                                         glib()));
+                                         glib(),
+                                         &metrics_));
   config->minijail_ = minijail_.get();
   EXPECT_CALL(*minijail_, RunAndDestroy(_, _, _))
       .WillOnce(DoAll(SetArgumentPointee<2>(kPID), Return(true)));
@@ -743,4 +749,10 @@
   EXPECT_EQ(invalid_args(), error.name());
 }
 
+TEST_F(DHCPConfigTest, ProcessStatusChangeSingal) {
+  EXPECT_CALL(metrics_, NotifyDhcpClientStatus(
+      Metrics::kDhcpClientStatusBound));
+  config_->ProcessStatusChangeSignal(DHCPConfig::kStatusBound);
+}
+
 }  // namespace shill