summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/sp43/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/sptests/sp43/init.c')
-rw-r--r--testsuites/sptests/sp43/init.c272
1 files changed, 272 insertions, 0 deletions
diff --git a/testsuites/sptests/sp43/init.c b/testsuites/sptests/sp43/init.c
new file mode 100644
index 0000000000..6ce8d05a92
--- /dev/null
+++ b/testsuites/sptests/sp43/init.c
@@ -0,0 +1,272 @@
+/*
+ * Exercise Object Manager Services
+ *
+ * COPYRIGHT (c) 1989-2008.
+ * 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$
+ */
+
+#define TEST_INIT
+#include "system.h"
+
+#undef rtems_build_id
+#undef rtems_build_name
+#undef rtems_object_id_api_maximum
+#undef rtems_object_id_api_minimum
+#undef rtems_object_id_get_api
+#undef rtems_object_id_get_class
+#undef rtems_object_id_get_index
+#undef rtems_object_id_get_node
+
+void print_class_info(
+ uint32_t api,
+ uint32_t class,
+ rtems_object_api_class_information *info
+)
+{
+ printf(
+ "%s API %s Information\n"
+ " minimum id : 0x%08x maximum id: 0x%08x\n"
+ " maximum : %7d available : %d\n"
+ " auto_extend : %s\n",
+ rtems_object_get_api_name(api),
+ rtems_object_get_api_class_name(api, class),
+ info->minimum_id,
+ info->maximum_id,
+ info->maximum,
+ info->unallocated,
+ ((info->auto_extend) ? "yes" : "no")
+ );
+}
+
+rtems_task Init(
+ rtems_task_argument argument
+)
+{
+ rtems_status_code status;
+ rtems_id main_task;
+ rtems_name main_name;
+ rtems_id tmpId;
+ rtems_name tmpName;
+ char name[5];
+ char *ptr;
+ const char newName[5] = "New1";
+ uint32_t part;
+ rtems_object_api_class_information info;
+
+
+ puts( "\n\n*** TEST 43 ***" );
+
+ main_task = rtems_task_self();
+
+ puts( "rtems_object_get_classic_name - INVALID_ADDRESS" );
+ status = rtems_object_get_classic_name( main_task, NULL );
+ fatal_directive_status(
+ status,
+ RTEMS_INVALID_ADDRESS,
+ "rtems_object_get_classic_name"
+ );
+
+ puts( "rtems_object_get_classic_name - INVALID_ID" );
+ status = rtems_object_get_classic_name( main_task + 5, &tmpId );
+ fatal_directive_status(
+ status,
+ RTEMS_INVALID_ID,
+ "rtems_object_get_classic_name"
+ );
+
+ status = rtems_object_get_classic_name( main_task, &main_name );
+ directive_failed( status, "rtems_object_get_classic_name" );
+ put_name( main_name, FALSE );
+ puts( " - name returned by rtems_object_get_classic_name" );
+
+ tmpName = rtems_build_name( 'T', 'E', 'M', 'P' );
+ put_name( tmpName, FALSE );
+ puts( " - rtems_build_name for TEMP" );
+
+
+ /*
+ * rtems_object_get_name - cases
+ */
+ puts( "rtems_object_get_name - bad id for class with instances" );
+ ptr = rtems_object_get_name( main_task + 5, 5, name );
+ rtems_test_assert(ptr == NULL);
+
+ puts( "rtems_object_get_name - bad id for class without instances" );
+ ptr = rtems_object_get_name(
+ rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS, 1, 1 ),
+ 5,
+ name
+ );
+ rtems_test_assert(ptr == NULL);
+
+ puts( "rtems_object_get_name - bad length" );
+ ptr = rtems_object_get_name( main_task, 0, name );
+ rtems_test_assert(ptr == NULL);
+
+ puts( "rtems_object_get_name - bad pointer" );
+ ptr = rtems_object_get_name( main_task, 5, NULL );
+ rtems_test_assert(ptr == NULL);
+
+ ptr = rtems_object_get_name( main_task, 5, name );
+ rtems_test_assert(ptr != NULL);
+ printf( "rtems_object_get_name returned (%s) for init task\n", ptr );
+
+ /*
+ * rtems_object_set_name - change name of init task
+ */
+
+ puts( "rtems_object_set_name - change name of init task" );
+ status = rtems_object_set_name( main_task, newName );
+ directive_failed( status, "rtems_object_set_name" );
+
+ status = rtems_object_get_classic_name( main_task, &main_name );
+ directive_failed( status, "rtems_object_get_classic_name" );
+ put_name( main_name, FALSE );
+ puts( " - name returned by rtems_object_get_classic_name" );
+
+ ptr = rtems_object_get_name( main_task, 5, name );
+ rtems_test_assert(ptr != NULL);
+ printf( "rtems_object_get_name returned (%s) for init task\n", ptr );
+
+ /*
+ * Exercise id build and extraction routines
+ */
+
+ puts( "rtems_build_id - build an id to match init task" );
+ tmpId = rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, 1, 1 ),
+ assert( tmpId == main_task );
+
+ puts( "rtems_object_id_get_api - OK" );
+ part = rtems_object_id_get_api( main_task );
+ assert( part == OBJECTS_CLASSIC_API );
+
+ puts( "rtems_object_id_get_class - OK" );
+ part = rtems_object_id_get_class( main_task );
+ assert( part == OBJECTS_RTEMS_TASKS );
+
+ puts( "rtems_object_id_get_node - OK" );
+ part = rtems_object_id_get_node( main_task );
+ assert( part == 1 );
+
+ puts( "rtems_object_id_get_index - OK" );
+ part = rtems_object_id_get_index( main_task );
+ assert( part == 1 );
+
+ /*
+ * Start another screen and do the API/Class min/max routines
+ */
+ rtems_test_pause();
+
+ printf( "rtems_object_id_api_minimum returned %d\n",
+ rtems_object_id_api_minimum() );
+ printf( "rtems_object_id_api_maximum returned %d\n",
+ rtems_object_id_api_maximum() );
+
+ printf( "rtems_object_api_minimum_class(0) returned %d\n",
+ rtems_object_api_minimum_class(0) );
+ printf( "rtems_object_api_maximum_class(0) returned %d\n",
+ rtems_object_api_maximum_class(0) );
+
+ printf( "rtems_object_api_minimum_class(0) returned %d\n",
+ rtems_object_api_minimum_class(0) );
+ printf( "rtems_object_api_maximum_class(0) returned %d\n",
+ rtems_object_api_maximum_class(0) );
+
+ printf( "rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) returned %d\n",
+ rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) );
+ printf( "rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) returned %d\n",
+ rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) );
+
+ printf( "rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) returned %d\n",
+ rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) );
+ printf( "rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) returned %d\n",
+ rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) );
+
+ printf( "rtems_object_api_minimum_class(OBJECTS_POSIX_API) returned %d\n",
+ rtems_object_api_minimum_class(OBJECTS_POSIX_API) );
+ printf( "rtems_object_api_maximum_class(OBJECTS_POSIX_API) returned %d\n",
+ rtems_object_api_maximum_class(OBJECTS_POSIX_API) );
+
+ printf( "rtems_object_api_minimum_class(OBJECTS_ITRON_API) returned %d\n",
+ rtems_object_api_minimum_class(OBJECTS_ITRON_API) );
+ printf( "rtems_object_api_maximum_class(OBJECTS_ITRON_API) returned %d\n",
+ rtems_object_api_maximum_class(OBJECTS_ITRON_API) );
+
+
+ /*
+ * Another screen break for the API and class name tests
+ */
+ rtems_test_pause();
+
+ printf( "rtems_object_get_api_name(0) = %s\n", rtems_object_get_api_name(0) );
+ printf( "rtems_object_get_api_name(255) = %s\n", rtems_object_get_api_name(255));
+
+ printf( "rtems_object_get_api_name(INTERNAL_API) = %s\n",
+ rtems_object_get_api_name(OBJECTS_INTERNAL_API) );
+ printf( "rtems_object_get_api_name(CLASSIC_API) = %s\n",
+ rtems_object_get_api_name(OBJECTS_CLASSIC_API) );
+ printf( "rtems_object_get_api_name(POSIX_API) = %s\n",
+ rtems_object_get_api_name(OBJECTS_POSIX_API) );
+ printf( "rtems_object_get_api_name(ITRON_API) = %s\n",
+ rtems_object_get_api_name(OBJECTS_ITRON_API) );
+
+ printf( "rtems_object_get_api_class_name(0, RTEMS_TASKS) = %s\n",
+ rtems_object_get_api_class_name( 0, OBJECTS_RTEMS_TASKS ) );
+ printf( "rtems_object_get_api_class_name(CLASSIC_API, 0) = %s\n",
+ rtems_object_get_api_class_name( OBJECTS_CLASSIC_API, 0 ) );
+ printf( "rtems_object_get_api_class_name(CLASSIC_API, RTEMS_BARRIERS) = %s\n",
+ rtems_object_get_api_class_name(OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS));
+
+ /*
+ * Another screen break for the information
+ */
+
+ rtems_test_pause();
+
+ puts( "rtems_object_get_class_information - INVALID_ADDRESS" );
+ status = rtems_object_get_class_information(
+ OBJECTS_INTERNAL_API, OBJECTS_INTERNAL_THREADS, NULL );
+ fatal_directive_status(
+ status,
+ RTEMS_INVALID_ADDRESS,
+ "rtems_object_get_class_information"
+ );
+
+ puts( "rtems_object_get_class_information - INVALID_NUMBER (bad API)" );
+ status = rtems_object_get_class_information(0, OBJECTS_INTERNAL_THREADS, &info);
+ fatal_directive_status(
+ status,
+ RTEMS_INVALID_NUMBER,
+ "rtems_object_get_class_information (API)"
+ );
+
+ puts( "rtems_object_get_class_information - INVALID_NUMBER (bad class)" );
+ status = rtems_object_get_class_information( OBJECTS_INTERNAL_API, 0, &info );
+ fatal_directive_status(
+ status,
+ RTEMS_INVALID_NUMBER,
+ "rtems_object_get_class_information (API)"
+ );
+
+ puts( "rtems_object_get_class_information - Classic Tasks - OK" );
+ status = rtems_object_get_class_information(
+ OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info );
+ directive_failed( status, "rtems_object_get_class_information" );
+ print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info );
+
+ puts( "rtems_object_get_class_information - Classic Timers - OK" );
+ status = rtems_object_get_class_information(
+ OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info );
+ directive_failed( status, "rtems_object_get_class_information" );
+ print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info );
+
+
+ puts( "*** END OF TEST 43 ***" );
+ rtems_test_exit( 0 );
+}