1 /* Interfaces for the test driver. 2 Copyright (C) 2016-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #ifndef SUPPORT_TEST_DRIVER_H 20 #define SUPPORT_TEST_DRIVER_H 21 22 #include <sys/cdefs.h> 23 24 __BEGIN_DECLS 25 26 struct test_config 27 { 28 void (*prepare_function) (int argc, char **argv); 29 int (*test_function) (void); 30 int (*test_function_argv) (int argc, char **argv); 31 void (*cleanup_function) (void); 32 void (*cmdline_function) (int); 33 const void *options; /* Custom options if not NULL. */ 34 int timeout; /* Test timeout in seconds. */ 35 int expected_status; /* Expected exit status. */ 36 int expected_signal; /* If non-zero, expect termination by signal. */ 37 char no_mallopt; /* Boolean flag to disable mallopt. */ 38 char no_setvbuf; /* Boolean flag to disable setvbuf. */ 39 char run_command_mode; /* Boolean flag to indicate run-command-mode. */ 40 const char *optstring; /* Short command line options. */ 41 }; 42 43 enum 44 { 45 /* Test exit status which indicates that the feature is 46 unsupported. */ 47 EXIT_UNSUPPORTED = 77, 48 49 /* Default timeout is twenty seconds. Tests should normally 50 complete faster than this, but if they don't, that's abnormal 51 (a bug) anyways. */ 52 DEFAULT_TIMEOUT = 20, 53 54 /* Used for command line argument parsing. */ 55 OPT_DIRECT = 1000, 56 OPT_TESTDIR, 57 }; 58 59 /* Options provided by the test driver. */ 60 #define TEST_DEFAULT_OPTIONS \ 61 { "verbose", no_argument, NULL, 'v' }, \ 62 { "direct", no_argument, NULL, OPT_DIRECT }, \ 63 { "test-dir", required_argument, NULL, OPT_TESTDIR }, \ 64 65 /* The directory the test should use for temporary files. */ 66 extern const char *test_dir; 67 68 /* The number of --verbose arguments specified during program 69 invocation. This variable can be used to control the verbosity of 70 tests. */ 71 extern unsigned int test_verbose; 72 73 /* Output that is only emitted if at least one --verbose argument was 74 specified. */ 75 #define verbose_printf(...) \ 76 do { \ 77 if (test_verbose > 0) \ 78 printf (__VA_ARGS__); \ 79 } while (0); 80 81 int support_test_main (int argc, char **argv, const struct test_config *); 82 83 __END_DECLS 84 85 #endif /* SUPPORT_TEST_DRIVER_H */ 86