| #!/usr/bin/env python |
| # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| |
| import pyauto_functional |
| import pyauto |
| import chromeos_network |
| |
| |
| class PrivateNetworkTest(chromeos_network.PyNetworkUITest): |
| """Tests for VPN. |
| |
| Expected to be run with access to the lab setup as defined in |
| vpn_testbed_config. |
| """ |
| |
| def _PingTest(self, hostname, timeout=10): |
| """Attempt to ping a remote host. |
| |
| Returns: |
| True if the ping succeeds. |
| False otherwise. |
| """ |
| return subprocess.call(['ping', '-c', '1', '-W', |
| str(timeout), hostname]) == 0 |
| |
| def testCanAddNetwork(self): |
| """Test to add a VPN network, connect and disconnect.""" |
| # Load VPN config data from file. |
| vpn_info_file = os.path.join(pyauto.PyUITest.DataDir(), |
| 'pyauto_private/chromeos/network', |
| 'vpn_testbed_config') |
| self.assertTrue(os.path.exists(vpn_info_file)) |
| vpn = self.EvalDataFrom(vpn_info_file) |
| |
| # Connect to wifi. |
| self.NetworkScan() |
| self.WaitUntilWifiNetworkAvailable(vpn['wifi']) |
| wifi_vpn = self.GetServicePath(vpn['wifi']) |
| self.assertTrue(wifi_vpn) |
| self.assertTrue(self.ConnectToWifiNetwork(wifi_vpn) is None) |
| self.assertFalse(self._PingTest(vpn['ping']), |
| msg='VPN ping succeeded when not connected.') |
| |
| # Connect to the VPN. |
| self.AddPrivateNetwork(hostname=vpn['hostname'], |
| service_name=vpn['service_name'], |
| provider_type=vpn['provider_type'], |
| username=vpn['username'], |
| password=vpn['password'], |
| key=vpn['key']) |
| |
| # Get private network info. |
| result = self.GetPrivateNetworkInfo() |
| self.assertTrue('connected' in result, msg='Could not connect to VPN') |
| connected = result['connected'] |
| self.assertTrue(self._PingTest(vpn['ping']), msg='VPN ping failed.') |
| self.DisconnectFromPrivateNetwork() |
| self.assertFalse(self._PingTest(vpn['ping']), |
| msg='VPN ping succeeded when not connected.') |
| # Connect to the remembered private network. |
| self.ConnectToPrivateNetwork(connected) |
| self.assertTrue(self._PingTest(vpn['ping']), msg='VPN ping failed.') |
| self.DisconnectFromPrivateNetwork() |
| self.assertFalse(self._PingTest(vpn['ping']), |
| msg='VPN ping succeeded when not connected.') |
| |
| |
| if __name__ == '__main__': |
| pyauto_functional.Main() |