From 247118bf519c18bd646417a817b8a22b304dcc61 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Thu, 10 Jul 2014 11:55:04 -0500 Subject: smpschedsem01: new test. This test verifies priority is inherited from a high priority semaphore by a lower priority task. --- testsuites/smptests/Makefile.am | 1 + testsuites/smptests/configure.ac | 1 + testsuites/smptests/smpschedsem01/Makefile.am | 19 +++++ testsuites/smptests/smpschedsem01/init.c | 94 ++++++++++++++++++++++ .../smptests/smpschedsem01/smpschedsem01.doc | 12 +++ .../smptests/smpschedsem01/smpschedsem01.scn | 7 ++ 6 files changed, 134 insertions(+) create mode 100644 testsuites/smptests/smpschedsem01/Makefile.am create mode 100644 testsuites/smptests/smpschedsem01/init.c create mode 100644 testsuites/smptests/smpschedsem01/smpschedsem01.doc create mode 100644 testsuites/smptests/smpschedsem01/smpschedsem01.scn diff --git a/testsuites/smptests/Makefile.am b/testsuites/smptests/Makefile.am index 29f802c18c..a6e7209df0 100644 --- a/testsuites/smptests/Makefile.am +++ b/testsuites/smptests/Makefile.am @@ -31,6 +31,7 @@ SUBDIRS += smpschedaffinity05 SUBDIRS += smpscheduler01 SUBDIRS += smpscheduler02 SUBDIRS += smpscheduler03 +SUBDIRS += smpschedsem01 SUBDIRS += smpsignal01 SUBDIRS += smpswitchextension01 SUBDIRS += smpthreadlife01 diff --git a/testsuites/smptests/configure.ac b/testsuites/smptests/configure.ac index c181cbcc07..d88b9a0775 100644 --- a/testsuites/smptests/configure.ac +++ b/testsuites/smptests/configure.ac @@ -89,6 +89,7 @@ smpschedaffinity05/Makefile smpscheduler01/Makefile smpscheduler02/Makefile smpscheduler03/Makefile +smpschedsem01/Makefile smpsignal01/Makefile smpswitchextension01/Makefile smpthreadlife01/Makefile diff --git a/testsuites/smptests/smpschedsem01/Makefile.am b/testsuites/smptests/smpschedsem01/Makefile.am new file mode 100644 index 0000000000..bf39506e26 --- /dev/null +++ b/testsuites/smptests/smpschedsem01/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = smpschedsem01 +smpschedsem01_SOURCES = init.c + +dist_rtems_tests_DATA = smpschedsem01.scn smpschedsem01.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(smpschedsem01_OBJECTS) +LINK_LIBS = $(smpschedsem01_LDLIBS) + +smpschedsem01$(EXEEXT): $(smpschedsem01_OBJECTS) $(smpschedsem01_DEPENDENCIES) + @rm -f smpschedsem01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/smptests/smpschedsem01/init.c b/testsuites/smptests/smpschedsem01/init.c new file mode 100644 index 0000000000..894ba812b9 --- /dev/null +++ b/testsuites/smptests/smpschedsem01/init.c @@ -0,0 +1,94 @@ +/* + * COPYRIGHT (c) 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.org/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include + +#include "tmacros.h" + +const char rtems_test_name[] = "SMPSCHEDSEM 01"; + +#define NUM_CPUS 1 +#define TASK_COUNT 2 +#define TASK_PRIORITY 8 +#define SEM_PRIORITY 5 + +/* + * Test verifies priority, + * Changes priority by obtaining a higher priority semaphore + * Releases semaphore to return priority + */ +static void test(void) +{ + rtems_id id; + rtems_status_code sc; + rtems_task_priority priority; + rtems_id task_sem; + + sc = rtems_semaphore_create( + rtems_build_name('S', 'E', 'M', '0'), + 1, + RTEMS_BINARY_SEMAPHORE | + RTEMS_PRIORITY | + RTEMS_PRIORITY_CEILING, + 5, + &task_sem + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY ); + rtems_test_assert( priority == TASK_PRIORITY ); + + printf("Init: Obtain Semaphore\n"); + sc = rtems_semaphore_obtain (task_sem, RTEMS_WAIT, RTEMS_NO_TIMEOUT); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, SEM_PRIORITY ); + rtems_test_assert( priority == SEM_PRIORITY ); + + printf("Init: Release Semaphore\n"); + rtems_semaphore_release(task_sem); + rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &priority); + printf("Init: priority %d expected %d\n",(int)priority, TASK_PRIORITY ); + rtems_test_assert( priority == TASK_PRIORITY ); +} + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + test(); + + TEST_END(); + rtems_test_exit(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_SMP_APPLICATION + +#define CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP + +#define CONFIGURE_SMP_MAXIMUM_PROCESSORS NUM_CPUS + +#define CONFIGURE_MAXIMUM_TASKS TASK_COUNT + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_INIT_TASK_PRIORITY TASK_PRIORITY +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include diff --git a/testsuites/smptests/smpschedsem01/smpschedsem01.doc b/testsuites/smptests/smpschedsem01/smpschedsem01.doc new file mode 100644 index 0000000000..22c76161a8 --- /dev/null +++ b/testsuites/smptests/smpschedsem01/smpschedsem01.doc @@ -0,0 +1,12 @@ +This file describes the directives and concepts tested by this test set. + +test set name: smpschedsem01 + +directives: + + - _Scheduler_priority_affinity_xxx + +concepts: + + - Ensure priority is inherited from a high priority semaphore by a lower + priority task. diff --git a/testsuites/smptests/smpschedsem01/smpschedsem01.scn b/testsuites/smptests/smpschedsem01/smpschedsem01.scn new file mode 100644 index 0000000000..71a1da2e98 --- /dev/null +++ b/testsuites/smptests/smpschedsem01/smpschedsem01.scn @@ -0,0 +1,7 @@ +*** BEGIN OF TEST SMPSCHEDSEM 01 *** +Init: priority 8 expected 8 +Init: Obtain Semaphore +Init: priority 5 expected 5 +Init: Release Semaphore +Init: priority 8 expected 8 +*** END OF TEST SMPSCHEDSEM 01 *** -- cgit v1.2.3