diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-07-30 18:48:56 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2009-07-30 18:48:56 +0000 |
commit | 3e5a9e5176f1e58d0e2622708796474d2552d625 (patch) | |
tree | 82bc03351f5f3b52d741bf28c0eae213b2bf93ef | |
parent | Spaces -> tabs. (diff) | |
download | rtems-3e5a9e5176f1e58d0e2622708796474d2552d625.tar.bz2 |
2009-07-30 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am, configure.ac: Add new test for exercising running out of
memory while allocating the key pointers.
* psxkey02/.cvsignore, psxkey02/Makefile.am, psxkey02/init.c,
psxkey02/psxkey02.doc, psxkey02/psxkey02.scn: New files.
Diffstat (limited to '')
-rw-r--r-- | testsuites/psxtests/ChangeLog | 7 | ||||
-rw-r--r-- | testsuites/psxtests/Makefile.am | 8 | ||||
-rw-r--r-- | testsuites/psxtests/configure.ac | 1 | ||||
-rw-r--r-- | testsuites/psxtests/psxkey02/.cvsignore | 2 | ||||
-rw-r--r-- | testsuites/psxtests/psxkey02/Makefile.am | 29 | ||||
-rw-r--r-- | testsuites/psxtests/psxkey02/init.c | 137 | ||||
-rw-r--r-- | testsuites/psxtests/psxkey02/psxkey02.doc | 24 | ||||
-rw-r--r-- | testsuites/psxtests/psxkey02/psxkey02.scn | 7 |
8 files changed, 211 insertions, 4 deletions
diff --git a/testsuites/psxtests/ChangeLog b/testsuites/psxtests/ChangeLog index 627367d964..8160ece423 100644 --- a/testsuites/psxtests/ChangeLog +++ b/testsuites/psxtests/ChangeLog @@ -1,3 +1,10 @@ +2009-07-30 Joel Sherrill <joel.sherrill@OARcorp.com> + + * Makefile.am, configure.ac: Add new test for exercising running out of + memory while allocating the key pointers. + * psxkey02/.cvsignore, psxkey02/Makefile.am, psxkey02/init.c, + psxkey02/psxkey02.doc, psxkey02/psxkey02.scn: New files. + 2009-07-29 Joel Sherrill <joel.sherrill@oarcorp.com> * psxmsgq04/init.c: Add call to mq_unlink. diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am index c5fb4bb225..1a3dbba0aa 100644 --- a/testsuites/psxtests/Makefile.am +++ b/testsuites/psxtests/Makefile.am @@ -6,10 +6,10 @@ ACLOCAL_AMFLAGS = -I ../aclocal SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \ psx10 psx11 psx12 psx13 psx14 psxautoinit01 psxautoinit02 psxbarrier01 \ - psxcancel psxcleanup psxcond01 psxenosys psxkey01 psxitimer psxmsgq01 \ - psxmsgq02 psxmsgq03 psxmsgq04 psxmutexattr01 psxobj01 psxrwlock01 psxsem01 \ - psxsignal01 psxsignal02 psxsignal03 psxspin01 psxspin02 psxsysconf \ - psxtime psxtimer01 psxtimer02 psxualarm \ + psxcancel psxcleanup psxcond01 psxenosys psxkey01 psxkey02 psxitimer \ + psxmsgq01 psxmsgq02 psxmsgq03 psxmsgq04 psxmutexattr01 psxobj01 \ + psxrwlock01 psxsem01 psxsignal01 psxsignal02 psxsignal03 psxspin01 \ + psxspin02 psxsysconf psxtime psxtimer01 psxtimer02 psxualarm \ psxfatal01 psxfatal02 \ psxintrcritical01 diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac index 1ea13c7135..4b96df2a44 100644 --- a/testsuites/psxtests/configure.ac +++ b/testsuites/psxtests/configure.ac @@ -55,6 +55,7 @@ psxhdrs/Makefile psxintrcritical01/Makefile psxitimer/Makefile psxkey01/Makefile +psxkey02/Makefile psxmount/Makefile psxmsgq01/Makefile psxmsgq02/Makefile diff --git a/testsuites/psxtests/psxkey02/.cvsignore b/testsuites/psxtests/psxkey02/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/psxtests/psxkey02/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/psxtests/psxkey02/Makefile.am b/testsuites/psxtests/psxkey02/Makefile.am new file mode 100644 index 0000000000..e5dc34b7e4 --- /dev/null +++ b/testsuites/psxtests/psxkey02/Makefile.am @@ -0,0 +1,29 @@ +## +## $Id$ +## + +MANAGERS = all + +rtems_tests_PROGRAMS = psxkey02 +psxkey02_SOURCES = init.c + +dist_rtems_tests_DATA = psxkey02.scn +dist_rtems_tests_DATA += psxkey02.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +psxkey02_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel) + +AM_CPPFLAGS += -I$(top_srcdir)/include +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(psxkey02_OBJECTS) $(psxkey02_LDADD) +LINK_LIBS = $(psxkey02_LDLIBS) + +psxkey02$(EXEEXT): $(psxkey02_OBJECTS) $(psxkey02_DEPENDENCIES) + @rm -f psxkey02$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/psxtests/psxkey02/init.c b/testsuites/psxtests/psxkey02/init.c new file mode 100644 index 0000000000..c0b9dc1867 --- /dev/null +++ b/testsuites/psxtests/psxkey02/init.c @@ -0,0 +1,137 @@ +/* + * COPYRIGHT (c) 1989-2009. + * On-Line Applications Research Corporation (OAR). + * + * 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. + * + * $Id$ + */ + +#include <pthread.h> +#include <errno.h> +#include "tmacros.h" +#include "pmacros.h" + +void *POSIX_Init( + void *ignored +) +{ + pthread_key_t key; + int sc; + bool sb; + Heap_Information_block start; + Heap_Information_block info; + size_t to_alloc; + void *alloced; + + puts( "\n\n*** TEST KEY 02 ***" ); + + puts( "Init - rtems_workspace_get_information - OK" ); + sb = rtems_workspace_get_information( &start ); + assert( sb ); + + #if 0 + printf( "Init - workspace free = %d\n", start.Free.largest ); + printf( "Init - workspace free blocks = %d\n", start.Free.number ); + #endif + assert( start.Free.number == 1 ); + to_alloc = start.Free.largest; + + /* find the largest we can actually allocate */ + while ( 1 ) { + sb = rtems_workspace_allocate( to_alloc, &alloced ); + if ( sb ) + break; + to_alloc -= 4; + } + + rtems_workspace_free( alloced ); + + #if 0 + printf( "Init - start with to_alloc of = %d\n", to_alloc ); + #endif + + /* + * Verify heap is still in same shape if we couldn't allocate a task + */ + sb = rtems_workspace_get_information( &info ); + assert( sb ); + assert( info.Free.largest == start.Free.largest ); + assert( info.Free.number == start.Free.number ); + + puts( "Init - pthread_key_create - ENOMEM" ); + while (1) { + + sb = rtems_workspace_allocate( to_alloc, &alloced ); + assert( sb ); + + sc = pthread_key_create( &key, NULL ); + + /* free the memory we snagged, then check the status */ + rtems_workspace_free( alloced ); + + if ( !sc ) + break; + + if ( sc != ENOMEM ) { + printf( "key create returned %s\n", strerror(sc) ); + rtems_test_exit(0); + } + + /* + * Verify heap is still in same shape if we couldn't allocate a task + */ + sb = rtems_workspace_get_information( &info ); + #if 0 + printf( "Init - workspace free/blocks = %d/%d\n", + info.Free.largest, info.Free.number ); + #endif + assert( sb ); + assert( info.Free.largest == start.Free.largest ); + assert( info.Free.number == start.Free.number ); + + to_alloc -= 8; + if ( to_alloc == 0 ) + break; + } + + if ( sc ) + rtems_test_exit(0); + + /* + * Verify heap is still in same shape after we free the task + */ + puts( "Init - pthread_key_delete - OK" ); + sc = pthread_key_delete( key ); + assert( sc == 0 ); + + puts( "Init - verify workspace has same memory" ); + sb = rtems_workspace_get_information( &info ); + #if 0 + printf( "Init - workspace free/blocks = %d/%d\n", + info.Free.largest, info.Free.number ); + #endif + assert( sb ); + assert( info.Free.largest == start.Free.largest ); + assert( info.Free.number == start.Free.number ); + + puts( "*** END OF TEST KEY 02 ***" ); + rtems_test_exit(0); +} + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_POSIX_THREADS 1 +#define CONFIGURE_MAXIMUM_POSIX_KEYS 1 + +#define CONFIGURE_POSIX_INIT_THREAD_TABLE + +#define CONFIGURE_INIT +#include <rtems/confdefs.h> + +/* global variables */ diff --git a/testsuites/psxtests/psxkey02/psxkey02.doc b/testsuites/psxtests/psxkey02/psxkey02.doc new file mode 100644 index 0000000000..77d479d63f --- /dev/null +++ b/testsuites/psxtests/psxkey02/psxkey02.doc @@ -0,0 +1,24 @@ +# +# $Id$ +# +# COPYRIGHT (c) 1989-2009. +# On-Line Applications Research Corporation (OAR). +# +# 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. +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxkey02 + +directives: + + pthread_key_create + pthread_key_delete + +concepts: + ++ Ensure that being unable to allocate the memory for the keys is properly + handled. diff --git a/testsuites/psxtests/psxkey02/psxkey02.scn b/testsuites/psxtests/psxkey02/psxkey02.scn new file mode 100644 index 0000000000..58786d7dfd --- /dev/null +++ b/testsuites/psxtests/psxkey02/psxkey02.scn @@ -0,0 +1,7 @@ +*** TEST KEY 02 *** +Init - rtems_workspace_get_information - OK +Init - pthread_key_create - ENOMEM +Init - pthread_key_delete - OK +Init - verify workspace has same memory +*** END OF TEST KEY 02 *** + |