mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-10-31 05:10:41 +01:00 
			
		
		
		
	tests: Use regular cmocka wraps for hwaccess functions
hwaccess functions used to be static inline functions and needed a special treatment so that they could be mocked for unit tests. This has changed, see include/hwaccess_x86_io.h now the functions are not static inline anymore, and it is possible to use regular cmocka wraps. Fixes https://ticket.coreboot.org/issues/385 BUG=b:181803212 TEST=ninja test Change-Id: Iafce071ea7ad5bcfdebbba968699d5743705f8e0 Signed-off-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/64881 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Joursoir <chat@joursoir.net> Reviewed-by: Thomas Heijligen <src@posteo.de>
This commit is contained in:
		| @@ -512,7 +512,6 @@ cmocka_dep = dependency( | ||||
|     compile_args : [ | ||||
|       '-includestdlib.h', | ||||
|       '-includeunittest_env.h', | ||||
|       '-includehwaccess_x86_io_unittest.h' | ||||
|     ], | ||||
|     dependencies : [ | ||||
|       deps, | ||||
|   | ||||
| @@ -1,64 +0,0 @@ | ||||
| /* | ||||
|  * This file is part of the flashrom project. | ||||
|  * | ||||
|  * Copyright 2021 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. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This header is used instead of hwaccess_x86_io.h for unit tests | ||||
|  * (see flashrom_test_dep in meson.build). | ||||
|  * | ||||
|  * There is no hardware in unit test environment and all hardware operations | ||||
|  * need to be mocked. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * The same guard is used intentionally for hwaccess_x86_io.h and | ||||
|  * hwaccess_x86_io_unittest.h. When build is made for the test environment, | ||||
|  * hwaccess_x86_io_unittest.h is included first, and it effectively | ||||
|  * replaces hwaccess_x86_io.h. | ||||
|  */ | ||||
| #ifndef __HWACCESS_X86_IO_H__ | ||||
| #define __HWACCESS_X86_IO_H__ 1 | ||||
|  | ||||
| #define OUTB(v, p) test_outb(v, p) | ||||
| #define OUTW(v, p) test_outw(v, p) | ||||
| #define OUTL(v, p) test_outl(v, p) | ||||
| #define INB(p) test_inb(p) | ||||
| #define INW(p) test_inw(p) | ||||
| #define INL(p) test_inl(p) | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| int rget_io_perms(void); | ||||
|  | ||||
| /* | ||||
|  * Dummy implementation of iopl from sys/io.h. | ||||
|  * sys/io.h by itself is platform-specific, so instead of including | ||||
|  * the header we just have this dummy function, which is sufficient | ||||
|  * for test purposes. | ||||
|  */ | ||||
| static inline int iopl(int level) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* All functions below are mocked in unit tests. */ | ||||
|  | ||||
| void test_outb(uint8_t value, uint16_t port); | ||||
| uint8_t test_inb(uint16_t port); | ||||
| void test_outw(uint16_t value, uint16_t port); | ||||
| uint16_t test_inw(uint16_t port); | ||||
| void test_outl(uint32_t value, uint16_t port); | ||||
| uint32_t test_inl(uint16_t port); | ||||
|  | ||||
| #endif /* !__HWACCESS_X86_IO_H__ */ | ||||
| @@ -67,12 +67,12 @@ mocks = [ | ||||
|   '-Wl,--wrap=clearerr', | ||||
|   '-Wl,--wrap=setvbuf', | ||||
|   '-Wl,--wrap=rget_io_perms', | ||||
|   '-Wl,--wrap=test_outb', | ||||
|   '-Wl,--wrap=test_inb', | ||||
|   '-Wl,--wrap=test_outw', | ||||
|   '-Wl,--wrap=test_inw', | ||||
|   '-Wl,--wrap=test_outl', | ||||
|   '-Wl,--wrap=test_inl', | ||||
|   '-Wl,--wrap=OUTB', | ||||
|   '-Wl,--wrap=INB', | ||||
|   '-Wl,--wrap=OUTW', | ||||
|   '-Wl,--wrap=INW', | ||||
|   '-Wl,--wrap=OUTL', | ||||
|   '-Wl,--wrap=INL', | ||||
|   '-Wl,--wrap=usb_dev_get_by_vid_pid_number', | ||||
|   '-Wl,--wrap=libusb_init', | ||||
|   '-Wl,--wrap=libusb_open', | ||||
|   | ||||
| @@ -321,14 +321,14 @@ int __wrap_rget_io_perms(void) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void __wrap_test_outb(unsigned char value, unsigned short port) | ||||
| void __wrap_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) | ||||
| unsigned char __wrap_INB(unsigned short port) | ||||
| { | ||||
| 	/* LOG_ME; */ | ||||
| 	if (get_io() && get_io()->inb) | ||||
| @@ -336,14 +336,14 @@ unsigned char __wrap_test_inb(unsigned short port) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void __wrap_test_outw(unsigned short value, unsigned short port) | ||||
| void __wrap_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) | ||||
| unsigned short __wrap_INW(unsigned short port) | ||||
| { | ||||
| 	/* LOG_ME; */ | ||||
| 	if (get_io() && get_io()->inw) | ||||
| @@ -351,14 +351,14 @@ unsigned short __wrap_test_inw(unsigned short port) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void __wrap_test_outl(unsigned int value, unsigned short port) | ||||
| void __wrap_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) | ||||
| unsigned int __wrap_INL(unsigned short port) | ||||
| { | ||||
| 	/* LOG_ME; */ | ||||
| 	if (get_io() && get_io()->inl) | ||||
|   | ||||
| @@ -58,12 +58,12 @@ int __wrap_feof(FILE *fp); | ||||
| int __wrap_ferror(FILE *fp); | ||||
| void __wrap_clearerr(FILE *fp); | ||||
| int __wrap_rget_io_perms(void); | ||||
| void __wrap_test_outb(unsigned char value, unsigned short port); | ||||
| unsigned char __wrap_test_inb(unsigned short port); | ||||
| void __wrap_test_outw(unsigned short value, unsigned short port); | ||||
| unsigned short __wrap_test_inw(unsigned short port); | ||||
| void __wrap_test_outl(unsigned int value, unsigned short port); | ||||
| unsigned int __wrap_test_inl(unsigned short port); | ||||
| void __wrap_OUTB(unsigned char value, unsigned short port); | ||||
| unsigned char __wrap_INB(unsigned short port); | ||||
| void __wrap_OUTW(unsigned short value, unsigned short port); | ||||
| unsigned short __wrap_INW(unsigned short port); | ||||
| void __wrap_OUTL(unsigned int value, unsigned short port); | ||||
| unsigned int __wrap_INL(unsigned short port); | ||||
| int __wrap_spi_send_command(const struct flashctx *flash, | ||||
| 		unsigned int writecnt, unsigned int readcnt, | ||||
| 		const unsigned char *writearr, unsigned char *readarr); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Anastasia Klimchuk
					Anastasia Klimchuk