1 # Copyright (c) 2014 The Chromium 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.
5 """Base script for doing test setup."""
10 from pylib
import constants
11 from pylib
import valgrind_tools
12 from pylib
.utils
import isolator
14 def GenerateDepsDirUsingIsolate(suite_name
, isolate_file_path
,
15 isolate_file_paths
, deps_exclusion_list
):
16 """Generate the dependency dir for the test suite using isolate.
19 suite_name: Name of the test suite (e.g. base_unittests).
20 isolate_file_path: .isolate file path to use. If there is a default .isolate
21 file path for the suite_name, this will override it.
22 isolate_file_paths: Dictionary with the default .isolate file paths for
24 deps_exclusion_list: A list of files that are listed as dependencies in the
25 .isolate files but should not be pushed to the device.
27 The Isolator instance used to remap the dependencies, or None.
30 if os
.path
.isabs(isolate_file_path
):
31 isolate_abs_path
= isolate_file_path
33 isolate_abs_path
= os
.path
.join(constants
.DIR_SOURCE_ROOT
,
36 isolate_rel_path
= isolate_file_paths
.get(suite_name
)
37 if not isolate_rel_path
:
38 logging
.info('Did not find an isolate file for the test suite.')
40 isolate_abs_path
= os
.path
.join(constants
.DIR_SOURCE_ROOT
, isolate_rel_path
)
42 isolated_abs_path
= os
.path
.join(
43 constants
.GetOutDirectory(), '%s.isolated' % suite_name
)
44 assert os
.path
.exists(isolate_abs_path
), 'Cannot find %s' % isolate_abs_path
46 i
= isolator
.Isolator(constants
.ISOLATE_DEPS_DIR
)
48 i
.Remap(isolate_abs_path
, isolated_abs_path
)
49 # We're relying on the fact that timestamps are preserved
50 # by the remap command (hardlinked). Otherwise, all the data
51 # will be pushed to the device once we move to using time diff
52 # instead of md5sum. Perform a sanity check here.
54 i
.PurgeExcluded(deps_exclusion_list
)
59 def PushDataDeps(device
, device_dir
, test_options
):
60 valgrind_tools
.PushFilesForTool(test_options
.tool
, device
)
61 if os
.path
.exists(constants
.ISOLATE_DEPS_DIR
):
62 device
.PushChangedFiles([
63 (os
.path
.join(constants
.ISOLATE_DEPS_DIR
, p
),
64 '%s/%s' % (device_dir
, p
))
65 for p
in os
.listdir(constants
.ISOLATE_DEPS_DIR
)])