]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2aa8470f DH |
2 | /****************************************************************************** |
3 | * | |
4 | * Copyright © International Business Machines Corp., 2009 | |
5 | * | |
2aa8470f DH |
6 | * DESCRIPTION |
7 | * Glibc independent futex library for testing kernel functionality. | |
8 | * | |
9 | * AUTHOR | |
10 | * Darren Hart <dvhart@linux.intel.com> | |
11 | * | |
12 | * HISTORY | |
13 | * 2009-Nov-6: Initial version by Darren Hart <dvhart@linux.intel.com> | |
14 | * | |
15 | *****************************************************************************/ | |
16 | ||
17 | #ifndef _LOGGING_H | |
18 | #define _LOGGING_H | |
19 | ||
083f3451 | 20 | #include <stdio.h> |
2aa8470f DH |
21 | #include <string.h> |
22 | #include <unistd.h> | |
23 | #include <linux/futex.h> | |
33ca2248 | 24 | #include "kselftest.h" |
2aa8470f DH |
25 | |
26 | /* | |
27 | * Define PASS, ERROR, and FAIL strings with and without color escape | |
28 | * sequences, default to no color. | |
29 | */ | |
30 | #define ESC 0x1B, '[' | |
31 | #define BRIGHT '1' | |
32 | #define GREEN '3', '2' | |
33 | #define YELLOW '3', '3' | |
34 | #define RED '3', '1' | |
35 | #define ESCEND 'm' | |
36 | #define BRIGHT_GREEN ESC, BRIGHT, ';', GREEN, ESCEND | |
37 | #define BRIGHT_YELLOW ESC, BRIGHT, ';', YELLOW, ESCEND | |
38 | #define BRIGHT_RED ESC, BRIGHT, ';', RED, ESCEND | |
39 | #define RESET_COLOR ESC, '0', 'm' | |
40 | static const char PASS_COLOR[] = {BRIGHT_GREEN, ' ', 'P', 'A', 'S', 'S', | |
41 | RESET_COLOR, 0}; | |
42 | static const char ERROR_COLOR[] = {BRIGHT_YELLOW, 'E', 'R', 'R', 'O', 'R', | |
43 | RESET_COLOR, 0}; | |
44 | static const char FAIL_COLOR[] = {BRIGHT_RED, ' ', 'F', 'A', 'I', 'L', | |
45 | RESET_COLOR, 0}; | |
46 | static const char INFO_NORMAL[] = " INFO"; | |
47 | static const char PASS_NORMAL[] = " PASS"; | |
48 | static const char ERROR_NORMAL[] = "ERROR"; | |
49 | static const char FAIL_NORMAL[] = " FAIL"; | |
50 | const char *INFO = INFO_NORMAL; | |
51 | const char *PASS = PASS_NORMAL; | |
52 | const char *ERROR = ERROR_NORMAL; | |
53 | const char *FAIL = FAIL_NORMAL; | |
54 | ||
55 | /* Verbosity setting for INFO messages */ | |
56 | #define VQUIET 0 | |
57 | #define VCRITICAL 1 | |
58 | #define VINFO 2 | |
59 | #define VMAX VINFO | |
60 | int _verbose = VCRITICAL; | |
61 | ||
62 | /* Functional test return codes */ | |
63 | #define RET_PASS 0 | |
64 | #define RET_ERROR -1 | |
65 | #define RET_FAIL -2 | |
66 | ||
67 | /** | |
68 | * log_color() - Use colored output for PASS, ERROR, and FAIL strings | |
69 | * @use_color: use color (1) or not (0) | |
70 | */ | |
71 | void log_color(int use_color) | |
72 | { | |
73 | if (use_color) { | |
74 | PASS = PASS_COLOR; | |
75 | ERROR = ERROR_COLOR; | |
76 | FAIL = FAIL_COLOR; | |
77 | } else { | |
78 | PASS = PASS_NORMAL; | |
79 | ERROR = ERROR_NORMAL; | |
80 | FAIL = FAIL_NORMAL; | |
81 | } | |
82 | } | |
83 | ||
84 | /** | |
85 | * log_verbosity() - Set verbosity of test output | |
86 | * @verbose: Enable (1) verbose output or not (0) | |
87 | * | |
88 | * Currently setting verbose=1 will enable INFO messages and 0 will disable | |
89 | * them. FAIL and ERROR messages are always displayed. | |
90 | */ | |
91 | void log_verbosity(int level) | |
92 | { | |
93 | if (level > VMAX) | |
94 | level = VMAX; | |
95 | else if (level < 0) | |
96 | level = 0; | |
97 | _verbose = level; | |
98 | } | |
99 | ||
100 | /** | |
101 | * print_result() - Print standard PASS | ERROR | FAIL results | |
102 | * @ret: the return value to be considered: 0 | RET_ERROR | RET_FAIL | |
103 | * | |
104 | * print_result() is primarily intended for functional tests. | |
105 | */ | |
1f666e52 | 106 | void print_result(const char *test_name, int ret) |
2aa8470f | 107 | { |
2aa8470f DH |
108 | switch (ret) { |
109 | case RET_PASS: | |
b274e75c SK |
110 | ksft_test_result_pass("%s\n", test_name); |
111 | ksft_print_cnts(); | |
112 | return; | |
2aa8470f | 113 | case RET_ERROR: |
b274e75c SK |
114 | ksft_test_result_error("%s\n", test_name); |
115 | ksft_print_cnts(); | |
116 | return; | |
2aa8470f | 117 | case RET_FAIL: |
b274e75c SK |
118 | ksft_test_result_fail("%s\n", test_name); |
119 | ksft_print_cnts(); | |
120 | return; | |
2aa8470f | 121 | } |
2aa8470f DH |
122 | } |
123 | ||
124 | /* log level macros */ | |
125 | #define info(message, vargs...) \ | |
126 | do { \ | |
127 | if (_verbose >= VINFO) \ | |
128 | fprintf(stderr, "\t%s: "message, INFO, ##vargs); \ | |
129 | } while (0) | |
130 | ||
131 | #define error(message, err, args...) \ | |
132 | do { \ | |
133 | if (_verbose >= VCRITICAL) {\ | |
134 | if (err) \ | |
135 | fprintf(stderr, "\t%s: %s: "message, \ | |
136 | ERROR, strerror(err), ##args); \ | |
137 | else \ | |
138 | fprintf(stderr, "\t%s: "message, ERROR, ##args); \ | |
139 | } \ | |
140 | } while (0) | |
141 | ||
142 | #define fail(message, args...) \ | |
143 | do { \ | |
144 | if (_verbose >= VCRITICAL) \ | |
145 | fprintf(stderr, "\t%s: "message, FAIL, ##args); \ | |
146 | } while (0) | |
147 | ||
148 | #endif |