15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import chromeos_network  # pyauto_functional must come before chromeos_network
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeosWifiCompliance(chromeos_network.PyNetworkUITest):
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """Tests for ChromeOS wifi complaince.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  These tests should be run within vacinity of the power strip where the wifi
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  routers are attached.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  """
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _BasicConnectRouterCompliance(self, router_name):
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Generic basic test routine for connecting to a router.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Args:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      router_name: The name of the router.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.InitWifiPowerStrip()
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    router = self.GetRouterConfig(router_name)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.RouterPower(router_name, True)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # If the wifi network is expected to be invisible, the following
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # line should timeout which is expected.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    wifi_visible = self.WaitUntilWifiNetworkAvailable(router['ssid'],
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 is_hidden=router.get('hidden'))
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Note, we expect wifi_visible and 'hidden' status to be opposites.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # The test fails if the network visibility is not as expected.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if wifi_visible == router.get('hidden', False):
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      self.fail('We expected wifi network "%s" to be %s, but it was not.' %
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                (router['ssid'],
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 {True: 'hidden', False: 'visible'}[router.get('hidden',
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 False)]))
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Verify connect did not have any errors.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    error = self.ConnectToWifiRouter(router_name)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertFalse(error, 'Failed to connect to wifi network %s. '
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            'Reason: %s.' % (router['ssid'], error))
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Verify the network we connected to.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ssid = self.GetConnectedWifi()
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(ssid, router['ssid'],
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     'Did not successfully connect to wifi network %s.' % ssid)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.DisconnectFromWifiNetwork()
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectBelkinG(self):
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Belkin G router."""
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Belkin_G')
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectBelkinNPlus(self):
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Belkin N+ router."""
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Belkin_N+')
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectDLinkN150(self):
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the D-Link N150 router."""
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('D-Link_N150')
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectLinksysE3000(self):
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Linksys E3000 router.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The LinksysE3000 supports broadcasting of up to 2 SSID's.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    This test will try connecting to each of them one at a time.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('LinksysE3000')
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('LinksysE3000_2')
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectLinksysWRT54G2(self):
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Linksys WRT54G2 router."""
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Linksys_WRT54G2')
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectLinksysWRT54GL(self):
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the LinksysWRT54GL router."""
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Linksys_WRT54GL')
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectNetgearN300(self):
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Netgear N300 router."""
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Netgear_N300')
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectNetgearWGR614(self):
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Netgear WGR 614 router."""
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Netgear_WGR614')
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectNfiniti(self):
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Nfiniti router."""
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Nfiniti')
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectSMCWBR145(self):
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the SMC WBR 145 router."""
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('SMC_WBR145')
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testConnectTrendnet_639gr(self):
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """Test connecting to the Trendnet 639gr router.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    The LinksysE3000 supports broadcasting of up to 4 SSID's.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    This test will try connecting to each of them one at a time.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    """
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Trendnet_639gr')
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Trendnet_639gr_2')
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Trendnet_639gr_3')
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._BasicConnectRouterCompliance('Trendnet_639gr_4')
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pyauto_functional.Main()
111