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));