102571fc97293dfe69c0586a927d117e33e198641Viral Modi# Copyright (c) 2012 The Chromium Authors. All rights reserved.
202571fc97293dfe69c0586a927d117e33e198641Viral Modi# Use of this source code is governed by a BSD-style license that can be
302571fc97293dfe69c0586a927d117e33e198641Viral Modi# found in the LICENSE file.
402571fc97293dfe69c0586a927d117e33e198641Viral Modi
5260447745330298d0b1eacb5ff5f663f08c40739Viral Modi"""Base class for objects to configure Linksys single band access points
6260447745330298d0b1eacb5ff5f663f08c40739Viral Modi   using webdriver."""
7260447745330298d0b1eacb5ff5f663f08c40739Viral Modi
802571fc97293dfe69c0586a927d117e33e198641Viral Modiimport logging
902571fc97293dfe69c0586a927d117e33e198641Viral Modiimport urlparse
1002571fc97293dfe69c0586a927d117e33e198641Viral Modi
1194c3721324b55d312dc3087068ac4da454ef6c25Jason Abeleimport dynamic_ap_configurator
12d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambishimport ap_spec
1302571fc97293dfe69c0586a927d117e33e198641Viral Modi
1402571fc97293dfe69c0586a927d117e33e198641Viral Modifrom selenium.common.exceptions import WebDriverException
1502571fc97293dfe69c0586a927d117e33e198641Viral Modi
1602571fc97293dfe69c0586a927d117e33e198641Viral Modi
1794c3721324b55d312dc3087068ac4da454ef6c25Jason Abeleclass LinksyseSingleBandAPConfigurator(
1894c3721324b55d312dc3087068ac4da454ef6c25Jason Abele        dynamic_ap_configurator.DynamicAPConfigurator):
1902571fc97293dfe69c0586a927d117e33e198641Viral Modi    """Base class for objects to configure Linksys single band access points
2002571fc97293dfe69c0586a927d117e33e198641Viral Modi       using webdriver."""
2102571fc97293dfe69c0586a927d117e33e198641Viral Modi
226a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish    def __init__(self, ap_config):
236a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        super(LinksyseSingleBandAPConfigurator, self).__init__(ap_config)
246a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        self._dhcp_delay = 30
256a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
266a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
2702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _sec_alert(self, alert):
2802571fc97293dfe69c0586a927d117e33e198641Viral Modi        text = alert.text
2902571fc97293dfe69c0586a927d117e33e198641Viral Modi        if 'Your wireless security mode is not compatible with' in text:
3002571fc97293dfe69c0586a927d117e33e198641Viral Modi            alert.accept()
3102571fc97293dfe69c0586a927d117e33e198641Viral Modi        elif 'WARNING: Your Wireless-N devices will only operate' in text:
3202571fc97293dfe69c0586a927d117e33e198641Viral Modi            alert.accept()
3302571fc97293dfe69c0586a927d117e33e198641Viral Modi        elif 'Wireless security is currently disabled.' in text:
3402571fc97293dfe69c0586a927d117e33e198641Viral Modi            alert.accept()
3500b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish            self.click_button_by_id('divBT1', alert_handler=self._sec_alert)
3602571fc97293dfe69c0586a927d117e33e198641Viral Modi        elif 'Your new setting will disable Wi-Fi Protected Setup.' in text:
3702571fc97293dfe69c0586a927d117e33e198641Viral Modi            alert.accept()
38608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal        elif 'Illegal characters [ acceptable characters: 0 to 9 ]' in text:
39608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal            alert.accept()
40608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal            raise RuntimeError('Invalid characters used for key renewal. '
41608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal                               'Error: %s' % text)
42618e213871d591fbea23a168af746a0a212dca41bmahadev        elif 'The Key must be between 8 and 63 ASCII characters' in text:
43618e213871d591fbea23a168af746a0a212dca41bmahadev            alert.accept()
4402571fc97293dfe69c0586a927d117e33e198641Viral Modi        else:
45618e213871d591fbea23a168af746a0a212dca41bmahadev            raise RuntimeError('Unhandled alert message: %s' % text)
4602571fc97293dfe69c0586a927d117e33e198641Viral Modi
4702571fc97293dfe69c0586a927d117e33e198641Viral Modi
4802571fc97293dfe69c0586a927d117e33e198641Viral Modi    def get_number_of_pages(self):
4902571fc97293dfe69c0586a927d117e33e198641Viral Modi        return 2
5002571fc97293dfe69c0586a927d117e33e198641Viral Modi
5102571fc97293dfe69c0586a927d117e33e198641Viral Modi
5202571fc97293dfe69c0586a927d117e33e198641Viral Modi    def get_supported_modes(self):
53d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish        return [{'band': ap_spec.BAND_2GHZ,
54d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                 'modes': [ap_spec.MODE_M, ap_spec.MODE_B | ap_spec.MODE_G,
5577e15c016f5f9a44d7cad8b8644c0c5515bb0e6fbmahadev                           ap_spec.MODE_G, ap_spec.MODE_B, ap_spec.MODE_N]}]
5602571fc97293dfe69c0586a927d117e33e198641Viral Modi
5702571fc97293dfe69c0586a927d117e33e198641Viral Modi
5802571fc97293dfe69c0586a927d117e33e198641Viral Modi    def get_supported_bands(self):
59d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish        return [{'band': ap_spec.BAND_2GHZ,
6000b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                 'channels': ['Auto', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]}]
6102571fc97293dfe69c0586a927d117e33e198641Viral Modi
6202571fc97293dfe69c0586a927d117e33e198641Viral Modi
6302571fc97293dfe69c0586a927d117e33e198641Viral Modi    def is_security_mode_supported(self, security_mode):
646a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """Returns if the passes security mode is supported.
656a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
666a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        @param security_mode: a valid ap_spec security mode
676a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
686a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        @returns True if the mode is supported; False otherwise
696a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
706a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """
71d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish        return security_mode in (ap_spec.SECURITY_TYPE_DISABLED,
72d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                                 ap_spec.SECURITY_TYPE_WPAPSK,
73d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                                 ap_spec.SECURITY_TYPE_WPA2PSK,
74d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                                 ap_spec.SECURITY_TYPE_WEP)
7502571fc97293dfe69c0586a927d117e33e198641Viral Modi
7602571fc97293dfe69c0586a927d117e33e198641Viral Modi
7702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def navigate_to_page(self, page_number):
786a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """Navigates to the passed in page.
796a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
806a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        @param page_number: the page number as an integer
816a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
826a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """
8302571fc97293dfe69c0586a927d117e33e198641Viral Modi        if page_number == 1:
8402571fc97293dfe69c0586a927d117e33e198641Viral Modi            page_url = urlparse.urljoin(self.admin_interface_url,
8502571fc97293dfe69c0586a927d117e33e198641Viral Modi                                        'Wireless_Basic.asp')
860d1264acafb16ee523d17e7eabe2b049be04e20aDeepak Gopal            self.get_url(page_url, page_title='Settings')
8702571fc97293dfe69c0586a927d117e33e198641Viral Modi        elif page_number == 2:
8802571fc97293dfe69c0586a927d117e33e198641Viral Modi            page_url = urlparse.urljoin(self.admin_interface_url,
8902571fc97293dfe69c0586a927d117e33e198641Viral Modi                                        'WL_WPATable.asp')
90608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal            self.get_url(page_url, page_title='Security')
9102571fc97293dfe69c0586a927d117e33e198641Viral Modi        else:
9202571fc97293dfe69c0586a927d117e33e198641Viral Modi            raise RuntimeError('Invalid page number passed. Number of pages '
9302571fc97293dfe69c0586a927d117e33e198641Viral Modi                               '%d, page value sent was %d' %
9402571fc97293dfe69c0586a927d117e33e198641Viral Modi                               (self.get_number_of_pages(), page_number))
9502571fc97293dfe69c0586a927d117e33e198641Viral Modi
9602571fc97293dfe69c0586a927d117e33e198641Viral Modi
9702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def save_page(self, page_number):
986a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """Save the given page.
996a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
1006a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        @param page_number: the page number as an integer
1016a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish
1026a3e86be3c3c5d2b195f1195aa81383c31d18bcbKris Rambish        """
10377e15c016f5f9a44d7cad8b8644c0c5515bb0e6fbmahadev        try:
10477e15c016f5f9a44d7cad8b8644c0c5515bb0e6fbmahadev            self.click_button_by_id('divBT1', alert_handler=self._sec_alert)
10577e15c016f5f9a44d7cad8b8644c0c5515bb0e6fbmahadev        except:
10677e15c016f5f9a44d7cad8b8644c0c5515bb0e6fbmahadev            self._handle_alert('//input[@id="divBT1"]', self._sec_alert)
10787330193c8648cd9d75e8fa38e613aba1f19937fbmahadev        xpath_continue = '//input[@value="Continue"]'
10887330193c8648cd9d75e8fa38e613aba1f19937fbmahadev        self.wait_for_object_by_xpath(xpath_continue, wait_time=20)
1092057368d8619d01f7f6fa6ac70a3c0d89b238a0eDeepak Gopal        self.click_button_by_xpath(xpath_continue,
1102057368d8619d01f7f6fa6ac70a3c0d89b238a0eDeepak Gopal                                   alert_handler=self._sec_alert)
11102571fc97293dfe69c0586a927d117e33e198641Viral Modi
11202571fc97293dfe69c0586a927d117e33e198641Viral Modi
11302571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_mode(self, mode, band=None):
11402571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_mode, (mode,), 1, 900)
11502571fc97293dfe69c0586a927d117e33e198641Viral Modi
11602571fc97293dfe69c0586a927d117e33e198641Viral Modi
11702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_mode(self, mode, band=None):
118d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish        mode_mapping = {ap_spec.MODE_M:'Mixed',
119d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                        ap_spec.MODE_B | ap_spec.MODE_G:'Wireless-B/G Only',
120d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                        ap_spec.MODE_G:'Wireless-G Only',
121d751a4f5e86c0e5f8a984d7fe21a4f74c7caa761Kris Rambish                        ap_spec.MODE_B:'Wireless-B Only',
1222e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal                        ap_spec.MODE_N:'Wireless-N Only',
1232e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal                        'Disabled':'Disabled'}
12402571fc97293dfe69c0586a927d117e33e198641Viral Modi        mode_name = mode_mapping.get(mode)
12502571fc97293dfe69c0586a927d117e33e198641Viral Modi        if not mode_name:
12602571fc97293dfe69c0586a927d117e33e198641Viral Modi            raise RuntimeError('The mode %d not supported by router %s. ',
127b02e1744df2907cc4c0e7167cd8a52c43a73b155Jason Abele                               hex(mode), self.name)
12802571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//select[@name="net_mode_24g"]'
12902571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.select_item_from_popup_by_xpath(mode_name, xpath,
13002571fc97293dfe69c0586a927d117e33e198641Viral Modi                                             alert_handler=self._sec_alert)
13102571fc97293dfe69c0586a927d117e33e198641Viral Modi
13202571fc97293dfe69c0586a927d117e33e198641Viral Modi
13302571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_ssid(self, ssid):
13402571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_ssid, (ssid,), 1, 900)
13502571fc97293dfe69c0586a927d117e33e198641Viral Modi
13602571fc97293dfe69c0586a927d117e33e198641Viral Modi
13702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_ssid(self, ssid):
13802571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//input[@maxlength="32" and @name="ssid_24g"]'
13902571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.set_content_of_text_field_by_xpath(ssid, xpath, abort_check=False)
14000b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        # If security is off leaving focus from the field will throw
14100b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        # a alert dialog.
14200b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        ssid_field = self.driver.find_element_by_xpath(xpath)
143506a99d582456eff2f6d5e534cbf00a62990e97dKris Rambish        self._ssid = ssid
14400b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        try:
145260447745330298d0b1eacb5ff5f663f08c40739Viral Modi            ssid_field.send_keys('\t')
14600b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish            return
14700b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        except WebDriverException, e:
14800b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish            message = str(e)
14900b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish            if message.find('An open modal dialog blocked the operation') == -1:
15000b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                return
15100b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        self._sec_alert(self.driver.switch_to_alert())
15202571fc97293dfe69c0586a927d117e33e198641Viral Modi
15302571fc97293dfe69c0586a927d117e33e198641Viral Modi
15402571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_channel(self, channel):
15502571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_channel, (channel,), 1, 900)
15602571fc97293dfe69c0586a927d117e33e198641Viral Modi
15702571fc97293dfe69c0586a927d117e33e198641Viral Modi
15802571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_channel(self, channel):
15900857090713b50f971e1a863e02c7d61812a483bKris Rambish        position = self._get_channel_popup_position(channel)
16002571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//select[@name="_wl0_channel"]'
16100b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        channels = ['Auto',
16200b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                    '1 - 2.412GHZ', '2 - 2.417GHZ', '3 - 2.422GHZ',
16300b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                    '4 - 2.427GHZ', '5 - 2.432GHZ', '6 - 2.437GHZ',
16400b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                    '7 - 2.442GHZ', '8 - 2.447GHZ', '9 - 2.452GHZ',
16500b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                    '10 - 2.457GHZ', '11 - 2.462GHZ']
16600857090713b50f971e1a863e02c7d61812a483bKris Rambish        self.select_item_from_popup_by_xpath(channels[position], xpath)
16702571fc97293dfe69c0586a927d117e33e198641Viral Modi
16802571fc97293dfe69c0586a927d117e33e198641Viral Modi
16902571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_channel_width(self, channel_wid):
170260447745330298d0b1eacb5ff5f663f08c40739Viral Modi        """
171260447745330298d0b1eacb5ff5f663f08c40739Viral Modi        Adjusts the channel channel width.
172260447745330298d0b1eacb5ff5f663f08c40739Viral Modi
173260447745330298d0b1eacb5ff5f663f08c40739Viral Modi        @param channel_width: the channel width
174260447745330298d0b1eacb5ff5f663f08c40739Viral Modi        """
17502571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_channel_width,(channel_wid,),
17602571fc97293dfe69c0586a927d117e33e198641Viral Modi                                      1, 900)
17702571fc97293dfe69c0586a927d117e33e198641Viral Modi
17802571fc97293dfe69c0586a927d117e33e198641Viral Modi
17902571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_channel_width(self, channel_wid):
18002571fc97293dfe69c0586a927d117e33e198641Viral Modi        channel_width_choice = ['Auto (20 MHz or 40 MHz)', '20 MHz Only']
18102571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//select[@name="_wl0_nbw"]'
18202571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.select_item_from_popup_by_xpath(channel_width_choice[channel_wid],
18302571fc97293dfe69c0586a927d117e33e198641Viral Modi                                             xpath)
18402571fc97293dfe69c0586a927d117e33e198641Viral Modi
18502571fc97293dfe69c0586a927d117e33e198641Viral Modi
18602571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_radio(self, enabled=True):
1872e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal        weight = 1 if enabled else 1000
1882e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal        self.add_item_to_command_list(self._set_radio, (enabled,), 1, weight)
1892e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal
1902e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal
1912e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal    def _set_radio(self, enabled=True):
1922e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal        if not enabled:
1932e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal            self._set_mode('Disabled')
1942e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal        else:
1952e13a3dc8f3024975a63a6595eecfffdaddf0aafDeepak Gopal            self._set_mode(ap_spec.MODE_G)
19602571fc97293dfe69c0586a927d117e33e198641Viral Modi
19702571fc97293dfe69c0586a927d117e33e198641Viral Modi
19802571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_band(self, enabled=True):
199260447745330298d0b1eacb5ff5f663f08c40739Viral Modi        logging.debug('set_band is not supported in Linksys single band AP.')
20002571fc97293dfe69c0586a927d117e33e198641Viral Modi        return None
20102571fc97293dfe69c0586a927d117e33e198641Viral Modi
20202571fc97293dfe69c0586a927d117e33e198641Viral Modi
20302571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_security_disabled(self):
20402571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_security_disabled, (), 2, 1000)
20502571fc97293dfe69c0586a927d117e33e198641Viral Modi
20602571fc97293dfe69c0586a927d117e33e198641Viral Modi
20702571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_security_disabled(self):
20802571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//select[@name="wl0_security_mode"]'
209608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal        self.select_item_from_popup_by_xpath('Disabled', xpath,
21002571fc97293dfe69c0586a927d117e33e198641Viral Modi                                             alert_handler=self._sec_alert)
21102571fc97293dfe69c0586a927d117e33e198641Viral Modi
21202571fc97293dfe69c0586a927d117e33e198641Viral Modi
21302571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_security_wep(self, key_value, authentication):
21402571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.add_item_to_command_list(self._set_security_wep,
21502571fc97293dfe69c0586a927d117e33e198641Viral Modi                                      (key_value, authentication), 2, 1000)
21602571fc97293dfe69c0586a927d117e33e198641Viral Modi
21702571fc97293dfe69c0586a927d117e33e198641Viral Modi
21802571fc97293dfe69c0586a927d117e33e198641Viral Modi    def _set_security_wep(self, key_value, authentication):
21902571fc97293dfe69c0586a927d117e33e198641Viral Modi        # WEP and WPA-Personal are not supported for Wireless-N only mode
22002571fc97293dfe69c0586a927d117e33e198641Viral Modi        # and Mixed mode.
22102571fc97293dfe69c0586a927d117e33e198641Viral Modi        # WEP and WPA-Personal do not show up in the list, no alert is thrown.
22202571fc97293dfe69c0586a927d117e33e198641Viral Modi        popup = '//select[@name="wl0_security_mode"]'
223608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal        if not self.item_in_popup_by_xpath_exist('WEP', popup):
22400b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish            raise RuntimeError('The popup %s did not contain the item %s. '
22500b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish                               'Is the mode N?' % (popup, self.security_wep))
226608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal        self.select_item_from_popup_by_xpath('WEP', popup,
22702571fc97293dfe69c0586a927d117e33e198641Viral Modi                                             alert_handler=self._sec_alert)
22802571fc97293dfe69c0586a927d117e33e198641Viral Modi        text = '//input[@name="wl0_passphrase"]'
22902571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.set_content_of_text_field_by_xpath(key_value, text,
23002571fc97293dfe69c0586a927d117e33e198641Viral Modi                                                abort_check=True)
23102571fc97293dfe69c0586a927d117e33e198641Viral Modi        xpath = '//input[@value="Generate"]'
23202571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.click_button_by_xpath(xpath, alert_handler=self._sec_alert)
23302571fc97293dfe69c0586a927d117e33e198641Viral Modi
23402571fc97293dfe69c0586a927d117e33e198641Viral Modi
235618e213871d591fbea23a168af746a0a212dca41bmahadev    def set_security_wpapsk(self, security, shared_key, update_interval=None):
23602571fc97293dfe69c0586a927d117e33e198641Viral Modi        # WEP and WPA-Personal are not supported for Wireless-N only mode,
237618e213871d591fbea23a168af746a0a212dca41bmahadev        self.add_item_to_command_list(self._set_security_wpapsk,
238618e213871d591fbea23a168af746a0a212dca41bmahadev                                      (security, shared_key, update_interval),
239618e213871d591fbea23a168af746a0a212dca41bmahadev                                       2, 900)
240608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal
241260447745330298d0b1eacb5ff5f663f08c40739Viral Modi
242618e213871d591fbea23a168af746a0a212dca41bmahadev    def _set_security_wpapsk(self, security, shared_key, upadate_interval=None):
243608e591b1dae88376ac48b6c28f4163df7fca1f4Deepak Gopal        """Common method to set wpapsk and wpa2psk modes."""
24402571fc97293dfe69c0586a927d117e33e198641Viral Modi        popup = '//select[@name="wl0_security_mode"]'
2453370d8cab2a28129d68a1cd126afee6a1b001fbdbmahadev        self.wait_for_object_by_xpath(popup)
246618e213871d591fbea23a168af746a0a212dca41bmahadev        if security == ap_spec.SECURITY_TYPE_WPAPSK:
247618e213871d591fbea23a168af746a0a212dca41bmahadev            wpa_item = 'WPA Personal'
248618e213871d591fbea23a168af746a0a212dca41bmahadev        else:
249618e213871d591fbea23a168af746a0a212dca41bmahadev            wpa_item = 'WPA2 Personal'
250618e213871d591fbea23a168af746a0a212dca41bmahadev        self.select_item_from_popup_by_xpath(wpa_item, popup,
25102571fc97293dfe69c0586a927d117e33e198641Viral Modi                                             alert_handler=self._sec_alert)
25202571fc97293dfe69c0586a927d117e33e198641Viral Modi        text = '//input[@name="wl0_wpa_psk"]'
25302571fc97293dfe69c0586a927d117e33e198641Viral Modi        self.set_content_of_text_field_by_xpath(shared_key, text,
25402571fc97293dfe69c0586a927d117e33e198641Viral Modi                                                abort_check=False)
25502571fc97293dfe69c0586a927d117e33e198641Viral Modi
25602571fc97293dfe69c0586a927d117e33e198641Viral Modi
257a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal    def is_update_interval_supported(self):
258a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal        """
259a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal        Returns True if setting the PSK refresh interval is supported.
260a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal
261a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal        @return True is supported; False otherwise
262a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal        """
263a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal        return False
264a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal
265a81406ffca248d86cc8a441960ed3517fc179b8fDeepak Gopal
26602571fc97293dfe69c0586a927d117e33e198641Viral Modi    def set_visibility(self, visible=True):
26700b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        self.add_item_to_command_list(self._set_visibility, (visible,), 1, 900)
26800b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish
26900b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish
27000b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish    def _set_visibility(self, visible=True):
27100b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        int_value = 0 if visible else 1
27200b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        xpath = ('//input[@value="%d" and @name="closed_24g"]' % int_value)
27300b1beaed2e82b70b80b551276d38323c7ec6775Kris Rambish        self.click_button_by_xpath(xpath, alert_handler=self._sec_alert)
274