1#
2# Copyright (C) 2017 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
17import logging
18import os
19import subprocess
20
21from vts.runners.host import asserts
22from vts.runners.host import base_test
23from vts.runners.host import keys
24from vts.runners.host import test_runner
25from vts.utils.python.common import cmd_utils
26
27
28class HostBinaryTest(base_test.BaseTestClass):
29    """Base class to run a host-side, native binary test.
30
31    Note that a host-side binary test is not highly recommended because
32    such can be written in Python. Currently, this is used only for legacy
33    host-side native tests. And all new host-side native tests should be
34    written in Python or Java.
35    """
36
37    def setUpClass(self):
38        """Retrieves the required param."""
39        required_params = [keys.ConfigKeys.IKEY_BINARY_TEST_SOURCE]
40        self.getUserParams(req_param_names=required_params)
41
42    def testHostBinary(self):
43        """Tests host-side binaries."""
44        android_build_top = os.getenv("ANDROID_BUILD_TOP", "")
45        asserts.assertTrue(
46            android_build_top,
47            "$ANDROID_BUILD_TOP is not set. Please run lunch <build target>")
48
49        for binary_test_source in self.binary_test_source:
50            binary_test_source = str(binary_test_source)
51            binary_path = os.path.join(android_build_top, binary_test_source)
52
53            cmd_result = cmd_utils.ExecuteShellCommand(binary_path)
54            asserts.assertFalse(
55                any(cmd_result[cmd_utils.EXIT_CODE]),
56                "Test failed with the following results:\n "
57                "command result: %s" % cmd_result)
58
59
60if __name__ == "__main__":
61    test_runner.main()
62