# 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 common import logging from autotest_lib.server import frontend from autotest_lib.server import site_utils RF_SWITCH_LABEL = 'rf_switch' LOCK_REASON = 'Locked for the tests.' def allocate_rf_switch(): """Allocates a RF Switch. Locks the available RF Switch if it was discovered via AFE to prevent tests stomping on each other. @return an instance of AFE host object or None. """ afe = frontend.AFE( debug=True, server=site_utils.get_global_afe_hostname()) # Get a list of hosts with label rf_switch that are not locked. rf_switch_hosts = afe.get_hosts(label=RF_SWITCH_LABEL, locked=False) if len(rf_switch_hosts) > 0: for rf_switch in rf_switch_hosts: # Lock the first available RF Switch in the list. if afe.lock_host(rf_switch.hostname, LOCK_REASON): return rf_switch logging.error( 'RF Switch %s could not be locked' % rf_switch.hostname) else: logging.debug('No RF Switches are available for tests.') def deallocate_rf_switch(rf_switch_host): """Unlocks a RF Switch. @param rf_switch_host: an instance of AFE Host object to unlock. @return True if rf_switch is unlocked, False otherwise. """ afe = frontend.AFE( debug=True, server=site_utils.get_global_afe_hostname()) afe.unlock_hosts([rf_switch_host.hostname]) rf_switch = afe.get_hosts(hostnames=(rf_switch_host.hostname,)) return not rf_switch[0].locked