diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-06 22:27:23 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-07-06 22:27:23 +0000 |
commit | 6f67619ee65456056e2ef5f172fe2228c17d9842 (patch) | |
tree | 0d6c758e80f922022a1614ad2e0167ffeb3dd2c8 /testsuites/sptests/sp21/init.c | |
parent | 2009-10-28 Till Straumann <strauman@slac.stanford.edu> (diff) | |
download | rtems-6f67619ee65456056e2ef5f172fe2228c17d9842.tar.bz2 |
2010-07-06 Joel Sherrill <joel.sherrilL@OARcorp.com>
* sp21/Makefile.am, sp21/init.c, sp21/sp21.scn: Add
rtems_io_lookup_name() and simplify test.
* sp21/system.h, sp21/task1.c: Removed.
Diffstat (limited to 'testsuites/sptests/sp21/init.c')
-rw-r--r-- | testsuites/sptests/sp21/init.c | 239 |
1 files changed, 206 insertions, 33 deletions
diff --git a/testsuites/sptests/sp21/init.c b/testsuites/sptests/sp21/init.c index 0266567d75..cd6aef6a33 100644 --- a/testsuites/sptests/sp21/init.c +++ b/testsuites/sptests/sp21/init.c @@ -1,17 +1,5 @@ -/* Init - * - * This routine is the initialization task for this test program. - * It is a user initialization task and has the responsibility for creating - * and starting the tasks that make up the test. If the time of day - * clock is required for the test, it should also be set to a known - * value by this function. - * - * Input parameters: - * argument - task argument - * - * Output parameters: NONE - * - * COPYRIGHT (c) 1989-1999. +/* + * COPYRIGHT (c) 1989-2010. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -21,32 +9,217 @@ * $Id$ */ -#define CONFIGURE_INIT -#include "system.h" +#include <tmacros.h> +#include <rtems/devnull.h> + + +#define PRIurtems_device_major_number PRIu32 + +#define STUB_DRIVER_MAJOR 0x2 +#define NO_DRIVER_MAJOR 0x3 +#define INVALID_DRIVER_MAJOR \ + (rtems_configuration_get_number_of_device_drivers() + 1) + +/* driver entries to use with io_register */ +rtems_driver_address_table GoodDriver = DEVNULL_DRIVER_TABLE_ENTRY; +rtems_driver_address_table BadDriver_Nothing = { + NULL, NULL, NULL, NULL, NULL, NULL +}; + +void do_test_io_manager(void) +{ + rtems_status_code status; + rtems_device_major_number registered; + rtems_device_major_number registered_worked; + + puts( "----- TESTING THE NULL DRIVER CHECKS -----" ); + + status = rtems_io_initialize( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_initialize" ); + puts( "rtems_io_initialize - NULL DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_open( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_open" ); + puts( "rtems_io_open - NULL DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_close( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_close" ); + puts( "rtems_io_close - NULL DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_read( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_read" ); + puts( "rtems_io_read - NULL DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_write( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_write" ); + puts( "rtems_io_write - NULL DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_control( NO_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_control" ); + puts( "rtems_io_control - NULL DRIVER RTEMS_SUCCESSFUL" ); + + puts( "----- TESTING THE I/O MANAGER DIRECTIVES -----" ); + + status = rtems_io_initialize( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_initialize" ); + puts( "rtems_io_initialize - STUB DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_open( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_open" ); + puts( "rtems_io_open - STUB DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_close( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_close" ); + puts( "rtems_io_close - STUB DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_read( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_read" ); + puts( "rtems_io_read - STUB DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_write( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_write" ); + puts( "rtems_io_write - STUB DRIVER RTEMS_SUCCESSFUL" ); + + status = rtems_io_control( STUB_DRIVER_MAJOR, 0, NULL ); + directive_failed( status, "rtems_io_control" ); + puts( "rtems_io_control - STUB DRIVER RTEMS_SUCCESSFUL" ); + + /* + * Invalid major number + */ + puts( "----- RETURNING INVALID MAJOR NUMBER -----" ); + + status = rtems_io_initialize( INVALID_DRIVER_MAJOR, 0, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_io_initialize" + ); + puts( "rtems_io_initialize - RTEMS_INVALID_NUMBER" ); + + status = rtems_io_open( INVALID_DRIVER_MAJOR, 0, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_io_open" + ); + puts( "rtems_io_open - RTEMS_INVALID_NUMBER" ); + + /* + * Exercise the io register driver directive + */ + puts( "----- EXERCISE DRIVER REGISTER -----" ); + + status = rtems_io_register_driver( 0, &GoodDriver, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL registered" + ); + + status = rtems_io_register_driver( 0, NULL, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - NULL device" + ); + + status = rtems_io_register_driver( 0, &BadDriver_Nothing, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_io_register_driver" + ); + puts( + "rtems_io_register_driver - RTEMS_INVALID_ADDRESS - no callouts" + ); + + status = rtems_io_register_driver( + INVALID_DRIVER_MAJOR, &GoodDriver, ®istered ); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_io_register_driver" + ); + puts( "rtems_io_register_driver - RTEMS_INVALID_NUMBER - bad major" ); + + /* this has to succeed to overwrite NULL driver entry required above. */ + status = rtems_io_register_driver( 0, &GoodDriver, ®istered_worked ); + directive_failed( status, "rtems_io_register_driver" ); + puts( "rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL" ); + + status = rtems_io_register_driver( 0, &GoodDriver, ®istered ); + if ( status == RTEMS_SUCCESSFUL ) + printf( + "registered major = %" PRIurtems_device_major_number "\n", registered ); + fatal_directive_status( + status, + RTEMS_TOO_MANY, + "rtems_io_register_driver" + ); + puts( "rtems_io_register_driver - RTEMS_TOO_MANY - no slots" ); + + /* there should be a driver at major 1 -- clock, console, or stub */ + status = rtems_io_register_driver( 1, &GoodDriver, ®istered ); + fatal_directive_status( + status, + RTEMS_RESOURCE_IN_USE, + "rtems_io_register_driver" + ); + puts( + "rtems_io_register_driver - RTEMS_RESOURCE_IN_USE - major in use" + ); + + /* this should unregister the device driver we registered above */ + status = rtems_io_unregister_driver( registered_worked ); + directive_failed( status, "rtems_io_unregister_driver" ); + puts( "rtems_io_unregister_driver - RTEMS_SUCCESSFUL" ); +} + +void do_test_io_lookup_name(void) +{ + rtems_status_code sc; + rtems_driver_name_t info; + + puts( "rtems_io_lookup_name( \"\", &info )" ); + sc = rtems_io_lookup_name( "", &info ); + fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" ); + + puts( "rtems_io_lookup_name( \"/dev/null\", &info )" ); + sc = rtems_io_lookup_name( "/dev/null", &info ); + directive_failed( sc, "lookup /dev/null" ); +} rtems_task Init( rtems_task_argument argument ) { - rtems_status_code status; - puts( "\n\n*** TEST 21 ***" ); - Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); + do_test_io_manager(); - status = rtems_task_create( - Task_name[ 1 ], - 1, - RTEMS_MINIMUM_STACK_SIZE, - RTEMS_DEFAULT_MODES, - RTEMS_DEFAULT_ATTRIBUTES, - &Task_id[ 1 ] - ); - directive_failed( status, "rtems_task_create of TA1" ); - - status = rtems_task_start( Task_id[ 1 ], Task_1, 0 ); - directive_failed( status, "rtems_task_start of TA1" ); + do_test_io_lookup_name(); - status = rtems_task_delete( RTEMS_SELF ); - directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); + puts( "*** END OF TEST 21 ***" ); + rtems_test_exit( 0 ); } + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> +/* end of file */ |