root/tools/testing/selftests/futex/include/logging.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. log_color
  2. log_verbosity
  3. print_result

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /******************************************************************************
   3  *
   4  *   Copyright © International Business Machines  Corp., 2009
   5  *
   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 
  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 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  */
 106 void 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...) \
 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

/* [<][>][^][v][top][bottom][index][help] */