Home | History | Annotate | Download | only in ap_configurators
      1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import ap_spec
      6 import trendnet_ap_configurator
      7 
      8 
      9 class Trendnet731brAPConfigurator(trendnet_ap_configurator.
     10                                   TrendnetAPConfigurator):
     11     """Derived class to control the Trendnet TEW-731BR."""
     12 
     13     def navigate_to_page(self, page_number):
     14         """Navigate to the given page.
     15 
     16         @param page_number: the page to navigate to.
     17         """
     18         self.navigate_to_login_page()
     19         if page_number == 1:
     20             page_url = ''.join([self.admin_interface_url,
     21                                   "/wireless_basic.htm"])
     22             self.get_url(page_url, page_title='TRENDNET')
     23         if page_number == 2:
     24             page_url = ''.join([self.admin_interface_url,
     25                                   "/wireless_auth.htm"])
     26             self.get_url(page_url, page_title='TRENDNET')
     27 
     28 
     29     def navigate_to_login_page(self):
     30         """
     31         We need to login first in order to configure settings.
     32         """
     33         self.get_url(self.admin_interface_url, page_title='Login')
     34         self.wait_for_object_by_id('login_n')
     35         self.set_content_of_text_field_by_id('admin', 'login_n',
     36                                                  abort_check=True)
     37         self.set_content_of_text_field_by_id('password', 'login_pass',
     38                                                 abort_check=True)
     39         self.click_button_by_xpath('//input[@value="Login"]')
     40 
     41 
     42     def _set_ssid(self, ssid):
     43         self.set_content_of_text_field_by_id(ssid, 'show_ssid')
     44         self._ssid = ssid
     45 
     46 
     47     def save_page(self, page_number):
     48         """Save the settings of the passed in page.
     49 
     50         @param page_number: the page to save.
     51         """
     52         if page_number == 1:
     53             xpath = ('//input[@type="button" and @value="Apply"]')
     54         elif page_number == 2:
     55             xpath = ('//input[@type="button" and @value="Apply"]')
     56         self.click_button_by_xpath(xpath, alert_handler=self._alert_handler)
     57         xpath = ('//input[@type="button" and @value="Continue"]')
     58         self.click_button_by_xpath(xpath, alert_handler=self._alert_handler)
     59 
     60 
     61     def _set_security_disabled(self):
     62         self.wait_for_object_by_xpath('//select[@name="wep_type"]')
     63         self.select_item_from_popup_by_id(' Disable ','wep_type')
     64 
     65 
     66     def get_supported_modes(self):
     67         return [{'band': ap_spec.BAND_2GHZ,
     68                  'modes': [ap_spec.MODE_B,
     69                            ap_spec.MODE_G,
     70                            ap_spec.MODE_N,
     71                            ap_spec.MODE_B | ap_spec.MODE_G,
     72                            ap_spec.MODE_B | ap_spec.MODE_G | ap_spec.MODE_N]}]
     73 
     74 
     75     def _set_mode(self, mode, band=None):
     76         # Different bands are not supported so we ignore.
     77         # Create the mode to popup item mapping
     78         mode_mapping = {ap_spec.MODE_B | ap_spec.MODE_G | ap_spec.MODE_N:
     79                         '2.4Ghz 802.11b/g/n mixed mode',
     80                         ap_spec.MODE_N: '2.4Ghz 802.11n only mode',
     81                         ap_spec.MODE_B: '2.4Ghz 802.11b only mode',
     82                         ap_spec.MODE_G: '2.4Ghz 802.11g only mode',
     83                         ap_spec.MODE_B | ap_spec.MODE_G:
     84                         '2.4Ghz 802.11b/g mixed mode'}
     85         mode_name = ''
     86         if mode in mode_mapping.keys():
     87             mode_name = mode_mapping[mode]
     88         else:
     89             raise RuntimeError('The mode selected %d is not supported by router'
     90                                ' %s.', hex(mode), self.name)
     91         self.select_item_from_popup_by_id(mode_name, 'dot11_mode')
     92 
     93     def get_supported_bands(self):
     94         return [{'band': ap_spec.BAND_2GHZ, 'channels': range(1, 12)}]
     95 
     96 
     97     def _set_channel(self, channel):
     98         position = self._get_channel_popup_position(channel)
     99         channel_choices = ['1', '2', '3', '4', '5',
    100                            '6', '7', '8', '9', '10', '11']
    101         self.select_item_from_popup_by_id(channel_choices[position],
    102                                           'wlan0_channel_t')
    103 
    104     def _set_visibility(self, visible=True):
    105         # value=1 is visible; value=0 is invisible
    106         int_value = int(visible)
    107         xpath = ('//input[@value="%d" and @name="wlan0_ssid_broadcast"]' %
    108                   int_value)
    109         self.click_button_by_xpath(xpath, alert_handler=self._alert_handler)
    110 
    111 
    112     def is_update_interval_supported(self):
    113         """
    114         Returns True if setting the PSK refresh interval is supported.
    115 
    116         @return True is supported; False otherwise
    117         """
    118         return False
    119 
    120 
    121     def _set_security_wep(self, key_value, authentication):
    122         self.wait_for_object_by_xpath('//select[@name="wep_type"]')
    123         self.select_item_from_popup_by_id(' WEP ','wep_type')
    124         # This router doesn not support ASCII passphrase for
    125         # generating hex key.Converting ASCII to hex before setting
    126         self.set_content_of_text_field_by_id(key_value.encode("hex"),
    127                                              'key1_64_hex')
    128 
    129 
    130     def _set_security_wpapsk(self, security, shared_key, update_interval=1800):
    131         self.wait_for_object_by_xpath('//select[@name="wep_type"]')
    132         if security == ap_spec.SECURITY_TYPE_WPAPSK:
    133             self.select_item_from_popup_by_id(' WPA ','wep_type')
    134         else:
    135             self.select_item_from_popup_by_id(' WPA2 ','wep_type')
    136         self.set_content_of_text_field_by_id(shared_key,
    137                                              'wlan0_psk_pass_phrase')
    138         self.set_content_of_text_field_by_id(shared_key, 'wpapsk2')
    139 
    140 
    141     def _alert_handler(self, alert):
    142         """Checks for any modal dialogs which popup to alert the user and
    143         either raises a RuntimeError or ignores the alert.
    144 
    145         Args:
    146           alert: The modal dialog's contents.
    147         """
    148         text = alert.text
    149         if 'To disable SSID Broadcast will cause WPS not work' in text:
    150             alert.accept()
    151         else:
    152             raise RuntimeError('We have an unhandled alert: %s' % text)
    153 
    154