1#!/usr/bin/env python
2# Copyright (c) 2011 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import pyauto_functional
7import chromeos_network  # pyauto_functional must come before chromeos_network
8
9
10class ChromeosWifiCompliance(chromeos_network.PyNetworkUITest):
11  """Tests for ChromeOS wifi complaince.
12
13  These tests should be run within vacinity of the power strip where the wifi
14  routers are attached.
15  """
16
17  def _BasicConnectRouterCompliance(self, router_name):
18    """Generic basic test routine for connecting to a router.
19
20    Args:
21      router_name: The name of the router.
22    """
23    self.InitWifiPowerStrip()
24    router = self.GetRouterConfig(router_name)
25    self.RouterPower(router_name, True)
26
27    # If the wifi network is expected to be invisible, the following
28    # line should timeout which is expected.
29    wifi_visible = self.WaitUntilWifiNetworkAvailable(router['ssid'],
30                                                 is_hidden=router.get('hidden'))
31
32    # Note, we expect wifi_visible and 'hidden' status to be opposites.
33    # The test fails if the network visibility is not as expected.
34    if wifi_visible == router.get('hidden', False):
35      self.fail('We expected wifi network "%s" to be %s, but it was not.' %
36                (router['ssid'],
37                 {True: 'hidden', False: 'visible'}[router.get('hidden',
38                 False)]))
39
40    # Verify connect did not have any errors.
41    error = self.ConnectToWifiRouter(router_name)
42    self.assertFalse(error, 'Failed to connect to wifi network %s. '
43                            'Reason: %s.' % (router['ssid'], error))
44
45    # Verify the network we connected to.
46    ssid = self.GetConnectedWifi()
47    self.assertEqual(ssid, router['ssid'],
48                     'Did not successfully connect to wifi network %s.' % ssid)
49
50    self.DisconnectFromWifiNetwork()
51
52  def testConnectBelkinG(self):
53    """Test connecting to the Belkin G router."""
54    self._BasicConnectRouterCompliance('Belkin_G')
55
56  def testConnectBelkinNPlus(self):
57    """Test connecting to the Belkin N+ router."""
58    self._BasicConnectRouterCompliance('Belkin_N+')
59
60  def testConnectDLinkN150(self):
61    """Test connecting to the D-Link N150 router."""
62    self._BasicConnectRouterCompliance('D-Link_N150')
63
64  def testConnectLinksysE3000(self):
65    """Test connecting to the Linksys E3000 router.
66
67    The LinksysE3000 supports broadcasting of up to 2 SSID's.
68    This test will try connecting to each of them one at a time.
69    """
70    self._BasicConnectRouterCompliance('LinksysE3000')
71    self._BasicConnectRouterCompliance('LinksysE3000_2')
72
73  def testConnectLinksysWRT54G2(self):
74    """Test connecting to the Linksys WRT54G2 router."""
75    self._BasicConnectRouterCompliance('Linksys_WRT54G2')
76
77  def testConnectLinksysWRT54GL(self):
78    """Test connecting to the LinksysWRT54GL router."""
79    self._BasicConnectRouterCompliance('Linksys_WRT54GL')
80
81  def testConnectNetgearN300(self):
82    """Test connecting to the Netgear N300 router."""
83    self._BasicConnectRouterCompliance('Netgear_N300')
84
85  def testConnectNetgearWGR614(self):
86    """Test connecting to the Netgear WGR 614 router."""
87    self._BasicConnectRouterCompliance('Netgear_WGR614')
88
89  def testConnectNfiniti(self):
90    """Test connecting to the Nfiniti router."""
91    self._BasicConnectRouterCompliance('Nfiniti')
92
93  def testConnectSMCWBR145(self):
94    """Test connecting to the SMC WBR 145 router."""
95    self._BasicConnectRouterCompliance('SMC_WBR145')
96
97  def testConnectTrendnet_639gr(self):
98    """Test connecting to the Trendnet 639gr router.
99
100    The LinksysE3000 supports broadcasting of up to 4 SSID's.
101    This test will try connecting to each of them one at a time.
102    """
103    self._BasicConnectRouterCompliance('Trendnet_639gr')
104    self._BasicConnectRouterCompliance('Trendnet_639gr_2')
105    self._BasicConnectRouterCompliance('Trendnet_639gr_3')
106    self._BasicConnectRouterCompliance('Trendnet_639gr_4')
107
108
109if __name__ == '__main__':
110  pyauto_functional.Main()
111