Home | History | Annotate | Download | only in network
      1 # Copyright (c) 2017 The Chromium OS 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 common
      6 import ConfigParser
      7 import logging
      8 import os
      9 
     10 from autotest_lib.server.cros import ap_config
     11 
     12 AP_BOX_STR = 'ap_box_'
     13 RF_SWITCH_STR = 'rf_switch_'
     14 RF_SWITCH_APS = 'rf_switch_aps'
     15 FILE_NAME = '%s_%s_ap_list.conf'
     16 
     17 
     18 class APBoxException(Exception):
     19     pass
     20 
     21 
     22 class APBox(object):
     23     """Class to manage APs in an AP Box."""
     24 
     25 
     26     def __init__(self, ap_box_host):
     27         """Constructor for the AP Box.
     28 
     29         @param ap_box_host: AP Box AFE Host object.
     30 
     31         @raises APBoxException.
     32         """
     33         self.ap_box_host = ap_box_host
     34         self.ap_box_label = ''
     35         self.rf_switch_label = ''
     36         for label in ap_box_host.labels:
     37             if label.startswith(AP_BOX_STR):
     38                 self.ap_box_label = label
     39             elif label.startswith(RF_SWITCH_STR) and (
     40                     label != RF_SWITCH_APS):
     41                 self.rf_switch_label = label
     42         if not self.ap_box_label or not self.rf_switch_label:
     43             raise APBoxException(
     44                     'AP Box %s does not have ap_box and/or rf_switch labels' %
     45                     ap_box_host.hostname)
     46         self.aps = None
     47 
     48 
     49     def _get_ap_list(self):
     50         """Returns a list of all APs in the AP Box.
     51 
     52         @returns a list of autotest_lib.server.cros.AP objects.
     53         """
     54         aps = []
     55         # FILE_NAME is formed using rf_switch and ap_box labels.
     56         # for example, rf_switch_1 and ap_box_1, the configuration
     57         # filename is rf_switch_1_ap_box_1_ap_list.conf
     58         file_name = FILE_NAME % (
     59                 self.rf_switch_label.lower(), self.ap_box_label.lower())
     60         ap_config_parser = ConfigParser.RawConfigParser()
     61         path = os.path.join(
     62                 os.path.dirname(os.path.abspath(__file__)), '..',
     63                 file_name)
     64         logging.debug('Reading the static configurations from %s', path)
     65         ap_config_parser.read(path)
     66         for bss in ap_config_parser.sections():
     67             aps.append(ap_config.AP(bss, ap_config_parser))
     68         return aps
     69 
     70 
     71     def get_ap_list(self):
     72         """Returns a list of all APs in the AP Box.
     73 
     74         @returns a list of autotest_lib.server.cros.AP objects.
     75         """
     76         if self.aps is None:
     77             self.aps = self._get_ap_list()
     78         return self.aps
     79 
     80