From cd9396e7d084473bee312f6e1cda13174247e0cc Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 2 Aug 2002 00:51:52 +0000 Subject: 2002-08-01 Joel Sherrill * Per PR47 add support for buffered test output. This involved adding defines to redirect output to a buffer and dump it when full, at "test pause", and at exit. To avoid problems when redefining exit(), all tests were modified to call rtems_test_exit(). Some tests, notable psxtests, had to be modified to include the standard test macro .h file (pmacros.h or tmacros.h) to enable this support. * include/buffer_test_io.h: New file. --- testsuites/support/ChangeLog | 10 +++ testsuites/support/include/buffer_test_io.h | 117 ++++++++++++++++++++++++++++ testsuites/support/include/tmacros.h | 38 +++++---- 3 files changed, 151 insertions(+), 14 deletions(-) create mode 100644 testsuites/support/include/buffer_test_io.h (limited to 'testsuites') diff --git a/testsuites/support/ChangeLog b/testsuites/support/ChangeLog index 0314f01ff6..2a235939b3 100644 --- a/testsuites/support/ChangeLog +++ b/testsuites/support/ChangeLog @@ -1,3 +1,13 @@ +2002-08-01 Joel Sherrill + + * Per PR47 add support for buffered test output. This involved + adding defines to redirect output to a buffer and dump it when + full, at "test pause", and at exit. To avoid problems when redefining + exit(), all tests were modified to call rtems_test_exit(). + Some tests, notable psxtests, had to be modified to include + the standard test macro .h file (pmacros.h or tmacros.h) to + enable this support. + * include/buffer_test_io.h: New file. 2002-03-27 Ralf Corsepius * configure.ac: diff --git a/testsuites/support/include/buffer_test_io.h b/testsuites/support/include/buffer_test_io.h new file mode 100644 index 0000000000..f4bb2333d4 --- /dev/null +++ b/testsuites/support/include/buffer_test_io.h @@ -0,0 +1,117 @@ +/* + * Support for running the test output through a buffer + * + * $Id$ + */ + +#ifndef __BUFFER_TEST_IO_h +#define __BUFFER_TEST_IO_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* + * Uncomment this to get buffered test output. When commented out, + * test output behaves as it always has and is printed ASAP. + */ + +/* #define TESTS_BUFFER_OUTPUT */ + +#if !defined(TESTS_BUFFER_OUTPUT) + +#define rtems_test_exit(_s) \ + do { \ + exit(_s); \ + } while (0) + +#define FLUSH_OUTPUT() \ + do { \ + fflush(stdout); \ + } while (0) + +#else /* buffer test output */ + +#define _TEST_OUTPUT_BUFFER_SIZE 2048 +extern char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE]; +void _test_output_append(char *); +void _test_output_flush(void); + +#define rtems_test_exit(_s) \ + do { \ + _test_output_flush(); \ + exit(_s); \ + } while (0) + +#undef printf +#define printf(...) \ + do { \ + char _buffer[128]; \ + sprintf( _buffer, __VA_ARGS__); \ + _test_output_append( _buffer ); \ + } while (0) + +#undef puts +#define puts(_string) \ + do { \ + char _buffer[128]; \ + sprintf( _buffer, "%s\n", _string ); \ + _test_output_append( _buffer ); \ + } while (0) + +#undef putchar +#define putchar(_c) \ + do { \ + char _buffer[2]; \ + _buffer[0] = _c; \ + _buffer[1] = '\0'; \ + _test_output_append( _buffer ); \ + } while (0) + +/* we write to stderr when there is a pause() */ +#define FLUSH_OUTPUT() _test_output_flush() + +#if defined(TEST_INIT) || defined(CONFIGURE_INIT) + +char _test_output_buffer[_TEST_OUTPUT_BUFFER_SIZE]; +int _test_output_buffer_index = 0; + +void _test_output_append(char *_buffer) +{ + char *p; + + for ( p=_buffer ; *p ; p++ ) { + _test_output_buffer[_test_output_buffer_index++] = *p; + _test_output_buffer[_test_output_buffer_index] = '\0'; +#if 0 + if ( *p == '\n' ) { + fprintf( stderr, "BUFFER -- %s", _test_output_buffer ); + _test_output_buffer_index = 0; + _test_output_buffer[0] = '\0'; + } +#endif + if ( _test_output_buffer_index >= (_TEST_OUTPUT_BUFFER_SIZE - 80) ) + _test_output_flush(); + } +} + +#include +#include + +void _test_output_flush(void) +{ + fprintf( stderr, "%s", _test_output_buffer ); + _test_output_buffer_index = 0; + tcdrain( 2 ); +} + +#endif /* TEST_INIT */ +#endif /* TESTS_BUFFER_OUTPUT */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h index cfa8684057..a49068f8b6 100644 --- a/testsuites/support/include/tmacros.h +++ b/testsuites/support/include/tmacros.h @@ -37,14 +37,21 @@ extern "C" { #define TEST_EXTERN extern #endif +#include + +/* + * Check that that the dispatch disable level is proper for the + * mode/state of the test. Normally it should be 0 when in task space. + */ + #define check_dispatch_disable_level( _expect ) \ do { \ extern volatile rtems_unsigned32 _Thread_Dispatch_disable_level; \ if ( (_expect) != -1 && _Thread_Dispatch_disable_level != (_expect) ) { \ printf( "\n_Thread_Dispatch_disable_level is (%d) not %d\n", \ _Thread_Dispatch_disable_level, (_expect) ); \ - fflush(stdout); \ - exit( 1 ); \ + FLUSH_OUTPUT(); \ + rtems_test_exit( 1 ); \ } \ } while ( 0 ) @@ -67,8 +74,8 @@ extern "C" { if ( (_stat) != (_desired) ) { \ printf( "\n%s FAILED -- expected (%s) got (%s)\n", \ (_msg), rtems_status_text(_desired), rtems_status_text(_stat) ); \ - fflush(stdout); \ - exit( _stat ); \ + FLUSH_OUTPUT(); \ + rtems_test_exit( _stat ); \ } \ } while ( 0 ) @@ -100,8 +107,8 @@ extern "C" { (_msg), _desired, strerror(_desired), _stat, strerror(_stat) ); \ printf( "\n FAILED -- errno (%d - %s)\n", \ errno, strerror(errno) ); \ - fflush(stdout); \ - exit( _stat ); \ + FLUSH_OUTPUT(); \ + rtems_test_exit( _stat ); \ } \ } while ( 0 ) @@ -125,8 +132,8 @@ extern "C" { if ( (_stat) != (_desired) ) { \ printf( "\n%s FAILED -- expected (%d) got (%d)\n", \ (_msg), (_desired), (_stat) ); \ - fflush(stdout); \ - exit( _stat ); \ + FLUSH_OUTPUT(); \ + rtems_test_exit( _stat ); \ } \ } while ( 0 ) @@ -147,13 +154,12 @@ extern "C" { printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \ _s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \ (_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \ - fflush(stdout); \ } while ( 0 ) #define put_dot( _c ) \ do { \ putchar( _c ); \ - fflush( stdout ); \ + FLUSH_OUTPUT(); \ } while ( 0 ) #define new_line puts( "" ) @@ -163,18 +169,21 @@ extern "C" { #ifdef RTEMS_TEST_NO_PAUSE #define rtems_test_pause() \ do { \ - printf( "\n" ); fflush( stdout ); \ + printf( "\n" ); \ + FLUSH_OUTPUT(); \ } while ( 0 ) #define rtems_test_pause_and_screen_number( _screen ) \ do { \ - printf( "\n", (_screen) ); fflush( stdout ); \ + printf( "\n", (_screen) ); \ + FLUSH_OUTPUT(); \ } while ( 0 ) #else #define rtems_test_pause() \ do { \ char buffer[ 80 ]; \ - printf( "" ); fflush( stdout ); \ + printf( "" ); \ + FLUSH_OUTPUT(); \ gets( buffer ); \ puts( "" ); \ } while ( 0 ) @@ -182,7 +191,8 @@ extern "C" { #define rtems_test_pause_and_screen_number( _screen ) \ do { \ char buffer[ 80 ]; \ - printf( "", (_screen) ); fflush( stdout ); \ + printf( "", (_screen) ); \ + FLUSH_OUTPUT(); \ gets( buffer ); \ puts( "" ); \ } while ( 0 ) -- cgit v1.2.3