summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp21/init.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-06 22:27:23 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-07-06 22:27:23 +0000
commit6f67619ee65456056e2ef5f172fe2228c17d9842 (patch)
tree0d6c758e80f922022a1614ad2e0167ffeb3dd2c8 /testsuites/sptests/sp21/init.c
parent2009-10-28 Till Straumann <strauman@slac.stanford.edu> (diff)
downloadrtems-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.c239
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, &registered );
+ 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, &registered );
+ 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, &registered );
+ 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, &registered_worked );
+ directive_failed( status, "rtems_io_register_driver" );
+ puts( "rtems_io_register_driver - RTEMS_SUCCESSFUL - overwrite NULL" );
+
+ status = rtems_io_register_driver( 0, &GoodDriver, &registered );
+ 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, &registered );
+ 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 */