1  /* Interfaces for the test driver.
       2     Copyright (C) 2016-2023 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 */