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