]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - tools/testing/selftests/kselftest.h
Merge branch 'for-linus-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad...
[mirror_ubuntu-focal-kernel.git] / tools / testing / selftests / kselftest.h
CommitLineData
7c466b97 1/* SPDX-License-Identifier: GPL-2.0 */
7fb2c3ea
SK
2/*
3 * kselftest.h: kselftest framework return codes to include from
4 * selftests.
5 *
6 * Copyright (c) 2014 Shuah Khan <shuahkh@osg.samsung.com>
7 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
8 *
7fb2c3ea
SK
9 */
10#ifndef __KSELFTEST_H
11#define __KSELFTEST_H
12
13#include <stdlib.h>
14#include <unistd.h>
151b2732 15#include <stdarg.h>
a18261d7 16#include <stdio.h>
7fb2c3ea 17
4100e675
DH
18/* define kselftest exit codes */
19#define KSFT_PASS 0
20#define KSFT_FAIL 1
21#define KSFT_XFAIL 2
22#define KSFT_XPASS 3
3c07aaef 23#define KSFT_SKIP 4
4100e675 24
7fb2c3ea
SK
25/* counters */
26struct ksft_count {
27 unsigned int ksft_pass;
28 unsigned int ksft_fail;
29 unsigned int ksft_xfail;
30 unsigned int ksft_xpass;
31 unsigned int ksft_xskip;
c0bb2cf4 32 unsigned int ksft_error;
7fb2c3ea
SK
33};
34
35static struct ksft_count ksft_cnt;
5821ba96 36static unsigned int ksft_plan;
7fb2c3ea 37
b6a4b66d
PE
38static inline int ksft_test_num(void)
39{
40 return ksft_cnt.ksft_pass + ksft_cnt.ksft_fail +
41 ksft_cnt.ksft_xfail + ksft_cnt.ksft_xpass +
c0bb2cf4 42 ksft_cnt.ksft_xskip + ksft_cnt.ksft_error;
b6a4b66d
PE
43}
44
7fb2c3ea
SK
45static inline void ksft_inc_pass_cnt(void) { ksft_cnt.ksft_pass++; }
46static inline void ksft_inc_fail_cnt(void) { ksft_cnt.ksft_fail++; }
47static inline void ksft_inc_xfail_cnt(void) { ksft_cnt.ksft_xfail++; }
48static inline void ksft_inc_xpass_cnt(void) { ksft_cnt.ksft_xpass++; }
49static inline void ksft_inc_xskip_cnt(void) { ksft_cnt.ksft_xskip++; }
c0bb2cf4 50static inline void ksft_inc_error_cnt(void) { ksft_cnt.ksft_error++; }
7fb2c3ea 51
1d3ee8be
SK
52static inline int ksft_get_pass_cnt(void) { return ksft_cnt.ksft_pass; }
53static inline int ksft_get_fail_cnt(void) { return ksft_cnt.ksft_fail; }
54static inline int ksft_get_xfail_cnt(void) { return ksft_cnt.ksft_xfail; }
55static inline int ksft_get_xpass_cnt(void) { return ksft_cnt.ksft_xpass; }
56static inline int ksft_get_xskip_cnt(void) { return ksft_cnt.ksft_xskip; }
c0bb2cf4 57static inline int ksft_get_error_cnt(void) { return ksft_cnt.ksft_error; }
1d3ee8be 58
b6a4b66d
PE
59static inline void ksft_print_header(void)
60{
10f531f6
SK
61 if (!(getenv("KSFT_TAP_LEVEL")))
62 printf("TAP version 13\n");
b6a4b66d
PE
63}
64
5821ba96
KC
65static inline void ksft_set_plan(unsigned int plan)
66{
67 ksft_plan = plan;
68 printf("1..%d\n", ksft_plan);
69}
70
7fb2c3ea
SK
71static inline void ksft_print_cnts(void)
72{
5821ba96
KC
73 if (ksft_plan != ksft_test_num())
74 printf("# Planned tests != run tests (%u != %u)\n",
75 ksft_plan, ksft_test_num());
5c069b6d 76 printf("# Pass %d Fail %d Xfail %d Xpass %d Skip %d Error %d\n",
1d3ee8be
SK
77 ksft_cnt.ksft_pass, ksft_cnt.ksft_fail,
78 ksft_cnt.ksft_xfail, ksft_cnt.ksft_xpass,
c0bb2cf4 79 ksft_cnt.ksft_xskip, ksft_cnt.ksft_error);
b6a4b66d
PE
80}
81
ab52a484
PE
82static inline void ksft_print_msg(const char *msg, ...)
83{
84 va_list args;
85
86 va_start(args, msg);
87 printf("# ");
88 vprintf(msg, args);
89 va_end(args);
90}
91
151b2732 92static inline void ksft_test_result_pass(const char *msg, ...)
b6a4b66d 93{
151b2732
PE
94 va_list args;
95
b6a4b66d 96 ksft_cnt.ksft_pass++;
151b2732
PE
97
98 va_start(args, msg);
99 printf("ok %d ", ksft_test_num());
100 vprintf(msg, args);
101 va_end(args);
b6a4b66d
PE
102}
103
151b2732 104static inline void ksft_test_result_fail(const char *msg, ...)
b6a4b66d 105{
151b2732
PE
106 va_list args;
107
b6a4b66d 108 ksft_cnt.ksft_fail++;
151b2732
PE
109
110 va_start(args, msg);
111 printf("not ok %d ", ksft_test_num());
112 vprintf(msg, args);
113 va_end(args);
b6a4b66d
PE
114}
115
151b2732 116static inline void ksft_test_result_skip(const char *msg, ...)
b6a4b66d 117{
151b2732
PE
118 va_list args;
119
b6a4b66d 120 ksft_cnt.ksft_xskip++;
151b2732
PE
121
122 va_start(args, msg);
b0df366b 123 printf("not ok %d # SKIP ", ksft_test_num());
151b2732
PE
124 vprintf(msg, args);
125 va_end(args);
7fb2c3ea
SK
126}
127
c0bb2cf4
SK
128static inline void ksft_test_result_error(const char *msg, ...)
129{
130 va_list args;
131
132 ksft_cnt.ksft_error++;
133
134 va_start(args, msg);
135 printf("not ok %d # error ", ksft_test_num());
136 vprintf(msg, args);
137 va_end(args);
138}
139
7fb2c3ea
SK
140static inline int ksft_exit_pass(void)
141{
b6a4b66d 142 ksft_print_cnts();
4100e675 143 exit(KSFT_PASS);
7fb2c3ea 144}
b6a4b66d 145
7fb2c3ea
SK
146static inline int ksft_exit_fail(void)
147{
b6a4b66d
PE
148 printf("Bail out!\n");
149 ksft_print_cnts();
4100e675 150 exit(KSFT_FAIL);
7fb2c3ea 151}
b6a4b66d 152
151b2732 153static inline int ksft_exit_fail_msg(const char *msg, ...)
b6a4b66d 154{
151b2732
PE
155 va_list args;
156
157 va_start(args, msg);
158 printf("Bail out! ");
159 vprintf(msg, args);
160 va_end(args);
161
b6a4b66d
PE
162 ksft_print_cnts();
163 exit(KSFT_FAIL);
164}
165
7fb2c3ea
SK
166static inline int ksft_exit_xfail(void)
167{
b6a4b66d 168 ksft_print_cnts();
4100e675 169 exit(KSFT_XFAIL);
7fb2c3ea 170}
b6a4b66d 171
7fb2c3ea
SK
172static inline int ksft_exit_xpass(void)
173{
b6a4b66d 174 ksft_print_cnts();
4100e675 175 exit(KSFT_XPASS);
7fb2c3ea 176}
b6a4b66d 177
151b2732 178static inline int ksft_exit_skip(const char *msg, ...)
7fb2c3ea 179{
151b2732
PE
180 if (msg) {
181 va_list args;
182
183 va_start(args, msg);
5821ba96 184 printf("not ok %d # SKIP ", 1 + ksft_test_num());
151b2732
PE
185 vprintf(msg, args);
186 va_end(args);
187 } else {
54f57baa 188 ksft_print_cnts();
151b2732 189 }
4100e675 190 exit(KSFT_SKIP);
7fb2c3ea
SK
191}
192
193#endif /* __KSELFTEST_H */