diff options
author | Edward O'Callaghan <quasisec@google.com> | 2020-05-20 20:10:20 +1000 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2020-06-16 02:22:41 +0000 |
commit | 46f2d4e488db66b37e892b8fa621eeed0fe2f284 (patch) | |
tree | 515d9dbe880b4942c33c6e1af3d5ce6d0182af91 | |
parent | 6f793e4500a04b096676555dced98b207e06eeb7 (diff) | |
download | flashrom-46f2d4e488db66b37e892b8fa621eeed0fe2f284.tar.gz flashrom-46f2d4e488db66b37e892b8fa621eeed0fe2f284.tar.bz2 flashrom-46f2d4e488db66b37e892b8fa621eeed0fe2f284.zip |
tests/: Add CMocka unit-test infrastructure
This adds the CMocka unit-testing infrastructure into
the meson build system which we will latter follow up
with unit-tests for flashrom's core logic.
BUG=b:157280555
BRANCH=none
TEST=builds
Change-Id: I66665f56627b3d99049176bfbebbd771b080370a
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/41622
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r-- | meson.build | 20 | ||||
-rw-r--r-- | subprojects/cmocka.wrap | 10 | ||||
-rw-r--r-- | tests/include/test.h | 18 | ||||
-rw-r--r-- | tests/meson.build | 28 | ||||
-rw-r--r-- | tests/tests.c | 25 | ||||
-rw-r--r-- | tests/tests.h | 4 |
6 files changed, 105 insertions, 0 deletions
diff --git a/meson.build b/meson.build index 5d8e630e3..3d395e867 100644 --- a/meson.build +++ b/meson.build @@ -424,3 +424,23 @@ executable( ) subdir('util') + +# unit-test framework +cmocka_dep = dependency( + 'cmocka', + fallback: ['cmocka', 'cmocka_dep'] +) +flashrom_test_dep = declare_dependency( + include_directories : include_directories('.'), + sources : [ + srcs, + 'cli_common.c', + 'cli_output.c', + 'flashrom.c', + ], + dependencies : [ + deps, + ], +) + +subdir('tests') diff --git a/subprojects/cmocka.wrap b/subprojects/cmocka.wrap new file mode 100644 index 000000000..21e84f996 --- /dev/null +++ b/subprojects/cmocka.wrap @@ -0,0 +1,10 @@ +[wrap-file] +directory = cmocka-1.1.5 + +source_url = https://cmocka.org/files/1.1/cmocka-1.1.5.tar.xz +source_filename = cmocka-1.1.5.tar.xz +source_hash = f0ccd8242d55e2fd74b16ba518359151f6f8383ff8aef4976e48393f77bba8b6 + +patch_url = https://wrapdb.mesonbuild.com/v1/projects/cmocka/1.1.5/3/get_zip +patch_filename = cmocka-1.1.5-3-wrap.zip +patch_hash = 81ce48613680d3c3a0b396ac570c852b290adcd18202fb16aaf703a9493f4348 diff --git a/tests/include/test.h b/tests/include/test.h new file mode 100644 index 000000000..b4e0dd2b5 --- /dev/null +++ b/tests/include/test.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* This file is part of the coreboot project. */ + +#ifndef _TESTS_TEST_H +#define _TESTS_TEST_H + +/* + * Standard test header that should be included in all tests. For now it just encapsulates the + * include dependencies for Cmocka. Test-specific APIs that are so generic we would want them + * available everywhere could also be added here. + */ + +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#endif /* _TESTS_TEST_H */ diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 000000000..0c21cb9c7 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,28 @@ +root_includes = include_directories('../subprojects') + +srcs = [ + 'tests.c', +] + +mocks = [ + '-Wl,--wrap=physunmap', + '-Wl,--wrap=physmap', + '-Wl,--gc-sections', +] + +flashrom_tests = executable('flashrom_unit_tests', + srcs, + include_directories : root_includes, + c_args : [ + cargs, + '-ffunction-sections', + '-fdata-sections', + # '-DSTANDALONE', + '-DCONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_DUMMY', + '-DCONFIG_DEFAULT_PROGRAMMER_ARGS=""', + ], + export_dynamic : true, + link_args : mocks, + dependencies : [cmocka_dep, flashrom_test_dep], +) +test('cmocka test flashrom', flashrom_tests) diff --git a/tests/tests.c b/tests/tests.c new file mode 100644 index 000000000..32353fa68 --- /dev/null +++ b/tests/tests.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* This file is part of the coreboot project. */ + +#include <include/test.h> +#include "tests.h" + +#include <stdio.h> + +/* redefinitions/wrapping */ +void __wrap_physunmap(void *virt_addr, size_t len) +{ + fprintf(stderr, "%s\n", __func__); +} +void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len) +{ + fprintf(stderr, "%s\n", __func__); + return NULL; +} + +int main(void) +{ + int ret = 0; + + return ret; +} diff --git a/tests/tests.h b/tests/tests.h new file mode 100644 index 000000000..b088e24e3 --- /dev/null +++ b/tests/tests.h @@ -0,0 +1,4 @@ +#ifndef TESTS_H +#define TESTS_H + +#endif /* TESTS_H */ |