[rtems commit] smptests: Add smppsxaffinity01.

Jennifer Averett jennifer at rtems.org
Fri Mar 7 15:08:50 UTC 2014


Module:    rtems
Branch:    master
Commit:    f3e6b18a4aa799d778ded7c952baeac6ae26ade0
Changeset: http://git.rtems.org/rtems/commit/?id=f3e6b18a4aa799d778ded7c952baeac6ae26ade0

Author:    Jennifer Averett <jennifer.averett at oarcorp.com>
Date:      Wed Feb 26 09:41:04 2014 -0600

smptests: Add smppsxaffinity01.

This test exercises the ability to obtain and modify
the affinity field of the POSIX thread attributes.

---

 testsuites/smptests/Makefile.am                    |    1 +
 testsuites/smptests/configure.ac                   |    1 +
 testsuites/smptests/smppsxaffinity01/Makefile.am   |   23 +++
 testsuites/smptests/smppsxaffinity01/init.c        |  174 ++++++++++++++++++++
 .../smptests/smppsxaffinity01/smppsxaffinity01.doc |   22 +++
 .../smptests/smppsxaffinity01/smppsxaffinity01.scn |   11 ++
 6 files changed, 232 insertions(+), 0 deletions(-)

diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am
index 42f1451..9b4c02d 100644
--- a/testsuites/smptests/Makefile.am
+++ b/testsuites/smptests/Makefile.am
@@ -22,6 +22,7 @@ SUBDIRS += smpsignal01
 SUBDIRS += smpswitchextension01
 SUBDIRS += smpunsupported01
 if HAS_POSIX
+SUBDIRS += smppsxaffinity01
 SUBDIRS += smppsxsignal01
 endif
 endif
diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac
index 5eac44e..a447f38 100644
--- a/testsuites/smptests/configure.ac
+++ b/testsuites/smptests/configure.ac
@@ -71,6 +71,7 @@ smpfatal02/Makefile
 smpfatal03/Makefile
 smplock01/Makefile
 smpmigration01/Makefile
+smppsxaffinity01/Makefile
 smppsxsignal01/Makefile
 smpschedule01/Makefile
 smpsignal01/Makefile
diff --git a/testsuites/smptests/smppsxaffinity01/Makefile.am b/testsuites/smptests/smppsxaffinity01/Makefile.am
new file mode 100644
index 0000000..1788923
--- /dev/null
+++ b/testsuites/smptests/smppsxaffinity01/Makefile.am
@@ -0,0 +1,23 @@
+
+rtems_tests_PROGRAMS = smppsxaffinity01
+smppsxaffinity01_SOURCES = init.c
+
+dist_rtems_tests_DATA = smppsxaffinity01.scn
+dist_rtems_tests_DATA += smppsxaffinity01.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+
+AM_CPPFLAGS += -I$(top_srcdir)/include
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+
+LINK_OBJS = $(smppsxaffinity01_OBJECTS)
+LINK_LIBS = $(smppsxaffinity01_LDLIBS)
+
+smppsxaffinity01$(EXEEXT): $(smppsxaffinity01_OBJECTS) $(smppsxaffinity01_DEPENDENCIES)
+	@rm -f smppsxaffinity01$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/smptests/smppsxaffinity01/init.c b/testsuites/smptests/smppsxaffinity01/init.c
new file mode 100644
index 0000000..525b5f7
--- /dev/null
+++ b/testsuites/smptests/smppsxaffinity01/init.c
@@ -0,0 +1,174 @@
+/*
+ *  COPYRIGHT (c) 1989-2014.
+ *  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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define  _GNU_SOURCE
+
+#include <tmacros.h>
+#include <errno.h>
+#include <pthread.h>
+#include <sched.h>
+
+#if HAVE_DECL_PTHREAD_GETAFFINITY_NP
+
+#define CPU_COUNT 4
+
+pthread_t           Init_id;
+
+/* forward declarations to avoid warnings */
+void *POSIX_Init(void *argument);
+void Validate_attrgetaffinity_errors(void);
+void Validate_attrsetaffinity_errors(void);
+void Validate_attr(void);
+
+void Validate_attrgetaffinity_errors(void) 
+{
+  int                 sc;
+  cpu_set_t           cpuset;
+  pthread_attr_t      attr;
+
+  /* Verify pthread_attr_getaffinity_np validates attr  */
+  puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT" );
+  sc = pthread_attr_getaffinity_np( NULL, sizeof(cpu_set_t), &cpuset );
+  rtems_test_assert( sc == EFAULT );
+
+  /* Verify pthread_attr_getaffinity_np validates cpuset */
+  puts( "Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT" );
+  sc = pthread_attr_getaffinity_np( &attr, sizeof(cpu_set_t), NULL );
+  rtems_test_assert( sc == EFAULT );
+
+  /* Verify pthread_attr_getaffinity_np validates cpusetsize */
+  puts( "Init - pthread_attr_getaffinity_np - Invalid cpusetsize - EINVAL" );
+  sc = pthread_attr_getaffinity_np( &attr, sizeof(cpu_set_t) * 2 , &cpuset );
+  rtems_test_assert( sc == EINVAL );
+
+}
+
+void Validate_attrsetaffinity_errors(void) 
+{
+  int                 sc;
+  cpu_set_t           cpuset;
+  pthread_attr_t      attr;
+
+  /* Verify pthread_attr_setaffinity_np validates attr.  */
+  puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT" );
+  sc = pthread_attr_setaffinity_np( NULL, sizeof(cpu_set_t), &cpuset );
+  rtems_test_assert( sc == EFAULT );
+
+  /* Verify pthread_attr_setaffinity_np validates cpuset    */
+  puts( "Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT" );
+  sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t), NULL );
+  rtems_test_assert( sc == EFAULT );
+
+  /* Verify pthread_attr_setaffinity_np validates cpusetsize */
+  puts( "Init - pthread_attr_setaffinity_np - Invalid cpusetsize - EINVAL" );
+  sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) * 2 , &cpuset );
+  rtems_test_assert( sc == EINVAL );
+
+  /* Verify pthread_attr_setaffinity_np validates cpuset greater than 0  */
+  CPU_ZERO(&cpuset);
+  puts( "Init - pthread_attr_setaffinity_np - No cpus in cpuset - EINVAL" );
+  sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) , &cpuset );
+  rtems_test_assert( sc == EINVAL );
+
+  /* Verify pthread_attr_setaffinity_np validates invalid cpu in cpuset */
+  CPU_FILL(&cpuset);
+  puts( "Init - pthread_attr_setaffinity_np - Too many cpus in cpuset - EINVAL" );
+  sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t) , &cpuset );
+  rtems_test_assert( sc == EINVAL );
+}
+
+void Validate_attr(void )
+{
+  int                 sc;
+  pthread_attr_t      attr;
+  uint32_t            cpus;
+  cpu_set_t           cpuset1;
+  cpu_set_t           cpuset2;
+  int                 i;
+  int                 priority;
+
+  sc = pthread_getattr_np( Init_id, &attr );
+  rtems_test_assert( sc == 0 );
+
+  priority = sched_get_priority_min( SCHED_FIFO );
+  rtems_test_assert( priority != -1 );
+
+
+  cpus = rtems_smp_get_processor_count();
+  puts( 
+    "Init - Validate pthread_attr_setaffinity_np and "
+    "pthread_attr_getaffinity_np"
+  );
+  
+  /* Set each cpu seperately in the affinity set */
+  for ( i=0; i<cpus; i++ ){
+    CPU_ZERO(&cpuset1);
+    CPU_SET(i, &cpuset1);
+
+    sc = pthread_attr_setaffinity_np( &attr, sizeof(cpu_set_t), &cpuset1 );
+    rtems_test_assert( sc == 0 );
+
+    sc = pthread_attr_getaffinity_np( &attr, sizeof(cpu_set_t), &cpuset2 );
+    rtems_test_assert( sc == 0 );
+    
+    rtems_test_assert( CPU_EQUAL(&cpuset1, &cpuset2) );
+  }
+}
+
+void *POSIX_Init(
+  void *ignored
+)
+{
+  puts( "\n\n*** SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***" );
+
+  /* Initialize thread id */ 
+  Init_id = pthread_self();
+
+  Validate_attrsetaffinity_errors();
+  Validate_attrgetaffinity_errors();
+  Validate_attr();
+ 
+  puts( "*** END OF SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***" );
+  rtems_test_exit(0);
+}
+
+#else
+void *POSIX_Init(
+  void *ignored
+)
+{
+  puts( "\n\n*** SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***" );
+  puts( " POSIX Affinity Methods NOT Supported");
+  puts( "*** END OF SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***" );
+  rtems_test_exit(0);
+}
+
+#endif
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+#define CONFIGURE_SMP_APPLICATION
+
+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
+
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS  1
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+
+/* global variables */
diff --git a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc
new file mode 100644
index 0000000..b6333c4
--- /dev/null
+++ b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.doc
@@ -0,0 +1,22 @@
+#  COPYRIGHT (c) 1989-2014.
+#  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:  psxpsxaffinity01
+
+directives:
+
+  pthread_attr_getaffinity_np
+  pthread_attr_setaffinity_np
+  
+concepts:
+
++ Verify error conditions and functionality of pthread_attr_getaffinity_np
+
++ Verify error conditions and functionality of pthread_attr_setaffinity_np
diff --git a/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn
new file mode 100644
index 0000000..70bd6d3
--- /dev/null
+++ b/testsuites/smptests/smppsxaffinity01/smppsxaffinity01.scn
@@ -0,0 +1,11 @@
+*** SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***
+Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT
+Init - pthread_attr_setaffinity_np - Invalid attr - EFAULT
+Init - pthread_attr_setaffinity_np - Invalid cpusetsize - EINVAL
+Init - pthread_attr_setaffinity_np - No cpus in cpuset - EINVAL
+Init - pthread_attr_setaffinity_np - Too many cpus in cpuset - EINVAL
+Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT
+Init - pthread_attr_getaffinity_np - Invalid attr - EFAULT
+Init - pthread_attr_getaffinity_np - Invalid cpusetsize - EINVAL
+Init - Validate pthread_attr_setaffinity_np and pthread_attr_getaffinity_np
+*** END OF SMP POSIX AFFINITY ATTRIBUTE TEST 1 ***




More information about the vc mailing list