diff options
author | Nikolai Artemiev <nartemiev@google.com> | 2022-02-08 16:56:02 +1100 |
---|---|---|
committer | Edward O'Callaghan <quasisec@chromium.org> | 2022-02-14 02:32:04 +0000 |
commit | 94f91ef864b56ba71445b3e4d84f4b12f066aed2 (patch) | |
tree | 441b021a80093694dc054ed1fa84e351f9ce0621 | |
parent | a8be6dace8ace92210c6423ca26c545c8b9e991f (diff) | |
download | flashrom-94f91ef864b56ba71445b3e4d84f4b12f066aed2.tar.gz flashrom-94f91ef864b56ba71445b3e4d84f4b12f066aed2.tar.bz2 flashrom-94f91ef864b56ba71445b3e4d84f4b12f066aed2.zip |
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 <nartemiev@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/61708
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Edward O'Callaghan <quasisec@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r-- | tests/io_mock.h | 1 | ||||
-rw-r--r-- | tests/meson.build | 1 | ||||
-rw-r--r-- | tests/tests.c | 14 |
3 files changed, 16 insertions, 0 deletions
diff --git a/tests/io_mock.h b/tests/io_mock.h index 854ddd94..87347747 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 5bb6ac99..2f0fc67a 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 a4a312e2..06dc12fa 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; |