Edward O'Callaghan has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/62777 )
Change subject: tests/: Factor out all link-time wrapped func ......................................................................
tests/: Factor out all link-time wrapped func
Situate all the link-time wrapped functions into their own object file. This makes it easier to grok test code and keep all related harness supports together.
BUG=b:217629892,b:215255210 TEST=`ninja test`.
Change-Id: Ic5e18c9390c064a3112caa7f5778569ae478552d Signed-off-by: Edward O'Callaghan quasisec@google.com --- M tests/meson.build M tests/tests.c A tests/wraps.c 3 files changed, 325 insertions(+), 305 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/77/62777/1
diff --git a/tests/meson.build b/tests/meson.build index 610d1c6..0a90ed6 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -23,6 +23,7 @@ 'lifecycle.c', 'layout.c', 'chip.c', + 'wraps.c', ]
mocks = [ diff --git a/tests/tests.c b/tests/tests.c index 21cc1ed..3a3d381 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -14,318 +14,13 @@ */
#include <include/test.h> -#include "io_mock.h" #include "tests.h"
-#include <stdio.h> -#include <string.h> -#include <stdint.h> - void *not_null(void) { return (void *)NON_ZERO; }
-/* Workaround for https://github.com/clibs/cmocka/issues/17 */ -char *__wrap_strdup(const char *s) -{ - size_t len = strlen(s) + 1; - void *new = malloc(len); - if (new == NULL) - return NULL; - return (char *)memcpy(new, s, len); -} - -void __wrap_physunmap(void *virt_addr, size_t len) -{ - LOG_ME; -} - -void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len) -{ - LOG_ME; - return NULL; -} - -struct pci_dev mock_pci_dev = { - .device_id = NON_ZERO, -}; - -struct pci_dev *__wrap_pcidev_init(void *devs, int bar) -{ - LOG_ME; - return &mock_pci_dev; -} - -uintptr_t __wrap_pcidev_readbar(void *dev, int bar) -{ - LOG_ME; - return NON_ZERO; -} - -void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data) -{ - LOG_ME; -} - -uint8_t __wrap_sio_read(uint16_t port, uint8_t reg) -{ - LOG_ME; - return (uint8_t)mock(); -} - -int __wrap_open(const char *pathname, int flags) -{ - LOG_ME; - if (get_io() && get_io()->open) - return get_io()->open(get_io()->state, pathname, flags); - return NON_ZERO; -} - -int __wrap_open64(const char *pathname, int flags) -{ - LOG_ME; - if (get_io() && get_io()->open) - return get_io()->open(get_io()->state, pathname, flags); - return NON_ZERO; -} - -int __wrap_ioctl(int fd, unsigned long int request, ...) -{ - LOG_ME; - if (get_io() && get_io()->ioctl) { - va_list args; - int out; - va_start(args, request); - out = get_io()->ioctl(get_io()->state, fd, request, args); - va_end(args); - return out; - } - return 0; -} - -int __wrap_write(int fd, const void *buf, size_t sz) -{ - LOG_ME; - if (get_io() && get_io()->write) - return get_io()->write(get_io()->state, fd, buf, sz); - return sz; -} - -int __wrap_read(int fd, void *buf, size_t sz) -{ - LOG_ME; - if (get_io() && get_io()->read) - return get_io()->read(get_io()->state, fd, buf, sz); - return sz; -} - -FILE *__wrap_fopen(const char *pathname, const char *mode) -{ - LOG_ME; - if (get_io() && get_io()->fopen) - return get_io()->fopen(get_io()->state, pathname, mode); - return not_null(); -} - -FILE *__wrap_fopen64(const char *pathname, const char *mode) -{ - LOG_ME; - if (get_io() && get_io()->fopen) - return get_io()->fopen(get_io()->state, pathname, mode); - return not_null(); -} - -FILE *__wrap_fdopen(int fd, const char *mode) -{ - LOG_ME; - return not_null(); -} - -int __wrap_stat(const char *path, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap_stat64(const char *path, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap___xstat(const char *path, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap___xstat64(const char *path, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap_fstat(int fd, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap_fstat64(int fd, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap___fxstat(int fd, void *buf) -{ - LOG_ME; - return 0; -} - -int __wrap___fxstat64(int fd, void *buf) -{ - LOG_ME; - return 0; -} - -char *__wrap_fgets(char *buf, int len, FILE *fp) -{ - LOG_ME; - if (get_io() && get_io()->fgets) - return get_io()->fgets(get_io()->state, buf, len, fp); - return NULL; -} - -size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp) -{ - LOG_ME; - if (get_io() && get_io()->fread) - return get_io()->fread(get_io()->state, ptr, size, nmemb, fp); - return nmemb; -} - -size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp) -{ - LOG_ME; - return nmemb; -} - -int __wrap_fflush(FILE *fp) -{ - LOG_ME; - return 0; -} - -int __wrap_fileno(FILE *fp) -{ - LOG_ME; - return NON_ZERO; -} - -int __wrap_fsync(int fd) -{ - LOG_ME; - return 0; -} - -int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size) -{ - LOG_ME; - 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; - if (get_io() && get_io()->fclose) - return get_io()->fclose(get_io()->state, fp); - return 0; -} - -int __wrap_feof(FILE *fp) -{ - /* LOG_ME; */ - return 0; -} - -int __wrap_ferror(FILE *fp) -{ - /* LOG_ME; */ - return 0; -} -void __wrap_clearerr(FILE *fp) -{ - /* LOG_ME; */ - return; -} - -int __wrap_rget_io_perms(void) -{ - LOG_ME; - return 0; -} - -void __wrap_test_outb(unsigned char value, unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->outb) - get_io()->outb(get_io()->state, value, port); -} - -unsigned char __wrap_test_inb(unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->inb) - return get_io()->inb(get_io()->state, port); - return 0; -} - -void __wrap_test_outw(unsigned short value, unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->outw) - get_io()->outw(get_io()->state, value, port); -} - -unsigned short __wrap_test_inw(unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->inw) - return get_io()->inw(get_io()->state, port); - return 0; -} - -void __wrap_test_outl(unsigned int value, unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->outl) - get_io()->outl(get_io()->state, value, port); -} - -unsigned int __wrap_test_inl(unsigned short port) -{ - /* LOG_ME; */ - if (get_io() && get_io()->inl) - return get_io()->inl(get_io()->state, port); - return 0; -} - int main(void) { int ret = 0; diff --git a/tests/wraps.c b/tests/wraps.c new file mode 100644 index 0000000..f3fe343 --- /dev/null +++ b/tests/wraps.c @@ -0,0 +1,324 @@ +/* + * This file is part of the flashrom project. + * + * Copyright 2021-2022 Google LLC + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <include/test.h> + +#include <stdio.h> +#include <string.h> +#include <stdint.h> + +#include "io_mock.h" + + +/* Workaround for https://github.com/clibs/cmocka/issues/17 */ +char *__wrap_strdup(const char *s) +{ + size_t len = strlen(s) + 1; + void *new = malloc(len); + if (new == NULL) + return NULL; + return (char *)memcpy(new, s, len); +} + +void __wrap_physunmap(void *virt_addr, size_t len) +{ + LOG_ME; +} + +void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len) +{ + LOG_ME; + return NULL; +} + +struct pci_dev mock_pci_dev = { + .device_id = NON_ZERO, +}; + +struct pci_dev *__wrap_pcidev_init(void *devs, int bar) +{ + LOG_ME; + return &mock_pci_dev; +} + +uintptr_t __wrap_pcidev_readbar(void *dev, int bar) +{ + LOG_ME; + return NON_ZERO; +} + +void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data) +{ + LOG_ME; +} + +uint8_t __wrap_sio_read(uint16_t port, uint8_t reg) +{ + LOG_ME; + return (uint8_t)mock(); +} + +int __wrap_open(const char *pathname, int flags) +{ + LOG_ME; + if (get_io() && get_io()->open) + return get_io()->open(get_io()->state, pathname, flags); + return NON_ZERO; +} + +int __wrap_open64(const char *pathname, int flags) +{ + LOG_ME; + if (get_io() && get_io()->open) + return get_io()->open(get_io()->state, pathname, flags); + return NON_ZERO; +} + +int __wrap_ioctl(int fd, unsigned long int request, ...) +{ + LOG_ME; + if (get_io() && get_io()->ioctl) { + va_list args; + int out; + va_start(args, request); + out = get_io()->ioctl(get_io()->state, fd, request, args); + va_end(args); + return out; + } + return 0; +} + +int __wrap_write(int fd, const void *buf, size_t sz) +{ + LOG_ME; + if (get_io() && get_io()->write) + return get_io()->write(get_io()->state, fd, buf, sz); + return sz; +} + +int __wrap_read(int fd, void *buf, size_t sz) +{ + LOG_ME; + if (get_io() && get_io()->read) + return get_io()->read(get_io()->state, fd, buf, sz); + return sz; +} + +FILE *__wrap_fopen(const char *pathname, const char *mode) +{ + LOG_ME; + if (get_io() && get_io()->fopen) + return get_io()->fopen(get_io()->state, pathname, mode); + return not_null(); +} + +FILE *__wrap_fopen64(const char *pathname, const char *mode) +{ + LOG_ME; + if (get_io() && get_io()->fopen) + return get_io()->fopen(get_io()->state, pathname, mode); + return not_null(); +} + +FILE *__wrap_fdopen(int fd, const char *mode) +{ + LOG_ME; + return not_null(); +} + +int __wrap_stat(const char *path, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap_stat64(const char *path, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap___xstat(const char *path, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap___xstat64(const char *path, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap_fstat(int fd, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap_fstat64(int fd, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap___fxstat(int fd, void *buf) +{ + LOG_ME; + return 0; +} + +int __wrap___fxstat64(int fd, void *buf) +{ + LOG_ME; + return 0; +} + +char *__wrap_fgets(char *buf, int len, FILE *fp) +{ + LOG_ME; + if (get_io() && get_io()->fgets) + return get_io()->fgets(get_io()->state, buf, len, fp); + return NULL; +} + +size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp) +{ + LOG_ME; + if (get_io() && get_io()->fread) + return get_io()->fread(get_io()->state, ptr, size, nmemb, fp); + return nmemb; +} + +size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp) +{ + LOG_ME; + return nmemb; +} + +int __wrap_fflush(FILE *fp) +{ + LOG_ME; + return 0; +} + +int __wrap_fileno(FILE *fp) +{ + LOG_ME; + return NON_ZERO; +} + +int __wrap_fsync(int fd) +{ + LOG_ME; + return 0; +} + +int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size) +{ + LOG_ME; + 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; + if (get_io() && get_io()->fclose) + return get_io()->fclose(get_io()->state, fp); + return 0; +} + +int __wrap_feof(FILE *fp) +{ + /* LOG_ME; */ + return 0; +} + +int __wrap_ferror(FILE *fp) +{ + /* LOG_ME; */ + return 0; +} + +void __wrap_clearerr(FILE *fp) +{ + /* LOG_ME; */ + return; +} + +int __wrap_rget_io_perms(void) +{ + LOG_ME; + return 0; +} + +void __wrap_test_outb(unsigned char value, unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->outb) + get_io()->outb(get_io()->state, value, port); +} + +unsigned char __wrap_test_inb(unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->inb) + return get_io()->inb(get_io()->state, port); + return 0; +} + +void __wrap_test_outw(unsigned short value, unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->outw) + get_io()->outw(get_io()->state, value, port); +} + +unsigned short __wrap_test_inw(unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->inw) + return get_io()->inw(get_io()->state, port); + return 0; +} + +void __wrap_test_outl(unsigned int value, unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->outl) + get_io()->outl(get_io()->state, value, port); +} + +unsigned int __wrap_test_inl(unsigned short port) +{ + /* LOG_ME; */ + if (get_io() && get_io()->inl) + return get_io()->inl(get_io()->state, port); + return 0; +}