blob: 58d397ae749773d8155fe3c85b35db6b3743d7be [file] [log] [blame] [edit]
# Copyright (c) 2013 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 ap_spec
import trendnet692gr_ap_configurator
import time
class Trendnet812druAPConfigurator(trendnet692gr_ap_configurator.
Trendnet692grAPConfigurator):
"""Derived class to control the Trendnet TEW-812DRU."""
def _alert_handler(self, alert):
"""
Checks for any modal dialogs which popup to alert the user and
either raises a RuntimeError or ignores the alert.
@param alert: The modal dialog's contents.
"""
text = alert.text
if 'WPS in Open security' in text:
alert.accept()
else:
raise RuntimeError('An unexpected alert was thrown: %s' % text)
def get_supported_modes(self):
return [{'band': ap_spec.BAND_2GHZ, 'modes': [ap_spec.MODE_N]},
{'band': ap_spec.BAND_5GHZ, 'modes': [ap_spec.MODE_N]}]
def is_security_mode_supported(self, security_mode):
"""
Returns if a given security_type is supported.
@param security_mode: one security modes defined in the APSpec
@return True if the security mode is supported; False otherwise.
"""
return security_mode in (ap_spec.SECURITY_TYPE_DISABLED,
ap_spec.SECURITY_TYPE_WEP,
ap_spec.SECURITY_TYPE_WPAPSK,
ap_spec.SECURITY_TYPE_WPA2PSK)
def navigate_to_page(self, page_number):
"""Navigates to the given page.
@param page_number: the page to navigate to.
"""
# All settings are on the same page, so we always open the config page
if self.current_band == ap_spec.BAND_2GHZ:
if page_number == 1:
page_url = os.path.join(self.admin_interface_url ,
'wireless/basic.asp?wl_unit=0')
elif page_number == 2:
page_url = os.path.join(self.admin_interface_url ,
'wireless/security.asp?wl_unit=0')
else:
raise RuntimeError('Invalid page number passed. Number of pages'
'%d, page value sent was %d' %
(self.get_number_of_pages(), page_number))
elif self.current_band == ap_spec.BAND_5GHZ:
if page_number == 1:
page_url = os.path.join(self.admin_interface_url ,
'wireless/basic.asp?wl_unit=1')
elif page_number == 2:
page_url = os.path.join(self.admin_interface_url ,
'wireless/security.asp?wl_unit=1')
else:
raise RuntimeError('Invalid page number passed. Number of pages'
'%d, page value sent was %d' %
(self.get_number_of_pages(), page_number))
else:
raise RuntimeError('Incorrect band band = %s' % self.current_band)
self.get_url(page_url, page_title='TEW-812DRU')
def _set_ssid(self, ssid):
xpath = '//input[@maxlength="32" and @name="wl_ssid"]'
self.set_content_of_text_field_by_xpath(ssid, xpath, abort_check=True)
self._ssid = ssid
def _set_mode(self, mode, band=None):
# Different bands are not supported so we ignore.
# Create the mode to popup item mapping
mode_mapping = {ap_spec.MODE_N: 'Auto'}
mode_name = ''
if mode in mode_mapping.keys():
mode_name = mode_mapping[mode]
else:
raise RuntimeError('The mode selected %s is not supported by router'
' %s.', ap_spec.mode_string_for_mode(mode),
self.name)
xpath = '//select[@name="wl_nmode"]'
while self.number_of_items_in_popup_by_xpath(xpath) < 2:
time.sleep(0.25)
self.select_item_from_popup_by_xpath(mode_name, xpath)
def set_radio(self, enabled=True):
self.add_item_to_command_list(self._set_radio, (enabled, ), 1, 200)
def _set_radio(self, enabled=True):
xpath = '//select[@name="wl_bss_enabled"]'
if enabled:
self.select_item_from_popup_by_xpath('On', xpath)
else:
self.select_item_from_popup_by_xpath('Off', xpath)
def _set_visibility(self, visible=True):
xpath = '//select[@name="wl_closed"]'
if visible:
self.select_item_from_popup_by_xpath('Enabled', xpath)
else:
self.select_item_from_popup_by_xpath('Disabled', xpath)
def _set_channel(self, channel):
position = self._get_channel_popup_position(channel)
xpath = '//select[@name="wl_chanspec"]'
channel_choices_2GHZ = ['Auto', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11']
channel_choices_5GHZ = ['Auto', '36', '40', '44', '48', '149', '153',
'157', '161']
if self.current_band == ap_spec.BAND_2GHZ:
self.select_item_from_popup_by_xpath(channel_choices_2GHZ[position],
xpath)
else:
self.select_item_from_popup_by_xpath(channel_choices_5GHZ[position],
xpath)
def _set_security_wpapsk(self, security, shared_key, update_interval=1800):
self.wait_for_object_by_id('security_mode')
if security == ap_spec.SECURITY_TYPE_WPAPSK:
wpa_item = 'WPA-PSK'
else:
wpa_item = 'WPA2-PSK'
self.select_item_from_popup_by_id(wpa_item, 'security_mode',
wait_for_xpath='id("wpaPassphrase")')
self.set_content_of_text_field_by_id(shared_key, 'wpaPassphrase')
self.set_content_of_text_field_by_id(update_interval,
'rotationInterval')