summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward O'Callaghan <quasisec@google.com>2020-05-20 20:10:20 +1000
committerEdward O'Callaghan <quasisec@chromium.org>2020-06-16 02:22:41 +0000
commit46f2d4e488db66b37e892b8fa621eeed0fe2f284 (patch)
tree515d9dbe880b4942c33c6e1af3d5ce6d0182af91
parent6f793e4500a04b096676555dced98b207e06eeb7 (diff)
downloadflashrom-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.build20
-rw-r--r--subprojects/cmocka.wrap10
-rw-r--r--tests/include/test.h18
-rw-r--r--tests/meson.build28
-rw-r--r--tests/tests.c25
-rw-r--r--tests/tests.h4
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 */