# Copyright 2016 The Chromium 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 threading import unittest from devil.android import device_errors from devil.android import device_utils _devices_lock = threading.Lock() _devices_condition = threading.Condition(_devices_lock) _devices = set() def PrepareDevices(*_args): raw_devices = device_utils.DeviceUtils.HealthyDevices() live_devices = [] for d in raw_devices: try: d.WaitUntilFullyBooted(timeout=5, retries=0) live_devices.append(str(d)) except (device_errors.CommandFailedError, device_errors.CommandTimeoutError): pass with _devices_lock: _devices.update(set(live_devices)) if not _devices: raise Exception('No live devices attached.') class DeviceTestCase(unittest.TestCase): def __init__(self, *args, **kwargs): super(DeviceTestCase, self).__init__(*args, **kwargs) self.serial = None #override def setUp(self): super(DeviceTestCase, self).setUp() with _devices_lock: while not _devices: _devices_condition.wait(5) self.serial = _devices.pop() #override def tearDown(self): super(DeviceTestCase, self).tearDown() with _devices_lock: _devices.add(self.serial) _devices_condition.notify()