brintos

brintos / linux-shallow public Read only

0
0
Text · 3.6 KiB · 874c69c Raw
149 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/******************************************************************************3 *4 *   Copyright © International Business Machines  Corp., 20095 *6 * DESCRIPTION7 *      Glibc independent futex library for testing kernel functionality.8 *9 * AUTHOR10 *      Darren Hart <dvhart@linux.intel.com>11 *12 * HISTORY13 *      2009-Nov-6: Initial version by Darren Hart <dvhart@linux.intel.com>14 *15 *****************************************************************************/16 17#ifndef _LOGGING_H18#define _LOGGING_H19 20#include <stdio.h>21#include <string.h>22#include <unistd.h>23#include <linux/futex.h>24#include "kselftest.h"25 26/*27 * Define PASS, ERROR, and FAIL strings with and without color escape28 * 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, ESCEND37#define BRIGHT_YELLOW ESC, BRIGHT, ';', YELLOW, ESCEND38#define BRIGHT_RED ESC, BRIGHT, ';', RED, ESCEND39#define RESET_COLOR ESC, '0', 'm'40static const char PASS_COLOR[] = {BRIGHT_GREEN, ' ', 'P', 'A', 'S', 'S',41				  RESET_COLOR, 0};42static const char ERROR_COLOR[] = {BRIGHT_YELLOW, 'E', 'R', 'R', 'O', 'R',43				   RESET_COLOR, 0};44static const char FAIL_COLOR[] = {BRIGHT_RED, ' ', 'F', 'A', 'I', 'L',45				  RESET_COLOR, 0};46static const char INFO_NORMAL[] = " INFO";47static const char PASS_NORMAL[] = " PASS";48static const char ERROR_NORMAL[] = "ERROR";49static const char FAIL_NORMAL[] = " FAIL";50const char *INFO = INFO_NORMAL;51const char *PASS = PASS_NORMAL;52const char *ERROR = ERROR_NORMAL;53const char *FAIL = FAIL_NORMAL;54 55/* Verbosity setting for INFO messages */56#define VQUIET    057#define VCRITICAL 158#define VINFO     259#define VMAX      VINFO60int _verbose = VCRITICAL;61 62/* Functional test return codes */63#define RET_PASS   064#define RET_ERROR -165#define RET_FAIL  -266 67/**68 * log_color() - Use colored output for PASS, ERROR, and FAIL strings69 * @use_color:	use color (1) or not (0)70 */71void 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 output86 * @verbose:	Enable (1) verbose output or not (0)87 *88 * Currently setting verbose=1 will enable INFO messages and 0 will disable89 * them. FAIL and ERROR messages are always displayed.90 */91void 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 results102 * @ret:	the return value to be considered: 0 | RET_ERROR | RET_FAIL103 *104 * print_result() is primarily intended for functional tests.105 */106void print_result(const char *test_name, int ret)107{108	switch (ret) {109	case RET_PASS:110		ksft_test_result_pass("%s\n", test_name);111		ksft_print_cnts();112		return;113	case RET_ERROR:114		ksft_test_result_error("%s\n", test_name);115		ksft_print_cnts();116		return;117	case RET_FAIL:118		ksft_test_result_fail("%s\n", test_name);119		ksft_print_cnts();120		return;121	}122}123 124/* log level macros */125#define info(message, vargs...) \126do { \127	if (_verbose >= VINFO) \128		fprintf(stderr, "\t%s: "message, INFO, ##vargs); \129} while (0)130 131#define error(message, err, args...) \132do { \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...) \143do { \144	if (_verbose >= VCRITICAL) \145		fprintf(stderr, "\t%s: "message, FAIL, ##args); \146} while (0)147 148#endif149