1# Get the gtest/gmock dependencies.
2gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
3gmock_dep = dependency('gmock', disabler: true, required: false)
4if not gtest_dep.found() or not gmock_dep.found()
5    cmake = import('cmake')
6    gtest_proj = cmake.subproject('googletest',
7                                  required: false)
8    if gtest_proj.found()
9        gtest_dep = declare_dependency(
10            dependencies: [
11                dependency('threads'),
12                gtest_proj.dependency('gtest'),
13                gtest_proj.dependency('gtest_main'),
14            ]
15        )
16        gmock_dep = gtest_proj.dependency('gmock')
17    else
18        assert(not get_option('tests').enabled(),
19               'Googletest is required if tests are enabled')
20    endif
21endif
22
23################################################################################
24
25# Compile the test dts into a binary for pdbg.
26pdbg_test_dtb = custom_target('build_pdbg_test_dtb',
27    input   : files('pdbg-test.dts'),
28    output  : 'pdbg-test.dtb',
29    command : [ find_program('dtc'), '-I', 'dts', '-O', 'dtb',
30                '-o', '@OUTPUT@', '@INPUT@' ])
31
32pdbg_env = 'PDBG_DTB=' + pdbg_test_dtb.full_path()
33
34################################################################################
35
36# Add gtest/gmock dependency to the list of test dependencies.
37test_deps = [
38  test_util_deps,
39  gtest_dep,
40]
41
42test_vars = [
43  pdbg_env,
44  'LG2_FORCE_STDERR=true',
45]
46
47# Additional SRCs that are not (or should not be) included in libraries.
48# NOTE: Try to limit this, if possible, to prevent duplicate compilation.
49test_additional_srcs = [
50  files(
51    '../analyzer/filter-root-cause.cpp',
52    '../analyzer/plugins/p10-plugins.cpp',
53    '../analyzer/plugins/p10-tod-plugins.cpp',
54    '../cli.cpp',
55  ),
56  pdbg_test_dtb
57]
58
59################################################################################
60
61testcases = [
62  'test-bin-stream',
63  'test-ffdc-file',
64  'test-lpc-timeout',
65  'test-pdbg-dts',
66  'test-pll-unlock',
67  'test-resolution',
68  'test-root-cause-filter',
69  'test-tod-step-check-fault',
70  'test-cli',
71]
72
73foreach tc : testcases
74
75  exe = executable(tc.underscorify(),
76    sources             : [ files(tc + '.cpp'), test_additional_srcs ],
77    include_directories : incdir,
78    dependencies        : test_deps,
79    cpp_args            : test_args,
80    link_with           : test_libs,
81  )
82
83  test(tc, exe, env: test_vars)
84
85endforeach
86
87################################################################################
88
89testcases = [
90  'test-attention',
91  'test-end2end',
92  'test-util-data-file',
93  'test-ti-handler',
94]
95
96# allow more time for long running tests
97longtests = {
98  'test-end2end': 2,
99}
100
101foreach tc : testcases
102
103  exe = executable(tc.underscorify(),
104    sources             : [ files(tc + '.cpp'), test_additional_srcs ],
105    include_directories : incdir,
106    dependencies        : test_deps,
107    cpp_args            : test_args,
108    link_with           : hwdiags_libs, # TODO: should use test_libs instead
109  )
110
111  test(tc, exe, env: test_vars, timeout: 30 * longtests.get(tc, 1))
112
113endforeach
114
115