# Copyright (c) 2017 The Chromium OS 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 ConfigParser import logging import os from autotest_lib.server.cros import ap_config AP_BOX_STR = 'ap_box_' RF_SWITCH_STR = 'rf_switch_' RF_SWITCH_APS = 'rf_switch_aps' FILE_NAME = '%s_%s_ap_list.conf' class APBoxException(Exception): pass class APBox(object): """Class to manage APs in an AP Box.""" def __init__(self, ap_box_host): """Constructor for the AP Box. @param ap_box_host: AP Box AFE Host object.""" self.ap_box_host = ap_box_host labels = self.ap_box_host.labels self.ap_box_label = '' self.rf_switch_label = '' for label in labels: if label.startswith(AP_BOX_STR): self.ap_box_label = label elif label.startswith(RF_SWITCH_STR) and ( label is not RF_SWITCH_APS): self.rf_switch_label = label if not self.ap_box_label or not self.rf_switch_label: raise APBoxException( 'AP Box %s does not have ap_box and/or rf_switch labels' % self.ap_box_host.hostname) self.aps = self._get_ap_list() def _get_ap_list(self): """Returns a list of all APs in the AP Box. @returns a list of autotest_lib.server.cros.AP objects. """ aps = [] # FILE_NAME is formed using rf_switch and ap_box labels. # for example, rf_switch_1 and ap_box_1, the configuration # filename is rf_switch_1_ap_box_1_ap_list.conf file_name = FILE_NAME % ( self.rf_switch_label.lower(), self.ap_box_label.lower()) ap_config_parser = ConfigParser.RawConfigParser() path = os.path.join( os.path.dirname(os.path.abspath(__file__)), '..', file_name) logging.debug('Reading the static configurations from %s', path) ap_config_parser.read(path) for bss in ap_config_parser.sections(): aps.append(ap_config.AP(bss, ap_config_parser)) return aps def get_ap_list(self): """Returns a list of all APs in the AP Box. @returns a list of autotest_lib.server.cros.AP objects. """ return self.aps