summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2009-10-09 13:43:36 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2009-10-09 13:43:36 +0000
commitbbf6253a771ccffd161f0716eca6e20d850eaebb (patch)
tree1d0a8267a9ae4c89fae1d8b432d085ea421568aa /testsuites
parentMakefile.am: Added interrupt server. (diff)
downloadrtems-bbf6253a771ccffd161f0716eca6e20d850eaebb.tar.bz2
2009-10-09 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
* sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases. * spintrcritical09/init.c, spintrcritical10/init.c, spintrcritical11/init.c: Fixed potentially infinite loops.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/sptests/ChangeLog8
-rw-r--r--testsuites/sptests/sp40/init.c117
-rw-r--r--testsuites/sptests/sp40/sp40.doc3
-rw-r--r--testsuites/sptests/sp40/sp40.scn11
4 files changed, 120 insertions, 19 deletions
diff --git a/testsuites/sptests/ChangeLog b/testsuites/sptests/ChangeLog
index b1c7e7d71c..32561f5143 100644
--- a/testsuites/sptests/ChangeLog
+++ b/testsuites/sptests/ChangeLog
@@ -1,7 +1,11 @@
+2009-10-09 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
+
+ * sp40/init.c, sp40/sp40.doc, sp40/sp40.scn: New test cases.
+
2009-10-04 Sebastian Huber <Sebastian.Huber@embedded-brains.de>
- * sptests/spintrcritical09/init.c, sptests/spintrcritical10/init.c,
- sptests/spintrcritical11/init.c: Fixed potentially infinite loops.
+ * spintrcritical09/init.c, spintrcritical10/init.c,
+ spintrcritical11/init.c: Fixed potentially infinite loops.
* sp20/system.h: Increased micro seconds per tick in order to be more
independent of the console output speed.
diff --git a/testsuites/sptests/sp40/init.c b/testsuites/sptests/sp40/init.c
index e85437f188..db916e4f37 100644
--- a/testsuites/sptests/sp40/init.c
+++ b/testsuites/sptests/sp40/init.c
@@ -4,6 +4,8 @@
* COPYRIGHT (c) 1989-2007.
* On-Line Applications Research Corporation (OAR).
*
+ * Copyright (c) 2009 embedded brains GmbH.
+ *
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
@@ -11,24 +13,42 @@
* $Id$
*/
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
+
#include <tmacros.h>
-rtems_device_driver test_open(
+static rtems_device_driver test_open(
rtems_device_major_number minor,
rtems_device_minor_number major,
void *ignored
)
{
+ return RTEMS_IO_ERROR;
}
-rtems_driver_address_table test_driver = {
- NULL, /* initialization procedure */
- test_open, /* open request procedure */
- NULL, /* close request procedure */
- NULL, /* read request procedure */
- NULL, /* write request procedure */
- NULL, /* special functions procedure */
+static rtems_driver_address_table test_driver = {
+ .initialization_entry = NULL,
+ .open_entry = test_open,
+ .close_entry = NULL,
+ .read_entry = NULL,
+ .write_entry = NULL,
+ .control_entry = NULL
};
+
+#define test_interrupt_context_enter( level ) \
+ do { \
+ _Thread_Disable_dispatch(); \
+ rtems_interrupt_disable( level ); \
+ ++_ISR_Nest_level; \
+ } while (0)
+
+#define test_interrupt_context_leave( level ) \
+ do { \
+ --_ISR_Nest_level; \
+ rtems_interrupt_enable( level ); \
+ _Thread_Enable_dispatch(); \
+ } while (0)
+
rtems_task Init(
rtems_task_argument argument
)
@@ -36,6 +56,8 @@ rtems_task Init(
rtems_status_code sc;
rtems_device_major_number registered;
rtems_device_major_number registered_not;
+ rtems_device_major_number invalid_major = _IO_Number_of_drivers + 1;
+ rtems_interrupt_level level;
puts( "\n\n*** TEST 40 ***" );
@@ -58,23 +80,86 @@ rtems_task Init(
);
puts( "Init - rtems_io_register_driver - used slot" );
- sc = rtems_io_register_driver( registered, &test_driver, &registered );
+ sc = rtems_io_register_driver( registered, &test_driver, &registered_not );
fatal_directive_status(
sc,
RTEMS_RESOURCE_IN_USE,
"rtems_io_register_driver slot in use"
);
- puts( "*** END OF TEST 40 ***" );
- rtems_test_exit( 0 );
-}
+ puts( "Init - rtems_io_unregister_driver - used slot" );
+ sc = rtems_io_unregister_driver( registered );
+ directive_failed( sc, "rtems_io_unregister_driver" );
+
+ puts( "Init - rtems_io_register_driver - free slot" );
+ sc = rtems_io_register_driver( registered, &test_driver, &registered );
+ directive_failed( sc, "rtems_io_register_driver" );
+ puts( "Init - rtems_io_register_driver - called from interrupt context" );
+ test_interrupt_context_enter( level );
+ sc = rtems_io_register_driver( 0, NULL, NULL );
+ test_interrupt_context_leave( level );
+ fatal_directive_status(
+ sc,
+ RTEMS_CALLED_FROM_ISR,
+ "rtems_io_register_driver"
+ );
-/* functions */
+ puts( "Init - rtems_io_register_driver - invalid registered major pointer" );
+ sc = rtems_io_register_driver( 0, NULL, NULL );
+ fatal_directive_status(
+ sc,
+ RTEMS_INVALID_ADDRESS,
+ "rtems_io_register_driver"
+ );
-rtems_task Init(
- rtems_task_argument argument
-);
+ puts( "Init - rtems_io_register_driver - invalid driver table pointer" );
+ sc = rtems_io_register_driver( 0, NULL, &registered );
+ fatal_directive_status(
+ sc,
+ RTEMS_INVALID_ADDRESS,
+ "rtems_io_register_driver"
+ );
+
+ puts( "Init - rtems_io_register_driver - invalid empty driver table" );
+ test_driver.open_entry = NULL;
+ sc = rtems_io_register_driver( 0, &test_driver, &registered );
+ test_driver.open_entry = test_open;
+ fatal_directive_status(
+ sc,
+ RTEMS_INVALID_ADDRESS,
+ "rtems_io_register_driver"
+ );
+
+ puts( "Init - rtems_io_register_driver - invalid major" );
+ sc = rtems_io_register_driver( invalid_major, &test_driver, &registered );
+ fatal_directive_status(
+ sc,
+ RTEMS_INVALID_NUMBER,
+ "rtems_io_register_driver"
+ );
+
+ puts( "Init - rtems_io_unregister_driver - called from interrupt context" );
+ test_interrupt_context_enter( level );
+ sc = rtems_io_unregister_driver( 0 );
+ test_interrupt_context_leave( level );
+ fatal_directive_status(
+ sc,
+ RTEMS_CALLED_FROM_ISR,
+ "rtems_io_unregister_driver"
+ );
+
+ puts( "Init - rtems_io_unregister_driver - invalid major number" );
+ sc = rtems_io_unregister_driver( invalid_major );
+ fatal_directive_status(
+ sc,
+ RTEMS_UNSATISFIED,
+ "rtems_io_unregister_driver"
+ );
+
+ puts( "*** END OF TEST 40 ***" );
+ rtems_test_exit( 0 );
+}
/* configuration information */
diff --git a/testsuites/sptests/sp40/sp40.doc b/testsuites/sptests/sp40/sp40.doc
index 4fe3640aad..fe30db18c9 100644
--- a/testsuites/sptests/sp40/sp40.doc
+++ b/testsuites/sptests/sp40/sp40.doc
@@ -16,6 +16,7 @@ test set name: sp40
directives:
rtems_io_register_driver
+ rtems_io_unregister_driver
concepts:
@@ -23,3 +24,5 @@ concepts:
when inserting into a slot that is already in use.
+ Focus on case where initialization entry is NULL and open entry is NOT NULL.
+
++ Provoke error conditions.
diff --git a/testsuites/sptests/sp40/sp40.scn b/testsuites/sptests/sp40/sp40.scn
index 04fe9a98d8..c5ba8f7722 100644
--- a/testsuites/sptests/sp40/sp40.scn
+++ b/testsuites/sptests/sp40/sp40.scn
@@ -2,6 +2,15 @@
Init - rtems_io_register_driver - init == NULL, open != NULL OK
Init - Major slot returned = 2
Init - rtems_io_register_driver - init == NULL, open != NULL OK
-Init - Major slot returned = 0
+Init - Major slot returned = 3
Init - rtems_io_register_driver - used slot
+Init - rtems_io_unregister_driver - used slot
+Init - rtems_io_register_driver - free slot
+Init - rtems_io_register_driver - called from interrupt context
+Init - rtems_io_register_driver - invalid registered major pointer
+Init - rtems_io_register_driver - invalid driver table pointer
+Init - rtems_io_register_driver - invalid empty driver table
+Init - rtems_io_register_driver - invalid major
+Init - rtems_io_unregister_driver - called from interrupt context
+Init - rtems_io_unregister_driver - invalid major number
*** END OF TEST 40 ***