120d527a60fd1eeb674c410429a64b6b4abd0461
[tinc] / test / unit / meson.build
1 dep_cmocka = dependency('cmocka', required: opt_tests)
2 if not dep_cmocka.found()
3   subdir_done()
4 endif
5
6 can_wrap = cc.has_link_argument('-Wl,--wrap=func')
7 if not can_wrap
8   message('linker has no support for function wrapping, mocked tests will not run')
9 endif
10
11 link_tinc = { 'lib': lib_tinc, 'dep': deps_tinc }
12 link_tincd = { 'lib': lib_tincd, 'dep': deps_tincd }
13
14 # Test definition format:
15 #
16 # 'free-form test name': {
17 #   'code': 'test1.c',      // or ['test1.c', 'test1_util.c']
18 #   'mock': ['foo', 'bar'], // list of functions to mock (default: empty)
19 #   'link': link_tinc,      // which binary to link with (default: tincd)
20 # }
21
22 tests = {
23   'net': {
24     'code': 'test_net.c',
25     'mock': ['execute_script', 'environment_init', 'environment_exit'],
26   },
27   'subnet': {
28     'code': 'test_subnet.c',
29   },
30   'splay_tree': {
31     'code': 'test_splay_tree.c',
32     'link': link_tinc,
33   },
34 }
35
36 env = ['CMOCKA_MESSAGE_OUTPUT=TAP']
37
38 foreach test, data : tests
39   args = ld_flags
40
41   if can_wrap
42     mocks = data.get('mock', [])
43     if mocks.length() > 0
44       args += ',--wrap='.join(['-Wl'] + mocks)
45     endif
46   endif
47
48   libs = data.get('link', link_tincd)
49
50   exe = executable(test,
51                    sources: data['code'],
52                    link_args: args,
53                    dependencies: [libs['dep'], dep_cmocka],
54                    link_with: libs['lib'],
55                    implicit_include_directories: false,
56                    include_directories: inc_conf,
57                    build_by_default: false)
58
59   test(test,
60        exe,
61        suite: 'unit',
62        timeout: 60,
63        protocol: 'tap',
64        env: env)
65 endforeach
66