From 94f91ef864b56ba71445b3e4d84f4b12f066aed2 Mon Sep 17 00:00:00 2001 From: Nikolai Artemiev Date: Tue, 8 Feb 2022 16:56:02 +1100 Subject: tests: add fprintf() mock with redirection to io_mock We've seen somewhat obscure test failures where the real fprintf() function was passed a fake file returned by the fopen() mock. Although the code that caused the specific failure was cros-specific, adding an fprintf() mock should help avoid future debugging. TEST=ninja test BRANCH=none BUG=b:217661133 Change-Id: I3f8594ea24d17436a7932732d9d05416b804dc93 Signed-off-by: Nikolai Artemiev Reviewed-on: https://review.coreboot.org/c/flashrom/+/61708 Reviewed-by: Anastasia Klimchuk Reviewed-by: Edward O'Callaghan Tested-by: build bot (Jenkins) --- tests/io_mock.h | 1 + tests/meson.build | 1 + tests/tests.c | 14 ++++++++++++++ 3 files changed, 16 insertions(+) (limited to 'tests') diff --git a/tests/io_mock.h b/tests/io_mock.h index 854ddd948..873477470 100644 --- a/tests/io_mock.h +++ b/tests/io_mock.h @@ -102,6 +102,7 @@ struct io_mock { FILE* (*fopen)(void *state, const char *pathname, const char *mode); char* (*fgets)(void *state, char *buf, int len, FILE *fp); size_t (*fread)(void *state, void *buf, size_t size, size_t len, FILE *fp); + int (*fprintf)(void *state, FILE *fp, const char *fmt, va_list args); int (*fclose)(void *state, FILE *fp); }; diff --git a/tests/meson.build b/tests/meson.build index 5bb6ac991..2f0fc67a2 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -56,6 +56,7 @@ mocks = [ '-Wl,--wrap=fsync', '-Wl,--wrap=fread', '-Wl,--wrap=fgets', + '-Wl,--wrap=fprintf', '-Wl,--wrap=fclose', '-Wl,--wrap=feof', '-Wl,--wrap=ferror', diff --git a/tests/tests.c b/tests/tests.c index a4a312e2f..06dc12fae 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -236,6 +236,20 @@ int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size) return 0; } +int __wrap_fprintf(FILE *fp, const char *fmt, ...) +{ + LOG_ME; + if (get_io() && get_io()->fprintf) { + va_list args; + int out; + va_start(args, fmt); + out = get_io()->fprintf(get_io()->state, fp, fmt, args); + va_end(args); + return out; + } + return 0; +} + int __wrap_fclose(FILE *fp) { LOG_ME; -- cgit v1.2.3