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 logging
      7 
      8 from autotest_lib.server import frontend
      9 from autotest_lib.server import site_utils
     10 
     11 RF_SWITCH_LABEL = 'rf_switch'
     12 LOCK_REASON = 'Locked for the tests.'
     13 
     14 
     15 def allocate_rf_switch():
     16     """Allocates a RF Switch.
     17 
     18     Locks the available RF Switch if it was discovered via AFE to prevent tests
     19     stomping on each other.
     20 
     21     @return an instance of AFE host object or None.
     22     """
     23     afe = frontend.AFE(
     24             debug=True, server=site_utils.get_global_afe_hostname())
     25     # Get a list of hosts with label rf_switch that are not locked.
     26     rf_switch_hosts = afe.get_hosts(label=RF_SWITCH_LABEL, locked=False)
     27     if len(rf_switch_hosts) > 0:
     28         for rf_switch in rf_switch_hosts:
     29             # Lock the first available RF Switch in the list.
     30             if afe.lock_host(rf_switch.hostname, LOCK_REASON):
     31                 return rf_switch
     32             logging.error(
     33                     'RF Switch %s could not be locked' % rf_switch.hostname)
     34     else:
     35         logging.debug('No RF Switches are available for tests.')
     36 
     37 
     38 def deallocate_rf_switch(rf_switch_host):
     39     """Unlocks a RF Switch.
     40 
     41     @param rf_switch_host: an instance of AFE Host object to unlock.
     42 
     43     @return True if rf_switch is unlocked, False otherwise.
     44     """
     45     afe = frontend.AFE(
     46             debug=True, server=site_utils.get_global_afe_hostname())
     47     afe.unlock_hosts([rf_switch_host.hostname])
     48     rf_switch = afe.get_hosts(hostnames=(rf_switch_host.hostname,))
     49     return not rf_switch[0].locked
     50