Edward O'Callaghan submitted this change.

View Change

Approvals: build bot (Jenkins): Verified Stefan Reinauer: Looks good to me, approved
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>
---
M meson.build
A subprojects/cmocka.wrap
A tests/include/test.h
A tests/meson.build
A tests/tests.c
A tests/tests.h
6 files changed, 105 insertions(+), 0 deletions(-)

diff --git a/meson.build b/meson.build
index 5d8e630..3d395e8 100644
--- a/meson.build
+++ b/meson.build
@@ -424,3 +424,23 @@
)

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 0000000..21e84f9
--- /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 0000000..b4e0dd2
--- /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 0000000..0c21cb9
--- /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 0000000..32353fa
--- /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 0000000..b088e24
--- /dev/null
+++ b/tests/tests.h
@@ -0,0 +1,4 @@
+#ifndef TESTS_H
+#define TESTS_H
+
+#endif /* TESTS_H */

To view, visit change 41622. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I66665f56627b3d99049176bfbebbd771b080370a
Gerrit-Change-Number: 41622
Gerrit-PatchSet: 5
Gerrit-Owner: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-Reviewer: Angel Pons <th3fanbus@gmail.com>
Gerrit-Reviewer: David Hendricks <david.hendricks@gmail.com>
Gerrit-Reviewer: Edward O'Callaghan <quasisec@chromium.org>
Gerrit-Reviewer: Furquan Shaikh <furquan@google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi@google.com>
Gerrit-Reviewer: Stefan Reinauer <stefan.reinauer@coreboot.org>
Gerrit-Reviewer: Stuart Langley <slangley@google.com>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-MessageType: merged