• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2013 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.
4
5"""Setup for linker tests."""
6
7import logging
8
9from pylib.constants import host_paths
10from pylib.linker import test_case
11from pylib.linker import test_runner
12
13with host_paths.SysPath(host_paths.BUILD_COMMON_PATH):
14  import unittest_util # pylint: disable=import-error
15
16# ModernLinker requires Android M (API level 23) or later.
17_VERSION_SDK_PROPERTY = 'ro.build.version.sdk'
18_MODERN_LINKER_MINIMUM_SDK_INT = 23
19
20def Setup(args, devices):
21  """Creates a list of test cases and a runner factory.
22
23  Args:
24    args: an argparse.Namespace object.
25    devices: an iterable of available devices.
26  Returns:
27    A tuple of (TestRunnerFactory, tests).
28  """
29  legacy_linker_tests = [
30      test_case.LinkerSharedRelroTest(is_modern_linker=False,
31                                      is_low_memory=False),
32      test_case.LinkerSharedRelroTest(is_modern_linker=False,
33                                      is_low_memory=True),
34  ]
35  modern_linker_tests = [
36      test_case.LinkerSharedRelroTest(is_modern_linker=True),
37  ]
38
39  min_sdk_int = 1 << 31
40  for device in devices:
41    min_sdk_int = min(min_sdk_int, device.build_version_sdk)
42
43  if min_sdk_int >= _MODERN_LINKER_MINIMUM_SDK_INT:
44    all_tests = legacy_linker_tests + modern_linker_tests
45  else:
46    all_tests = legacy_linker_tests
47    logging.warn('Not running LinkerModern tests (requires API %d, found %d)',
48                 _MODERN_LINKER_MINIMUM_SDK_INT, min_sdk_int)
49
50  if args.test_filter:
51    all_test_names = [test.qualified_name for test in all_tests]
52    filtered_test_names = unittest_util.FilterTestNames(all_test_names,
53                                                        args.test_filter)
54    all_tests = [t for t in all_tests \
55                 if t.qualified_name in filtered_test_names]
56
57  def TestRunnerFactory(device, _shard_index):
58    return test_runner.LinkerTestRunner(device, args.tool)
59
60  return (TestRunnerFactory, all_tests)
61