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