| 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 imp | 5 import imp |
| 6 import itertools | 6 import itertools |
| 7 import os | 7 import os |
| 8 import posixpath | 8 import posixpath |
| 9 | 9 |
| 10 from devil.android import device_errors | 10 from devil.android import device_errors |
| 11 from devil.android import device_temp_file | 11 from devil.android import device_temp_file |
| 12 from devil.android import ports | 12 from devil.android import ports |
| 13 from devil.utils import reraiser_thread |
| 13 from incremental_install import installer | 14 from incremental_install import installer |
| 14 from pylib import constants | 15 from pylib import constants |
| 15 from pylib.gtest import gtest_test_instance | 16 from pylib.gtest import gtest_test_instance |
| 16 from pylib.local import local_test_server_spawner | 17 from pylib.local import local_test_server_spawner |
| 17 from pylib.local.device import local_device_environment | 18 from pylib.local.device import local_device_environment |
| 18 from pylib.local.device import local_device_test_run | 19 from pylib.local.device import local_device_test_run |
| 19 | 20 |
| 20 _COMMAND_LINE_FLAGS_SUPPORTED = True | 21 _COMMAND_LINE_FLAGS_SUPPORTED = True |
| 21 | 22 |
| 22 _EXTRA_COMMAND_LINE_FILE = ( | 23 _EXTRA_COMMAND_LINE_FILE = ( |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 self._delegate = _ExeDelegate(self, self._test_instance.exe) | 218 self._delegate = _ExeDelegate(self, self._test_instance.exe) |
| 218 | 219 |
| 219 self._servers = {} | 220 self._servers = {} |
| 220 | 221 |
| 221 #override | 222 #override |
| 222 def TestPackage(self): | 223 def TestPackage(self): |
| 223 return self._test_instance.suite | 224 return self._test_instance.suite |
| 224 | 225 |
| 225 #override | 226 #override |
| 226 def SetUp(self): | 227 def SetUp(self): |
| 228 @local_device_test_run.handle_shard_failures |
| 229 def individual_device_set_up(dev): |
| 230 def install_apk(): |
| 231 # Install test APK. |
| 232 self._delegate.Install(dev, incremental=self._env.incremental_install) |
| 227 | 233 |
| 228 @local_device_test_run.handle_shard_failures | 234 def push_test_data(): |
| 229 def individual_device_set_up(dev, host_device_tuples): | 235 # Push data dependencies. |
| 230 # Install test APK. | 236 external_storage = dev.GetExternalStoragePath() |
| 231 self._delegate.Install(dev, incremental=self._env.incremental_install) | 237 data_deps = self._test_instance.GetDataDependencies() |
| 238 host_device_tuples = [ |
| 239 (h, d if d is not None else external_storage) |
| 240 for h, d in data_deps] |
| 241 dev.PushChangedFiles(host_device_tuples) |
| 232 | 242 |
| 233 # Push data dependencies. | 243 def init_tool_and_start_servers(): |
| 234 external_storage = dev.GetExternalStoragePath() | 244 tool = self.GetTool(dev) |
| 235 host_device_tuples = [ | 245 tool.CopyFiles(dev) |
| 236 (h, d if d is not None else external_storage) | 246 tool.SetupEnvironment() |
| 237 for h, d in host_device_tuples] | |
| 238 dev.PushChangedFiles(host_device_tuples) | |
| 239 | 247 |
| 240 tool = self.GetTool(dev) | 248 self._servers[str(dev)] = [] |
| 241 tool.CopyFiles(dev) | 249 if self.TestPackage() in _SUITE_REQUIRES_TEST_SERVER_SPAWNER: |
| 242 tool.SetupEnvironment() | 250 self._servers[str(dev)].append( |
| 251 local_test_server_spawner.LocalTestServerSpawner( |
| 252 ports.AllocateTestServerPort(), dev, tool)) |
| 243 | 253 |
| 244 self._servers[str(dev)] = [] | 254 for s in self._servers[str(dev)]: |
| 245 if self.TestPackage() in _SUITE_REQUIRES_TEST_SERVER_SPAWNER: | 255 s.SetUp() |
| 246 self._servers[str(dev)].append( | |
| 247 local_test_server_spawner.LocalTestServerSpawner( | |
| 248 ports.AllocateTestServerPort(), dev, tool)) | |
| 249 | 256 |
| 250 for s in self._servers[str(dev)]: | 257 steps = (install_apk, push_test_data, init_tool_and_start_servers) |
| 251 s.SetUp() | 258 if self._env.concurrent_adb: |
| 259 reraiser_thread.RunAsync(steps) |
| 260 else: |
| 261 for step in steps: |
| 262 step() |
| 252 | 263 |
| 253 self._env.parallel_devices.pMap(individual_device_set_up, | 264 self._env.parallel_devices.pMap(individual_device_set_up) |
| 254 self._test_instance.GetDataDependencies()) | |
| 255 | 265 |
| 256 #override | 266 #override |
| 257 def _ShouldShard(self): | 267 def _ShouldShard(self): |
| 258 return True | 268 return True |
| 259 | 269 |
| 260 #override | 270 #override |
| 261 def _CreateShards(self, tests): | 271 def _CreateShards(self, tests): |
| 262 device_count = len(self._env.devices) | 272 device_count = len(self._env.devices) |
| 263 shards = [] | 273 shards = [] |
| 264 for i in xrange(0, device_count): | 274 for i in xrange(0, device_count): |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 def TearDown(self): | 327 def TearDown(self): |
| 318 @local_device_test_run.handle_shard_failures | 328 @local_device_test_run.handle_shard_failures |
| 319 def individual_device_tear_down(dev): | 329 def individual_device_tear_down(dev): |
| 320 for s in self._servers.get(str(dev), []): | 330 for s in self._servers.get(str(dev), []): |
| 321 s.TearDown() | 331 s.TearDown() |
| 322 | 332 |
| 323 tool = self.GetTool(dev) | 333 tool = self.GetTool(dev) |
| 324 tool.CleanUpEnvironment() | 334 tool.CleanUpEnvironment() |
| 325 | 335 |
| 326 self._env.parallel_devices.pMap(individual_device_tear_down) | 336 self._env.parallel_devices.pMap(individual_device_tear_down) |
| OLD | NEW |