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 itertools
      6 
      7 from autotest_lib.server import frontend
      8 from autotest_lib.server import site_utils
      9 
     10 
     11 CLIENT_BOX_STR = 'client_box_'
     12 RF_SWITCH_STR = 'rf_switch_'
     13 RF_SWITCH_DUT = 'rf_switch_dut'
     14 RF_SWITCH_CLIENT = 'rf_switch_client'
     15 
     16 
     17 class ClientBox(object):
     18     """Class to manage devices in the Client Box."""
     19 
     20 
     21     def __init__(self, client_box_host):
     22         """Constructor for the ClientBox.
     23 
     24         @param client_box_host: Client Box AFE Host."""
     25         self.client_box_host = client_box_host
     26         self.labels = self.client_box_host.labels
     27         for s in self.labels:
     28             if s.startswith(CLIENT_BOX_STR):
     29                 self.client_box_label = s
     30         self.devices = self._get_devices()
     31 
     32 
     33     def _get_devices(self):
     34         """Return all devices in the Client Box.
     35 
     36         @returns a list of autotest_lib.server.frontend.Host objects."""
     37         rf_switch_label = ''
     38         for label in self.labels:
     39             if label.startswith(RF_SWITCH_STR) and (
     40                     label is not RF_SWITCH_CLIENT):
     41                 rf_switch_label = label
     42         afe = frontend.AFE(
     43                 debug=True, server=site_utils.get_global_afe_hostname())
     44         hosts = afe.get_hosts(label=self.client_box_label)
     45         devices = []
     46         for host in hosts:
     47             labels = list(itertools.ifilter(
     48                     lambda x: x in host.labels, [RF_SWITCH_DUT, rf_switch_label]))
     49             # If host has both labels, then add to the devices list.
     50             if len(labels) == 2:
     51                 devices.append(host)
     52         return devices
     53 
     54 
     55     def get_devices(self):
     56         """Return all devices in the Client Box.
     57 
     58         @returns a list of autotest_lib.server.frontend.Host objects."""
     59         return self.devices
     60