# Copyright (c) 2014 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. """Base script for doing test setup.""" import logging import os from pylib import constants from pylib import valgrind_tools from pylib.utils import isolator def GenerateDepsDirUsingIsolate(suite_name, isolate_file_path, isolate_file_paths, deps_exclusion_list): """Generate the dependency dir for the test suite using isolate. Args: suite_name: Name of the test suite (e.g. base_unittests). isolate_file_path: .isolate file path to use. If there is a default .isolate file path for the suite_name, this will override it. isolate_file_paths: Dictionary with the default .isolate file paths for the test suites. deps_exclusion_list: A list of files that are listed as dependencies in the .isolate files but should not be pushed to the device. Returns: The Isolator instance used to remap the dependencies, or None. """ if isolate_file_path: if os.path.isabs(isolate_file_path): isolate_abs_path = isolate_file_path else: isolate_abs_path = os.path.join(constants.DIR_SOURCE_ROOT, isolate_file_path) else: isolate_rel_path = isolate_file_paths.get(suite_name) if not isolate_rel_path: logging.info('Did not find an isolate file for the test suite.') return isolate_abs_path = os.path.join(constants.DIR_SOURCE_ROOT, isolate_rel_path) isolated_abs_path = os.path.join( constants.GetOutDirectory(), '%s.isolated' % suite_name) assert os.path.exists(isolate_abs_path), 'Cannot find %s' % isolate_abs_path i = isolator.Isolator(constants.ISOLATE_DEPS_DIR) i.Clear() i.Remap(isolate_abs_path, isolated_abs_path) # We're relying on the fact that timestamps are preserved # by the remap command (hardlinked). Otherwise, all the data # will be pushed to the device once we move to using time diff # instead of md5sum. Perform a sanity check here. i.VerifyHardlinks() i.PurgeExcluded(deps_exclusion_list) i.MoveOutputDeps() return i def PushDataDeps(device, device_dir, test_options): valgrind_tools.PushFilesForTool(test_options.tool, device) if os.path.exists(constants.ISOLATE_DEPS_DIR): device.PushChangedFiles([(constants.ISOLATE_DEPS_DIR, device_dir)], delete_device_stale=test_options.delete_stale_data)