Man Linux: Main Page and Category List

NAME

       usctest  -   macros  and  libraries for common functions in system call
       tests

SYNOPSIS

       Routines:
        char *parse_opts(...)

       Macros
        TEST_PAUSE
        TEST_PAUSEF(hand)
        TEST(syscall)
        TEST_VOID(syscall)
        TEST_CLEANUP
        TEST_LOOPING(counter)
        TEST_ERROR_LOG(errno)
        TEST_EXP_ENOS(array)

       Global Variable(s) (see parse_opts(3) for complete list):
        int TEST_RETURN;    /* set by the TEST macro to the return  code  from
        syscall */
        int  TEST_ERRNO;     /*  set  by  the TEST macro to the value of errno
        after syscall returns */
        /* All STD_* variables referenced below are set by  the  parse_opts(3)
        routine. */

DESCRIPTION

       The  TEST_PAUSE  macro  checks if the global variable STD_PAUSE is set.
       If so, it pauses for a SIGUSR1 before continuing execution.  The signal
       handler used does nothing.  After the signal is processed, the previous
       action is replaced for SIGUSR1.

       The TEST_PAUSEF(hand) macro checks if the global variable STD_PAUSE  is
       set.   If so, it pauses for a SIGUSR1 before continuing execution.  The
       hand argument is a function to be used to  handle  the  SIGUSR1  signal
       when  it  is  received.   After  the  signal is processed, the previous
       action is replaced for SIGUSR1.

       The TEST(syscall) macro executes (syscall) and times its execution.  It
       saves the max time, min time, accumulated time, and execution count, if
       STD_TIMING_ON is set.

       The TEST_VOID(syscall) macro works exactly the same as the TEST() macro
       except  that it does NOT set the global TEST_RETURN.  It is intended to
       be used with system calls that do not have a return value.

       The TEST_CLEANUP macro prints timing  statistics,  accumulated  through
       the TEST macro, if STD_TIMING_ON is set.  Also, prints the errno return
       counts as logged by the TEST_ERROR_LOG macro, if  STD_ERR_LOG  is  set.
       TEST_CLEANUP uses tst_resm(3) to output this information.

       The  TEST_LOOPING(counter)  macro  checks  counter  against  the global
       variable STD_LOOP_COUNTER.  If counter is less than STD_LOOP_COUNTER or
       STD_INFINITE is set, it returns TRUE.

       The  TEST_ERROR_LOG  macro  records  the return of errno as unexpected,
       unless the option to turn it off is specified on the command line.

       The TEST_EXP_ENOS(array) macro sets an internal flag for each errno  in
       array, indicating that the errno is expected at some point in the test.
       This is used by the TEST_CLEANUP macro to determine  which  errnos  are
       expected when printing the log.  The array must be zero terminated.

       The  parse_opts  routine  parses  the command line (see parse_opts(3)).
       All STD_* global variables used are set by the parse_opts(3) routine.

EXAMPLES

       Below is a partial template of a system call test using these routines,
       macros,  and global variables.  A complete template may be found in the
       CUTS/sun/skel directory, in the file usctest.c.

       void
       setup()
       {
            TEST_PAUSE;    /* Pause  if option specified */
       }

       void
       cleanup()
       {
            TEST_CLEANUP;
       }

       int main(ac, av)
       {
            int lc;        /* loop counter */
            char *msg;     /* return from parse_opts */

            int exp_enos[]={EACCESS, 0};  /* expected errnos */

            TEST_EXP_ENOS(exp_enos); /* set expected errnos */

            setup();  /* execute setup */

            /* parse options */
            msg=parse_opts(ac, av, (option_t *)NULL);

            /* Check parse_opts return */

            for (lc=0; TEST_LOOPING(lc); lc++) {
                 TEST(open("file", O_RDWR))

                 if ( TEST_RETURN == -1) {
                      TEST_ERROR_LOG(TEST_ERRNO)
                      /* BREAK test case, or whatever... */
                 }

            }

            cleanup();

            return 0;
       }

SEE ALSO

       parse_opts(3).

RETURN VALUES

       The TEST_LOOPING macro evaluates to TRUE  (1)  or  FALSE  (0),  and  is
       intended  for  use  in  while  or for loops.  The TEST macro places the
       return value from syscall in the global variable  TEST_RETURN  and  the
       errno  in the global variable TEST_ERRNO.  The TEST_PAUSE, TEST_PAUSEF,
       TEST_CLEANUP, TEST_ERROR_LOG, and TEST_EXP_ENOS macros do not have  any
       return values.