1#
2# Copyright (C) 2016 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17class LinuxKselftestTestcase(object):
18    """Stores information needed to run the test case.
19
20    Attrubutes:
21        _testname: string, name of the testcase.
22        _testsuite: string, name of suite this testcase belongs to.
23        _test_cmd: string, shell command used to invoke this testcase.
24        _supported_arch: string list, architectures this testcase supports,
25            e.g. ["arm", "x86"].
26        _supported_bits: int list, bit version (32 or 64) of the testcase that
27            are currently supported, e.g. [32, 64].
28    """
29    def __init__(self, testsuite, test_cmd, supported_arch, supported_bits):
30        self._testsuite = testsuite
31        self._testname = "%s/%s" % (testsuite, test_cmd)
32        self._test_cmd = "./%s" % test_cmd
33        self._supported_arch = supported_arch
34        self._supported_bits = supported_bits
35
36    @property
37    def testname(self):
38        """Get test name."""
39        return self._testname
40
41    @property
42    def testsuite(self):
43        """Get test suite."""
44        return self._testsuite
45
46    @property
47    def test_cmd(self):
48        """Get test command."""
49        return self._test_cmd
50
51    @property
52    def supported_arch(self):
53        """Get list of architectures this test can run against."""
54        return self._supported_arch
55
56    @property
57    def supported_bits(self):
58        """Get list of versions (32 or 64 bit) of the test case that can run."""
59        return self._supported_bits
60
61    def IsRelevant(self, cpu_abi, n_bit):
62        """Checks whether this test case can run in n_bit against this cpu_abi.
63
64        Returns:
65            True if this testcase can run; False otherwise.
66        """
67        if cpu_abi is None or n_bit is None:
68            return False
69
70        if not n_bit in self._supported_bits:
71            return False
72
73        for arch in self._supported_arch:
74            if cpu_abi.find(arch) >= 0:
75                return True
76
77        return False
78
79