summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp69/init.c
diff options
context:
space:
mode:
authorGlenn Humphrey <glenn.humphrey@oarcorp.com>2009-12-08 23:07:38 +0000
committerGlenn Humphrey <glenn.humphrey@oarcorp.com>2009-12-08 23:07:38 +0000
commit7199b1d0dcd4d56ffd7c21091a1e62c6a799cf06 (patch)
tree8ba8556c261558a1814a30bbee121a2c2d0f7657 /testsuites/sptests/sp69/init.c
parent2009-12-08 Glenn Humphrey <glenn.humphrey@OARcorp.com> (diff)
downloadrtems-7199b1d0dcd4d56ffd7c21091a1e62c6a799cf06.tar.bz2
2009-12-08 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* Makefile.am, configure.ac: Added a test for rate_monotonic_get_status to ensure that all paths are tested. * sp69/Makefile.am, sp69/init.c, sp69/sp69.doc, sp69/sp69.scn: New files.
Diffstat (limited to 'testsuites/sptests/sp69/init.c')
-rw-r--r--testsuites/sptests/sp69/init.c164
1 files changed, 164 insertions, 0 deletions
diff --git a/testsuites/sptests/sp69/init.c b/testsuites/sptests/sp69/init.c
new file mode 100644
index 0000000000..1b79e610e7
--- /dev/null
+++ b/testsuites/sptests/sp69/init.c
@@ -0,0 +1,164 @@
+/*
+ * 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 <rtems/cpuuse.h>
+#include <tmacros.h>
+#include "test_support.h"
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_id period_id;
+ rtems_name period_name;
+ rtems_rate_monotonic_period_status period_status;
+ rtems_status_code status;
+
+ period_name = rtems_build_name('P','E','R','1');
+
+ puts( "\n\n*** TEST 69 ***" );
+
+ /* create period */
+ status = rtems_rate_monotonic_create(
+ period_name,
+ &period_id
+ );
+ directive_failed( status, "rate_monotonic_create" );
+
+ /*
+ * Check get_status on an inactive period.
+ */
+ puts(
+ "rtems_rate_monotonic_get_status - verify values of an inactive period"
+ );
+
+ status = rtems_rate_monotonic_get_status( period_id, &period_status );
+ directive_failed( status, "rate_monotonic_get_status" );
+
+ /* Check status values. */
+ rtems_test_assert( period_status.owner == rtems_task_self() );
+ rtems_test_assert( period_status.state == RATE_MONOTONIC_INACTIVE );
+ #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
+ rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
+ rtems_test_assert( period_status.since_last_period.tv_nsec == 0 );
+ rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
+ rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 );
+ #else
+ rtems_test_assert( period_status.since_last_period == 0 );
+ rtems_test_assert( period_status.executed_since_last_period == 0 );
+ #endif
+
+ /*
+ * Check get_status error cases.
+ */
+ puts( "rtems_rate_monotonic_get_status - check RTEMS_NOT_DEFINED" );
+
+ /* Do some work to get a non-zero cpu usage */
+ rtems_test_spin_for_ticks( 10 );
+
+ status = rtems_rate_monotonic_period( period_id, 100 );
+ directive_failed( status, "rate_monotonic_period" );
+
+ /* Do some more work */
+ rtems_test_spin_for_ticks( 10 );
+
+ /* Reset the cpu usage statistics. */
+ rtems_cpu_usage_reset();
+
+ /* Status should be undefined. */
+ status = rtems_rate_monotonic_get_status( period_id, &period_status );
+ fatal_directive_status(
+ status,
+ RTEMS_NOT_DEFINED,
+ "rtems_rate_monotonic_get_status after cpu usage reset"
+ );
+
+ /* Clean up. */
+ status = rtems_rate_monotonic_cancel( period_id );
+ directive_failed( status, "rate_monotonic_cancel" );
+
+ /*
+ * Check normal get_status results.
+ */
+ puts(
+ "rtems_rate_monotonic_get_status - verify values of an active period"
+ );
+ rtems_test_spin_until_next_tick();
+ status = rtems_rate_monotonic_period( period_id, 100 );
+ directive_failed( status, "rate_monotonic_period" );
+
+ /* Do some work */
+ rtems_test_spin_for_ticks( 10 );
+
+ /* Block a little */
+ status = rtems_task_wake_after( 50 );
+
+ /* Check the status */
+ status = rtems_rate_monotonic_get_status( period_id, &period_status );
+ directive_failed( status, "rate_monotonic_get_status" );
+
+ /* Check status values. */
+ #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
+ printf(
+ "wall time should be ~600000000 is %d\n",
+ period_status.since_last_period.tv_nsec
+ );
+ printf(
+ "cpu time should be ~100000000 is %d\n",
+ period_status.executed_since_last_period.tv_nsec
+ );
+ rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
+ rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 );
+ rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 );
+ rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
+ rtems_test_assert(
+ period_status.executed_since_last_period.tv_nsec >= 100000000
+ );
+ rtems_test_assert(
+ period_status.executed_since_last_period.tv_nsec <= 110000000
+ );
+ #else
+ printf(
+ "wall time should be ~60 is %d\n",
+ (int) period_status.since_last_period
+ );
+ printf(
+ "cpu time should be ~10 is %d\n",
+ (int) period_status.executed_since_last_period
+ );
+ rtems_test_assert( period_status.since_last_period >= 60 );
+ rtems_test_assert( period_status.since_last_period <= 61 );
+ rtems_test_assert( period_status.executed_since_last_period >= 10 );
+ rtems_test_assert( period_status.executed_since_last_period <= 12 );
+ #endif
+
+ puts("*** END OF TEST 69 ***");
+
+ rtems_test_exit(0);
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MILLISECONDS_PER_TICK 1
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+#define CONFIGURE_MAXIMUM_PERIODS 1
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
+/* end of file */