OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
| 5 import logging |
| 6 import threading |
| 7 |
5 from devil.android import device_blacklist | 8 from devil.android import device_blacklist |
6 from devil.android import device_errors | 9 from devil.android import device_errors |
7 from devil.android import device_utils | 10 from devil.android import device_utils |
8 from devil.utils import parallelizer | 11 from devil.utils import parallelizer |
9 from pylib.base import environment | 12 from pylib.base import environment |
10 | 13 |
11 | 14 |
12 class LocalDeviceEnvironment(environment.Environment): | 15 class LocalDeviceEnvironment(environment.Environment): |
13 | 16 |
14 def __init__(self, args, _error_func): | 17 def __init__(self, args, _error_func): |
15 super(LocalDeviceEnvironment, self).__init__() | 18 super(LocalDeviceEnvironment, self).__init__() |
16 self._blacklist = (device_blacklist.Blacklist(args.blacklist_file) | 19 self._blacklist = (device_blacklist.Blacklist(args.blacklist_file) |
17 if args.blacklist_file | 20 if args.blacklist_file |
18 else None) | 21 else None) |
19 self._device_serial = args.test_device | 22 self._device_serial = args.test_device |
| 23 self._devices_lock = threading.Lock() |
20 self._devices = [] | 24 self._devices = [] |
21 self._max_tries = 1 + args.num_retries | 25 self._max_tries = 1 + args.num_retries |
22 self._tool_name = args.tool | 26 self._tool_name = args.tool |
23 | 27 |
24 #override | 28 #override |
25 def SetUp(self): | 29 def SetUp(self): |
26 available_devices = device_utils.DeviceUtils.HealthyDevices( | 30 available_devices = device_utils.DeviceUtils.HealthyDevices( |
27 self._blacklist) | 31 self._blacklist) |
28 if not available_devices: | 32 if not available_devices: |
29 raise device_errors.NoDevicesError | 33 raise device_errors.NoDevicesError |
30 if self._device_serial: | 34 if self._device_serial: |
31 self._devices = [d for d in available_devices | 35 self._devices = [d for d in available_devices |
32 if d.adb.GetDeviceSerial() == self._device_serial] | 36 if d.adb.GetDeviceSerial() == self._device_serial] |
33 if not self._devices: | 37 if not self._devices: |
34 raise device_errors.DeviceUnreachableError( | 38 raise device_errors.DeviceUnreachableError( |
35 'Could not find device %r' % self._device_serial) | 39 'Could not find device %r' % self._device_serial) |
36 else: | 40 else: |
37 self._devices = available_devices | 41 self._devices = available_devices |
38 | 42 |
39 @property | 43 @property |
40 def devices(self): | 44 def devices(self): |
| 45 if not self._devices: |
| 46 raise device_errors.NoDevicesError() |
41 return self._devices | 47 return self._devices |
42 | 48 |
43 @property | 49 @property |
44 def parallel_devices(self): | 50 def parallel_devices(self): |
45 return parallelizer.SyncParallelizer(self._devices) | 51 return parallelizer.SyncParallelizer(self.devices) |
46 | 52 |
47 @property | 53 @property |
48 def max_tries(self): | 54 def max_tries(self): |
49 return self._max_tries | 55 return self._max_tries |
50 | 56 |
51 @property | 57 @property |
52 def tool(self): | 58 def tool(self): |
53 return self._tool_name | 59 return self._tool_name |
54 | 60 |
55 #override | 61 #override |
56 def TearDown(self): | 62 def TearDown(self): |
57 pass | 63 pass |
58 | 64 |
| 65 def BlacklistDevice(self, device): |
| 66 if not self._blacklist: |
| 67 logging.warning( |
| 68 'Attempted to blacklist %s, but no blacklist was provided.', |
| 69 str(device)) |
| 70 return |
| 71 |
| 72 device_serial = device.adb.GetDeviceSerial() |
| 73 self._blacklist.Extend([device_serial]) |
| 74 with self._devices_lock: |
| 75 self._devices = [d for d in self._devices if str(d) != device_serial] |
| 76 |
OLD | NEW |