1import site
2
3site.main()
4
5import argparse
6import logging
7import os
8import sys
9
10from argparse import Namespace
11from mobly import suite_runner
12from typing import List, Tuple
13
14_BUMBLE_BTSNOOP_FMT = 'bumble_btsnoop_{pid}_{instance}.log'
15
16import a2dp_test
17
18# Import test cases modules.
19import aics_test
20import asha_test
21import avatar.cases.host_test
22import avatar.cases.le_host_test
23import avatar.cases.le_security_test
24import avatar.cases.security_test
25import gatt_test
26import hap_test
27import hfpclient_test
28from pairing import _test_class_list as _pairing_test_class_list
29import sdp_test
30
31_TEST_CLASSES_LIST = [
32    avatar.cases.host_test.HostTest,
33    avatar.cases.le_host_test.LeHostTest,
34    avatar.cases.security_test.SecurityTest,
35    avatar.cases.le_security_test.LeSecurityTest,
36    a2dp_test.A2dpTest,
37    aics_test.AicsTest,
38    sdp_test.SdpTest,
39    gatt_test.GattTest,
40    hap_test.HapTest,
41    asha_test.AshaTest,
42    hfpclient_test.HfpClientTest,
43] + _pairing_test_class_list
44
45
46def _parse_cli_args() -> Tuple[Namespace, List[str]]:
47    parser = argparse.ArgumentParser(description='Avatar test runner.')
48    parser.add_argument(
49        '-o',
50        '--log_path',
51        type=str,
52        metavar='<PATH>',
53        help='Path to the test configuration file.',
54    )
55    return parser.parse_known_args()
56
57
58if __name__ == '__main__':
59    logging.basicConfig(level=logging.INFO)
60
61    # This is a hack for `tradefed` because of `b/166468397`.
62    if '--' in sys.argv:
63        index = sys.argv.index('--')
64        sys.argv = sys.argv[:1] + sys.argv[index + 1:]
65
66    # Enable bumble snoop logger.
67    ns, argv = _parse_cli_args()
68    if ns.log_path:
69        os.environ.setdefault('BUMBLE_SNOOPER', f'btsnoop:file:{ns.log_path}/{_BUMBLE_BTSNOOP_FMT}')
70
71    # Run the test suite.
72    suite_runner.run_suite(_TEST_CLASSES_LIST, argv)  # type: ignore
73