Home | History | Annotate | Line # | Download | only in tests
      1 /*	$NetBSD: tests.h,v 1.4 2019/12/22 12:38:24 skrll Exp $	*/
      2 
      3 /* SPDX-License-Identifier: LGPL-2.1-or-later */
      4 #ifndef TESTS_H
      5 #define TESTS_H
      6 /*
      7  * libfdt - Flat Device Tree manipulation
      8  *	Testcase definitions
      9  * Copyright (C) 2006 David Gibson, IBM Corporation.
     10  */
     11 
     12 #define DEBUG
     13 
     14 /* Test return codes */
     15 #define RC_PASS 	0
     16 #define RC_CONFIG 	1
     17 #define RC_FAIL		2
     18 #define RC_BUG		99
     19 
     20 extern int verbose_test;
     21 extern char *test_name;
     22 void test_init(int argc, char *argv[]);
     23 
     24 #define FDTALIGN2(x, a)	(((x) + (a) - 1) & ~((a) - 1))
     25 #define PALIGN(p, a)	((void *)FDTALIGN2((unsigned long)(p), (a)))
     26 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
     27 
     28 #define streq(s1, s2)	(strcmp((s1),(s2)) == 0)
     29 
     30 /* Each test case must define this function */
     31 void cleanup(void);
     32 
     33 #define verbose_printf(...) \
     34 	if (verbose_test) { \
     35 		printf(__VA_ARGS__); \
     36 		fflush(stdout); \
     37 	}
     38 #define ERR	"ERR: "
     39 #define ERROR(fmt, args...)	fprintf(stderr, ERR fmt, ## args)
     40 
     41 
     42 #define	PASS()						\
     43 	do {						\
     44 		cleanup();				\
     45 		printf("PASS\n");			\
     46 		exit(RC_PASS);				\
     47 	} while (0)
     48 
     49 #define	PASS_INCONCLUSIVE()				\
     50 	do {						\
     51 		cleanup();				\
     52 		printf("PASS (inconclusive)\n");	\
     53 		exit(RC_PASS);				\
     54 	} while (0)
     55 
     56 #define IRRELEVANT()					\
     57 	do {						\
     58 		cleanup();				\
     59 		printf("PASS (irrelevant)\n");		\
     60 		exit(RC_PASS);				\
     61 	} while (0)
     62 
     63 /* Look out, gcc extension below... */
     64 #define FAIL(fmt, ...)					\
     65 	do {						\
     66 		cleanup();				\
     67 		printf("FAIL\t" fmt "\n", ##__VA_ARGS__);	\
     68 		exit(RC_FAIL);				\
     69 	} while (0)
     70 
     71 #define CONFIG(fmt, ...)				\
     72 	do {						\
     73 		cleanup();				\
     74 		printf("Bad configuration: " fmt "\n", ##__VA_ARGS__);	\
     75 		exit(RC_CONFIG);			\
     76 	} while (0)
     77 
     78 #define TEST_BUG(fmt, ...)				\
     79 	do {						\
     80 		cleanup();				\
     81 		printf("BUG in testsuite: " fmt "\n", ##__VA_ARGS__);	\
     82 		exit(RC_BUG);				\
     83 	} while (0)
     84 
     85 void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size);
     86 
     87 void check_property(void *fdt, int nodeoffset, const char *name,
     88 		    int len, const void *val);
     89 #define check_property_cell(fdt, nodeoffset, name, val) \
     90 	({ \
     91 		fdt32_t x = cpu_to_fdt32(val);			      \
     92 		check_property(fdt, nodeoffset, name, sizeof(x), &x); \
     93 	})
     94 
     95 
     96 const void *check_getprop(void *fdt, int nodeoffset, const char *name,
     97 			  int len, const void *val);
     98 #define check_getprop_cell(fdt, nodeoffset, name, val) \
     99 	({ \
    100 		fdt32_t x = cpu_to_fdt32(val);			     \
    101 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
    102 	})
    103 #define check_getprop_64(fdt, nodeoffset, name, val) \
    104 	({ \
    105 		fdt64_t x = cpu_to_fdt64(val);			     \
    106 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
    107 	})
    108 #define check_getprop_string(fdt, nodeoffset, name, s) \
    109 	check_getprop((fdt), (nodeoffset), (name), strlen(s)+1, (s))
    110 
    111 /* Returns non-NULL if the property at poffset has the name in_name */
    112 const void *check_get_prop_offset(void *fdt, int poffset, const char *in_name,
    113 				  int in_len, const void *in_val);
    114 #define check_get_prop_offset_cell(fdt, poffset, name, val) \
    115 	({ \
    116 		fdt32_t x = cpu_to_fdt32(val);			     \
    117 		check_get_prop_offset(fdt, poffset, name, sizeof(x), &x); \
    118 	})
    119 
    120 const void *check_getprop_addrrange(void *fdt, int parent, int nodeoffset,
    121 				    const char *name, int num);
    122 
    123 int nodename_eq(const char *s1, const char *s2);
    124 void vg_prepare_blob(void *fdt, size_t bufsize);
    125 void *load_blob(const char *filename);
    126 void *load_blob_arg(int argc, char *argv[]);
    127 void save_blob(const char *filename, void *blob);
    128 void *open_blob_rw(void *blob);
    129 
    130 #include "util.h"
    131 
    132 #endif /* TESTS_H */
    133