shill: vpn: Disconnect the VPN device to reset the connection on Cleanup.

BUG=chromium-os:29631
TEST=unit tests, tested logging out with connected OpenVPN service

Change-Id: Id24e6229a0af82c83f60eda4bc1f072f02a25df4
Reviewed-on: https://gerrit.chromium.org/gerrit/20454
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/openvpn_driver.cc b/openvpn_driver.cc
index 8224afa..4b31235 100644
--- a/openvpn_driver.cc
+++ b/openvpn_driver.cc
@@ -152,6 +152,7 @@
   rpc_task_.reset();
   if (device_) {
     int interface_index = device_->interface_index();
+    device_->OnDisconnected();
     device_->SetEnabled(false);
     device_ = NULL;
     device_info_->DeleteInterface(interface_index);
diff --git a/openvpn_driver_unittest.cc b/openvpn_driver_unittest.cc
index 080dbf2..ee73ffc 100644
--- a/openvpn_driver_unittest.cc
+++ b/openvpn_driver_unittest.cc
@@ -548,6 +548,7 @@
   EXPECT_CALL(*management_server_, Stop()).Times(2);
   EXPECT_CALL(glib_, SourceRemove(kTag));
   EXPECT_CALL(glib_, SpawnClosePID(kPID));
+  EXPECT_CALL(*device_, OnDisconnected());
   EXPECT_CALL(*device_, SetEnabled(false));
   EXPECT_CALL(device_info_, DeleteInterface(kInterfaceIndex));
   EXPECT_CALL(*service_, SetState(Service::kStateFailure));
@@ -599,6 +600,7 @@
 TEST_F(OpenVPNDriverTest, Disconnect) {
   driver_->device_ = device_;
   driver_->service_ = service_;
+  EXPECT_CALL(*device_, OnDisconnected());
   EXPECT_CALL(*device_, SetEnabled(false));
   EXPECT_CALL(device_info_, DeleteInterface(kInterfaceIndex));
   EXPECT_CALL(*service_, SetState(Service::kStateIdle));