xref: /aosp_15_r20/external/flashrom/tests/tests.c (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker /*
2*0d6140beSAndroid Build Coastguard Worker  * This file is part of the flashrom project.
3*0d6140beSAndroid Build Coastguard Worker  *
4*0d6140beSAndroid Build Coastguard Worker  * Copyright 2020 Google LLC
5*0d6140beSAndroid Build Coastguard Worker  *
6*0d6140beSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify
7*0d6140beSAndroid Build Coastguard Worker  * it under the terms of the GNU General Public License as published by
8*0d6140beSAndroid Build Coastguard Worker  * the Free Software Foundation; version 2 of the License.
9*0d6140beSAndroid Build Coastguard Worker  *
10*0d6140beSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
11*0d6140beSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*0d6140beSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*0d6140beSAndroid Build Coastguard Worker  * GNU General Public License for more details.
14*0d6140beSAndroid Build Coastguard Worker  */
15*0d6140beSAndroid Build Coastguard Worker 
16*0d6140beSAndroid Build Coastguard Worker #include <include/test.h>
17*0d6140beSAndroid Build Coastguard Worker #include "io_mock.h"
18*0d6140beSAndroid Build Coastguard Worker #include "tests.h"
19*0d6140beSAndroid Build Coastguard Worker #include "wraps.h"
20*0d6140beSAndroid Build Coastguard Worker #include "io_real.h"
21*0d6140beSAndroid Build Coastguard Worker 
22*0d6140beSAndroid Build Coastguard Worker #include <stdio.h>
23*0d6140beSAndroid Build Coastguard Worker #include <string.h>
24*0d6140beSAndroid Build Coastguard Worker #include <stdint.h>
25*0d6140beSAndroid Build Coastguard Worker #include <pthread.h>
26*0d6140beSAndroid Build Coastguard Worker 
27*0d6140beSAndroid Build Coastguard Worker void *not_null(void)
28*0d6140beSAndroid Build Coastguard Worker {
29*0d6140beSAndroid Build Coastguard Worker 	return (void *)MOCK_FD;
30*0d6140beSAndroid Build Coastguard Worker }
31*0d6140beSAndroid Build Coastguard Worker 
32*0d6140beSAndroid Build Coastguard Worker /* Workaround for https://github.com/clibs/cmocka/issues/17 */
33*0d6140beSAndroid Build Coastguard Worker char *__wrap_strdup(const char *s)
34*0d6140beSAndroid Build Coastguard Worker {
35*0d6140beSAndroid Build Coastguard Worker 	size_t len = strlen(s) + 1;
36*0d6140beSAndroid Build Coastguard Worker 	void *new = malloc(len);
37*0d6140beSAndroid Build Coastguard Worker 	if (new == NULL)
38*0d6140beSAndroid Build Coastguard Worker 		return NULL;
39*0d6140beSAndroid Build Coastguard Worker 	return (char *)memcpy(new, s, len);
40*0d6140beSAndroid Build Coastguard Worker }
41*0d6140beSAndroid Build Coastguard Worker 
42*0d6140beSAndroid Build Coastguard Worker void __wrap_physunmap(void *virt_addr, size_t len)
43*0d6140beSAndroid Build Coastguard Worker {
44*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
45*0d6140beSAndroid Build Coastguard Worker }
46*0d6140beSAndroid Build Coastguard Worker 
47*0d6140beSAndroid Build Coastguard Worker void *__wrap_physmap(const char *descr, uintptr_t phys_addr, size_t len)
48*0d6140beSAndroid Build Coastguard Worker {
49*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
50*0d6140beSAndroid Build Coastguard Worker 	return NULL;
51*0d6140beSAndroid Build Coastguard Worker }
52*0d6140beSAndroid Build Coastguard Worker 
53*0d6140beSAndroid Build Coastguard Worker struct pci_dev mock_pci_dev = {
54*0d6140beSAndroid Build Coastguard Worker 	.device_id = NON_ZERO,
55*0d6140beSAndroid Build Coastguard Worker };
56*0d6140beSAndroid Build Coastguard Worker 
57*0d6140beSAndroid Build Coastguard Worker struct pci_dev *__wrap_pcidev_init(const struct programmer_cfg *cfg, void *devs, int bar)
58*0d6140beSAndroid Build Coastguard Worker {
59*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
60*0d6140beSAndroid Build Coastguard Worker 	return &mock_pci_dev;
61*0d6140beSAndroid Build Coastguard Worker }
62*0d6140beSAndroid Build Coastguard Worker 
63*0d6140beSAndroid Build Coastguard Worker uintptr_t __wrap_pcidev_readbar(void *dev, int bar)
64*0d6140beSAndroid Build Coastguard Worker {
65*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
66*0d6140beSAndroid Build Coastguard Worker 	return NON_ZERO;
67*0d6140beSAndroid Build Coastguard Worker }
68*0d6140beSAndroid Build Coastguard Worker 
69*0d6140beSAndroid Build Coastguard Worker void __wrap_sio_write(uint16_t port, uint8_t reg, uint8_t data)
70*0d6140beSAndroid Build Coastguard Worker {
71*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
72*0d6140beSAndroid Build Coastguard Worker }
73*0d6140beSAndroid Build Coastguard Worker 
74*0d6140beSAndroid Build Coastguard Worker uint8_t __wrap_sio_read(uint16_t port, uint8_t reg)
75*0d6140beSAndroid Build Coastguard Worker {
76*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
77*0d6140beSAndroid Build Coastguard Worker 	return (uint8_t)mock();
78*0d6140beSAndroid Build Coastguard Worker }
79*0d6140beSAndroid Build Coastguard Worker 
80*0d6140beSAndroid Build Coastguard Worker static int mock_open(const char *pathname, int flags, mode_t mode)
81*0d6140beSAndroid Build Coastguard Worker {
82*0d6140beSAndroid Build Coastguard Worker 	maybe_unmock_io(pathname);
83*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_open)
84*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_open(get_io()->state, pathname, flags, mode);
85*0d6140beSAndroid Build Coastguard Worker 
86*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->fallback_open_state) {
87*0d6140beSAndroid Build Coastguard Worker 		struct io_mock_fallback_open_state *io_state;
88*0d6140beSAndroid Build Coastguard Worker 		unsigned int open_state_flags;
89*0d6140beSAndroid Build Coastguard Worker 
90*0d6140beSAndroid Build Coastguard Worker 		io_state = get_io()->fallback_open_state;
91*0d6140beSAndroid Build Coastguard Worker 		assert_true(io_state->noc < MAX_MOCK_OPEN);
92*0d6140beSAndroid Build Coastguard Worker 		assert_non_null(io_state->paths[io_state->noc]);
93*0d6140beSAndroid Build Coastguard Worker 		assert_string_equal(pathname, io_state->paths[io_state->noc]);
94*0d6140beSAndroid Build Coastguard Worker 		open_state_flags = io_state->flags[io_state->noc];
95*0d6140beSAndroid Build Coastguard Worker 		assert_int_equal(flags & open_state_flags, open_state_flags);
96*0d6140beSAndroid Build Coastguard Worker 		io_state->noc++; // proceed to the next path upon next call.
97*0d6140beSAndroid Build Coastguard Worker 	}
98*0d6140beSAndroid Build Coastguard Worker 
99*0d6140beSAndroid Build Coastguard Worker 	return MOCK_FD;
100*0d6140beSAndroid Build Coastguard Worker }
101*0d6140beSAndroid Build Coastguard Worker 
102*0d6140beSAndroid Build Coastguard Worker int __wrap_open(const char *pathname, int flags, ...)
103*0d6140beSAndroid Build Coastguard Worker {
104*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
105*0d6140beSAndroid Build Coastguard Worker 	int mode = 0;
106*0d6140beSAndroid Build Coastguard Worker 	if (flags & O_CREAT) {
107*0d6140beSAndroid Build Coastguard Worker 		va_list ap;
108*0d6140beSAndroid Build Coastguard Worker 		va_start(ap, flags);
109*0d6140beSAndroid Build Coastguard Worker 		mode = va_arg(ap, int);
110*0d6140beSAndroid Build Coastguard Worker 		va_end(ap);
111*0d6140beSAndroid Build Coastguard Worker 	}
112*0d6140beSAndroid Build Coastguard Worker 	return mock_open(pathname, flags, (mode_t) mode);
113*0d6140beSAndroid Build Coastguard Worker }
114*0d6140beSAndroid Build Coastguard Worker 
115*0d6140beSAndroid Build Coastguard Worker int __wrap_open64(const char *pathname, int flags, ...)
116*0d6140beSAndroid Build Coastguard Worker {
117*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
118*0d6140beSAndroid Build Coastguard Worker 	int mode = 0;
119*0d6140beSAndroid Build Coastguard Worker 	if (flags & O_CREAT) {
120*0d6140beSAndroid Build Coastguard Worker 		va_list ap;
121*0d6140beSAndroid Build Coastguard Worker 		va_start(ap, flags);
122*0d6140beSAndroid Build Coastguard Worker 		mode = va_arg(ap, int);
123*0d6140beSAndroid Build Coastguard Worker 		va_end(ap);
124*0d6140beSAndroid Build Coastguard Worker 	}
125*0d6140beSAndroid Build Coastguard Worker 	return mock_open(pathname, flags, (mode_t) mode);
126*0d6140beSAndroid Build Coastguard Worker }
127*0d6140beSAndroid Build Coastguard Worker 
128*0d6140beSAndroid Build Coastguard Worker int __wrap___open64_2(const char *pathname, int flags, ...)
129*0d6140beSAndroid Build Coastguard Worker {
130*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
131*0d6140beSAndroid Build Coastguard Worker 	int mode = 0;
132*0d6140beSAndroid Build Coastguard Worker 	if (flags & O_CREAT) {
133*0d6140beSAndroid Build Coastguard Worker 		va_list ap;
134*0d6140beSAndroid Build Coastguard Worker 		va_start(ap, flags);
135*0d6140beSAndroid Build Coastguard Worker 		mode = va_arg(ap, int);
136*0d6140beSAndroid Build Coastguard Worker 		va_end(ap);
137*0d6140beSAndroid Build Coastguard Worker 	}
138*0d6140beSAndroid Build Coastguard Worker 	return mock_open(pathname, flags, (mode_t) mode);
139*0d6140beSAndroid Build Coastguard Worker }
140*0d6140beSAndroid Build Coastguard Worker 
141*0d6140beSAndroid Build Coastguard Worker int __wrap_ioctl(int fd, unsigned long int request, ...)
142*0d6140beSAndroid Build Coastguard Worker {
143*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
144*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_ioctl) {
145*0d6140beSAndroid Build Coastguard Worker 		va_list args;
146*0d6140beSAndroid Build Coastguard Worker 		int out;
147*0d6140beSAndroid Build Coastguard Worker 		va_start(args, request);
148*0d6140beSAndroid Build Coastguard Worker 		out = get_io()->iom_ioctl(get_io()->state, fd, request, args);
149*0d6140beSAndroid Build Coastguard Worker 		va_end(args);
150*0d6140beSAndroid Build Coastguard Worker 		return out;
151*0d6140beSAndroid Build Coastguard Worker 	}
152*0d6140beSAndroid Build Coastguard Worker 	return 0;
153*0d6140beSAndroid Build Coastguard Worker }
154*0d6140beSAndroid Build Coastguard Worker 
155*0d6140beSAndroid Build Coastguard Worker int __wrap_write(int fd, const void *buf, size_t sz)
156*0d6140beSAndroid Build Coastguard Worker {
157*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
158*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_write)
159*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_write(get_io()->state, fd, buf, sz);
160*0d6140beSAndroid Build Coastguard Worker 	return sz;
161*0d6140beSAndroid Build Coastguard Worker }
162*0d6140beSAndroid Build Coastguard Worker 
163*0d6140beSAndroid Build Coastguard Worker int __wrap_read(int fd, void *buf, size_t sz)
164*0d6140beSAndroid Build Coastguard Worker {
165*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
166*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_read)
167*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_read(get_io()->state, fd, buf, sz);
168*0d6140beSAndroid Build Coastguard Worker 	return sz;
169*0d6140beSAndroid Build Coastguard Worker }
170*0d6140beSAndroid Build Coastguard Worker 
171*0d6140beSAndroid Build Coastguard Worker FILE *__wrap_fopen(const char *pathname, const char *mode)
172*0d6140beSAndroid Build Coastguard Worker {
173*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
174*0d6140beSAndroid Build Coastguard Worker 	maybe_unmock_io(pathname);
175*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fopen)
176*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fopen(get_io()->state, pathname, mode);
177*0d6140beSAndroid Build Coastguard Worker 	return not_null();
178*0d6140beSAndroid Build Coastguard Worker }
179*0d6140beSAndroid Build Coastguard Worker 
180*0d6140beSAndroid Build Coastguard Worker FILE *__wrap_fopen64(const char *pathname, const char *mode)
181*0d6140beSAndroid Build Coastguard Worker {
182*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
183*0d6140beSAndroid Build Coastguard Worker 	maybe_unmock_io(pathname);
184*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fopen)
185*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fopen(get_io()->state, pathname, mode);
186*0d6140beSAndroid Build Coastguard Worker 	return not_null();
187*0d6140beSAndroid Build Coastguard Worker }
188*0d6140beSAndroid Build Coastguard Worker 
189*0d6140beSAndroid Build Coastguard Worker FILE *__wrap_fdopen(int fd, const char *mode)
190*0d6140beSAndroid Build Coastguard Worker {
191*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
192*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fdopen)
193*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fdopen(get_io()->state, fd, mode);
194*0d6140beSAndroid Build Coastguard Worker 	return not_null();
195*0d6140beSAndroid Build Coastguard Worker }
196*0d6140beSAndroid Build Coastguard Worker 
197*0d6140beSAndroid Build Coastguard Worker int __wrap_stat(const char *path, void *buf)
198*0d6140beSAndroid Build Coastguard Worker {
199*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
200*0d6140beSAndroid Build Coastguard Worker 	return 1;
201*0d6140beSAndroid Build Coastguard Worker }
202*0d6140beSAndroid Build Coastguard Worker 
203*0d6140beSAndroid Build Coastguard Worker int __wrap_stat64(const char *path, void *buf)
204*0d6140beSAndroid Build Coastguard Worker {
205*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
206*0d6140beSAndroid Build Coastguard Worker 	return 1;
207*0d6140beSAndroid Build Coastguard Worker }
208*0d6140beSAndroid Build Coastguard Worker 
209*0d6140beSAndroid Build Coastguard Worker int __wrap___xstat(const char *path, void *buf)
210*0d6140beSAndroid Build Coastguard Worker {
211*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
212*0d6140beSAndroid Build Coastguard Worker 	return 0;
213*0d6140beSAndroid Build Coastguard Worker }
214*0d6140beSAndroid Build Coastguard Worker 
215*0d6140beSAndroid Build Coastguard Worker int __wrap___xstat64(const char *path, void *buf)
216*0d6140beSAndroid Build Coastguard Worker {
217*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
218*0d6140beSAndroid Build Coastguard Worker 	return 0;
219*0d6140beSAndroid Build Coastguard Worker }
220*0d6140beSAndroid Build Coastguard Worker 
221*0d6140beSAndroid Build Coastguard Worker int __wrap_fstat(int fd, void *buf)
222*0d6140beSAndroid Build Coastguard Worker {
223*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
224*0d6140beSAndroid Build Coastguard Worker 	return 0;
225*0d6140beSAndroid Build Coastguard Worker }
226*0d6140beSAndroid Build Coastguard Worker 
227*0d6140beSAndroid Build Coastguard Worker int __wrap_fstat64(int fd, void *buf)
228*0d6140beSAndroid Build Coastguard Worker {
229*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
230*0d6140beSAndroid Build Coastguard Worker 	return 0;
231*0d6140beSAndroid Build Coastguard Worker }
232*0d6140beSAndroid Build Coastguard Worker 
233*0d6140beSAndroid Build Coastguard Worker int __wrap___fstat50(int fd, void *buf)
234*0d6140beSAndroid Build Coastguard Worker {
235*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
236*0d6140beSAndroid Build Coastguard Worker 	return 0;
237*0d6140beSAndroid Build Coastguard Worker }
238*0d6140beSAndroid Build Coastguard Worker 
239*0d6140beSAndroid Build Coastguard Worker int __wrap___fxstat(int fd, void *buf)
240*0d6140beSAndroid Build Coastguard Worker {
241*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
242*0d6140beSAndroid Build Coastguard Worker 	return 0;
243*0d6140beSAndroid Build Coastguard Worker }
244*0d6140beSAndroid Build Coastguard Worker 
245*0d6140beSAndroid Build Coastguard Worker int __wrap___fxstat64(int fd, void *buf)
246*0d6140beSAndroid Build Coastguard Worker {
247*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
248*0d6140beSAndroid Build Coastguard Worker 	return 0;
249*0d6140beSAndroid Build Coastguard Worker }
250*0d6140beSAndroid Build Coastguard Worker 
251*0d6140beSAndroid Build Coastguard Worker char *__wrap_fgets(char *buf, int len, FILE *fp)
252*0d6140beSAndroid Build Coastguard Worker {
253*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
254*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fgets)
255*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fgets(get_io()->state, buf, len, fp);
256*0d6140beSAndroid Build Coastguard Worker 	return NULL;
257*0d6140beSAndroid Build Coastguard Worker }
258*0d6140beSAndroid Build Coastguard Worker 
259*0d6140beSAndroid Build Coastguard Worker size_t __wrap_fread(void *ptr, size_t size, size_t nmemb, FILE *fp)
260*0d6140beSAndroid Build Coastguard Worker {
261*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
262*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fread)
263*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fread(get_io()->state, ptr, size, nmemb, fp);
264*0d6140beSAndroid Build Coastguard Worker 	return nmemb;
265*0d6140beSAndroid Build Coastguard Worker }
266*0d6140beSAndroid Build Coastguard Worker 
267*0d6140beSAndroid Build Coastguard Worker size_t __wrap_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *fp)
268*0d6140beSAndroid Build Coastguard Worker {
269*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
270*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fwrite)
271*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fwrite(get_io()->state, ptr, size, nmemb, fp);
272*0d6140beSAndroid Build Coastguard Worker 	return nmemb;
273*0d6140beSAndroid Build Coastguard Worker }
274*0d6140beSAndroid Build Coastguard Worker 
275*0d6140beSAndroid Build Coastguard Worker int __wrap_fflush(FILE *fp)
276*0d6140beSAndroid Build Coastguard Worker {
277*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
278*0d6140beSAndroid Build Coastguard Worker 	return 0;
279*0d6140beSAndroid Build Coastguard Worker }
280*0d6140beSAndroid Build Coastguard Worker 
281*0d6140beSAndroid Build Coastguard Worker int __wrap_fileno(FILE *fp)
282*0d6140beSAndroid Build Coastguard Worker {
283*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
284*0d6140beSAndroid Build Coastguard Worker 	return MOCK_FD;
285*0d6140beSAndroid Build Coastguard Worker }
286*0d6140beSAndroid Build Coastguard Worker 
287*0d6140beSAndroid Build Coastguard Worker int __wrap_fsync(int fd)
288*0d6140beSAndroid Build Coastguard Worker {
289*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
290*0d6140beSAndroid Build Coastguard Worker 	return 0;
291*0d6140beSAndroid Build Coastguard Worker }
292*0d6140beSAndroid Build Coastguard Worker 
293*0d6140beSAndroid Build Coastguard Worker int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size)
294*0d6140beSAndroid Build Coastguard Worker {
295*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
296*0d6140beSAndroid Build Coastguard Worker 	return 0;
297*0d6140beSAndroid Build Coastguard Worker }
298*0d6140beSAndroid Build Coastguard Worker 
299*0d6140beSAndroid Build Coastguard Worker int __wrap_fprintf(FILE *fp, const char *fmt, ...)
300*0d6140beSAndroid Build Coastguard Worker {
301*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
302*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fprintf) {
303*0d6140beSAndroid Build Coastguard Worker 		va_list args;
304*0d6140beSAndroid Build Coastguard Worker 		int out;
305*0d6140beSAndroid Build Coastguard Worker 		va_start(args, fmt);
306*0d6140beSAndroid Build Coastguard Worker 		out = get_io()->iom_fprintf(get_io()->state, fp, fmt, args);
307*0d6140beSAndroid Build Coastguard Worker 		va_end(args);
308*0d6140beSAndroid Build Coastguard Worker 		return out;
309*0d6140beSAndroid Build Coastguard Worker 	}
310*0d6140beSAndroid Build Coastguard Worker 	return 0;
311*0d6140beSAndroid Build Coastguard Worker }
312*0d6140beSAndroid Build Coastguard Worker 
313*0d6140beSAndroid Build Coastguard Worker int __wrap_fclose(FILE *fp)
314*0d6140beSAndroid Build Coastguard Worker {
315*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
316*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->iom_fclose)
317*0d6140beSAndroid Build Coastguard Worker 		return get_io()->iom_fclose(get_io()->state, fp);
318*0d6140beSAndroid Build Coastguard Worker 	return 0;
319*0d6140beSAndroid Build Coastguard Worker }
320*0d6140beSAndroid Build Coastguard Worker 
321*0d6140beSAndroid Build Coastguard Worker int __wrap_feof(FILE *fp)
322*0d6140beSAndroid Build Coastguard Worker {
323*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
324*0d6140beSAndroid Build Coastguard Worker 	return 0;
325*0d6140beSAndroid Build Coastguard Worker }
326*0d6140beSAndroid Build Coastguard Worker 
327*0d6140beSAndroid Build Coastguard Worker int __wrap_ferror(FILE *fp)
328*0d6140beSAndroid Build Coastguard Worker {
329*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
330*0d6140beSAndroid Build Coastguard Worker 	return 0;
331*0d6140beSAndroid Build Coastguard Worker }
332*0d6140beSAndroid Build Coastguard Worker 
333*0d6140beSAndroid Build Coastguard Worker int __wrap_flock(int fd, int operation)
334*0d6140beSAndroid Build Coastguard Worker {
335*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
336*0d6140beSAndroid Build Coastguard Worker 	return 0;
337*0d6140beSAndroid Build Coastguard Worker }
338*0d6140beSAndroid Build Coastguard Worker 
339*0d6140beSAndroid Build Coastguard Worker int __wrap_ftruncate(int fd, off_t length)
340*0d6140beSAndroid Build Coastguard Worker {
341*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
342*0d6140beSAndroid Build Coastguard Worker 	return 0;
343*0d6140beSAndroid Build Coastguard Worker }
344*0d6140beSAndroid Build Coastguard Worker 
345*0d6140beSAndroid Build Coastguard Worker void __wrap_clearerr(FILE *fp)
346*0d6140beSAndroid Build Coastguard Worker {
347*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
348*0d6140beSAndroid Build Coastguard Worker 	return;
349*0d6140beSAndroid Build Coastguard Worker }
350*0d6140beSAndroid Build Coastguard Worker 
351*0d6140beSAndroid Build Coastguard Worker int __wrap_rget_io_perms(void)
352*0d6140beSAndroid Build Coastguard Worker {
353*0d6140beSAndroid Build Coastguard Worker 	LOG_ME;
354*0d6140beSAndroid Build Coastguard Worker 	return 0;
355*0d6140beSAndroid Build Coastguard Worker }
356*0d6140beSAndroid Build Coastguard Worker 
357*0d6140beSAndroid Build Coastguard Worker void __wrap_OUTB(unsigned char value, unsigned short port)
358*0d6140beSAndroid Build Coastguard Worker {
359*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
360*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->outb)
361*0d6140beSAndroid Build Coastguard Worker 		get_io()->outb(get_io()->state, value, port);
362*0d6140beSAndroid Build Coastguard Worker }
363*0d6140beSAndroid Build Coastguard Worker 
364*0d6140beSAndroid Build Coastguard Worker unsigned char __wrap_INB(unsigned short port)
365*0d6140beSAndroid Build Coastguard Worker {
366*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
367*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->inb)
368*0d6140beSAndroid Build Coastguard Worker 		return get_io()->inb(get_io()->state, port);
369*0d6140beSAndroid Build Coastguard Worker 	return 0;
370*0d6140beSAndroid Build Coastguard Worker }
371*0d6140beSAndroid Build Coastguard Worker 
372*0d6140beSAndroid Build Coastguard Worker void __wrap_OUTW(unsigned short value, unsigned short port)
373*0d6140beSAndroid Build Coastguard Worker {
374*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
375*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->outw)
376*0d6140beSAndroid Build Coastguard Worker 		get_io()->outw(get_io()->state, value, port);
377*0d6140beSAndroid Build Coastguard Worker }
378*0d6140beSAndroid Build Coastguard Worker 
379*0d6140beSAndroid Build Coastguard Worker unsigned short __wrap_INW(unsigned short port)
380*0d6140beSAndroid Build Coastguard Worker {
381*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
382*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->inw)
383*0d6140beSAndroid Build Coastguard Worker 		return get_io()->inw(get_io()->state, port);
384*0d6140beSAndroid Build Coastguard Worker 	return 0;
385*0d6140beSAndroid Build Coastguard Worker }
386*0d6140beSAndroid Build Coastguard Worker 
387*0d6140beSAndroid Build Coastguard Worker void __wrap_OUTL(unsigned int value, unsigned short port)
388*0d6140beSAndroid Build Coastguard Worker {
389*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
390*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->outl)
391*0d6140beSAndroid Build Coastguard Worker 		get_io()->outl(get_io()->state, value, port);
392*0d6140beSAndroid Build Coastguard Worker }
393*0d6140beSAndroid Build Coastguard Worker 
394*0d6140beSAndroid Build Coastguard Worker unsigned int __wrap_INL(unsigned short port)
395*0d6140beSAndroid Build Coastguard Worker {
396*0d6140beSAndroid Build Coastguard Worker 	/* LOG_ME; */
397*0d6140beSAndroid Build Coastguard Worker 	if (get_io() && get_io()->inl)
398*0d6140beSAndroid Build Coastguard Worker 		return get_io()->inl(get_io()->state, port);
399*0d6140beSAndroid Build Coastguard Worker 	return 0;
400*0d6140beSAndroid Build Coastguard Worker }
401*0d6140beSAndroid Build Coastguard Worker 
402*0d6140beSAndroid Build Coastguard Worker static void *doing_nothing(void *vargp) {
403*0d6140beSAndroid Build Coastguard Worker 	return NULL;
404*0d6140beSAndroid Build Coastguard Worker }
405*0d6140beSAndroid Build Coastguard Worker 
406*0d6140beSAndroid Build Coastguard Worker int main(int argc, char *argv[])
407*0d6140beSAndroid Build Coastguard Worker {
408*0d6140beSAndroid Build Coastguard Worker 	int ret = 0;
409*0d6140beSAndroid Build Coastguard Worker 
410*0d6140beSAndroid Build Coastguard Worker 	if (argc > 1)
411*0d6140beSAndroid Build Coastguard Worker 		cmocka_set_test_filter(argv[1]);
412*0d6140beSAndroid Build Coastguard Worker 
413*0d6140beSAndroid Build Coastguard Worker 	cmocka_set_message_output(CM_OUTPUT_STDOUT);
414*0d6140beSAndroid Build Coastguard Worker 
415*0d6140beSAndroid Build Coastguard Worker 	/*
416*0d6140beSAndroid Build Coastguard Worker 	 * Creating new thread which is doing nothing, to trigger __isthreaded being 1.
417*0d6140beSAndroid Build Coastguard Worker 	 * This is a workaround for BSD family. In multi-threaded environment fileno
418*0d6140beSAndroid Build Coastguard Worker 	 * macro is expanded into a function which is possible to mock in unit tests.
419*0d6140beSAndroid Build Coastguard Worker 	 * Without this workaround, on a single-thread environment, fileno macro is
420*0d6140beSAndroid Build Coastguard Worker 	 * expanded into an inline access of a private field of a file descriptor,
421*0d6140beSAndroid Build Coastguard Worker 	 * which is impossible to mock.
422*0d6140beSAndroid Build Coastguard Worker 	 *
423*0d6140beSAndroid Build Coastguard Worker 	 * In other OSes this is just creating a thread which is doing nothing.
424*0d6140beSAndroid Build Coastguard Worker 	 */
425*0d6140beSAndroid Build Coastguard Worker 	pthread_t thread_id;
426*0d6140beSAndroid Build Coastguard Worker 	pthread_create(&thread_id, NULL, doing_nothing, NULL);
427*0d6140beSAndroid Build Coastguard Worker 
428*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest helpers_tests[] = {
429*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(address_to_bits_test_success),
430*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(bitcount_test_success),
431*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(minmax_test_success),
432*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(strcat_realloc_test_success),
433*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(tolower_string_test_success),
434*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(reverse_byte_test_success),
435*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(reverse_bytes_test_success),
436*0d6140beSAndroid Build Coastguard Worker 	};
437*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("helpers.c tests", helpers_tests, NULL, NULL);
438*0d6140beSAndroid Build Coastguard Worker 
439*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest selfcheck[] = {
440*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(selfcheck_programmer_table),
441*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(selfcheck_flashchips_table),
442*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(selfcheck_eraseblocks),
443*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(selfcheck_board_matches_table),
444*0d6140beSAndroid Build Coastguard Worker 	};
445*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("selfcheck.c tests", selfcheck,
446*0d6140beSAndroid Build Coastguard Worker 					   NULL, NULL);
447*0d6140beSAndroid Build Coastguard Worker 
448*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest flashrom_tests[] = {
449*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(flashbuses_to_text_test_success),
450*0d6140beSAndroid Build Coastguard Worker 	};
451*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("flashrom.c tests", flashrom_tests, NULL, NULL);
452*0d6140beSAndroid Build Coastguard Worker 
453*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest spi25_tests[] = {
454*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(spi_write_enable_test_success),
455*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(spi_write_disable_test_success),
456*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(spi_read_chunked_test_success),
457*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_rdid_test_success),
458*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_rdid4_test_success),
459*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_rems_test_success),
460*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_res1_test_success),
461*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_res2_test_success),
462*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_res3_test_success),
463*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_at25f_test_success),
464*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(probe_spi_st95_test_success), /* spi95.c */
465*0d6140beSAndroid Build Coastguard Worker 	};
466*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("spi25.c tests", spi25_tests, NULL, NULL);
467*0d6140beSAndroid Build Coastguard Worker 
468*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest lifecycle_tests[] = {
469*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_basic_lifecycle_test_success),
470*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_probe_lifecycle_test_success),
471*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_probe_variable_size_test_success),
472*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_init_fails_unhandled_param_test_success),
473*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_init_success_invalid_param_test_success),
474*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_init_success_unhandled_param_test_success),
475*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_null_prog_param_test_success),
476*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_all_buses_test_success),
477*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dummy_freq_param_init),
478*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(nicrealtek_basic_lifecycle_test_success),
479*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(raiden_debug_basic_lifecycle_test_success),
480*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(raiden_debug_targetAP_basic_lifecycle_test_success),
481*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(raiden_debug_targetEC_basic_lifecycle_test_success),
482*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(raiden_debug_target0_basic_lifecycle_test_success),
483*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(raiden_debug_target1_basic_lifecycle_test_success),
484*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(dediprog_basic_lifecycle_test_success),
485*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(linux_mtd_probe_lifecycle_test_success),
486*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(linux_spi_probe_lifecycle_test_success),
487*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(parade_lspcon_basic_lifecycle_test_success),
488*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(parade_lspcon_no_allow_brick_test_success),
489*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(mediatek_i2c_spi_basic_lifecycle_test_success),
490*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(mediatek_i2c_no_allow_brick_test_success),
491*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(realtek_mst_basic_lifecycle_test_success),
492*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(realtek_mst_no_allow_brick_test_success),
493*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(ch341a_spi_basic_lifecycle_test_success),
494*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(ch341a_spi_probe_lifecycle_test_success),
495*0d6140beSAndroid Build Coastguard Worker 	};
496*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("lifecycle.c tests", lifecycle_tests, NULL, NULL);
497*0d6140beSAndroid Build Coastguard Worker 
498*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest layout_tests[] = {
499*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(included_regions_dont_overlap_test_success),
500*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(included_regions_overlap_test_success),
501*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(region_not_included_overlap_test_success),
502*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(layout_pass_sanity_checks_test_success),
503*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(layout_region_invalid_address_test_success),
504*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(layout_region_invalid_range_test_success),
505*0d6140beSAndroid Build Coastguard Worker 	};
506*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("layout.c tests", layout_tests, NULL, NULL);
507*0d6140beSAndroid Build Coastguard Worker 
508*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest chip_tests[] = {
509*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(erase_chip_test_success),
510*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(erase_chip_with_dummyflasher_test_success),
511*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(read_chip_test_success),
512*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(read_chip_with_dummyflasher_test_success),
513*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(write_chip_test_success),
514*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(write_chip_with_dummyflasher_test_success),
515*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(write_chip_feature_no_erase),
516*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(write_nonaligned_region_with_dummyflasher_test_success),
517*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(verify_chip_test_success),
518*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(verify_chip_with_dummyflasher_test_success),
519*0d6140beSAndroid Build Coastguard Worker 	};
520*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("chip.c tests", chip_tests, NULL, NULL);
521*0d6140beSAndroid Build Coastguard Worker 
522*0d6140beSAndroid Build Coastguard Worker 	const struct CMUnitTest chip_wp_tests[] = {
523*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(invalid_wp_range_dummyflasher_test_success),
524*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(set_wp_range_dummyflasher_test_success),
525*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(switch_wp_mode_dummyflasher_test_success),
526*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(wp_init_from_status_dummyflasher_test_success),
527*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(full_chip_erase_with_wp_dummyflasher_test_success),
528*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(partial_chip_erase_with_wp_dummyflasher_test_success),
529*0d6140beSAndroid Build Coastguard Worker 		cmocka_unit_test(wp_get_register_values_and_masks),
530*0d6140beSAndroid Build Coastguard Worker 	};
531*0d6140beSAndroid Build Coastguard Worker 	ret |= cmocka_run_group_tests_name("chip_wp.c tests", chip_wp_tests, NULL, NULL);
532*0d6140beSAndroid Build Coastguard Worker 
533*0d6140beSAndroid Build Coastguard Worker 	return ret;
534*0d6140beSAndroid Build Coastguard Worker }
535