summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/spsysinit01/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/sptests/spsysinit01/init.c')
-rw-r--r--testsuites/sptests/spsysinit01/init.c357
1 files changed, 316 insertions, 41 deletions
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 6d0c431a85..7e187c423e 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -19,12 +19,18 @@
#include "tmacros.h"
#include <sys/types.h>
+#include <sys/mman.h>
#include <sys/stat.h>
#include <assert.h>
+#include <fcntl.h>
+#include <mqueue.h>
#include <pthread.h>
-#include <string.h>
+#include <semaphore.h>
+#include <signal.h>
#include <stdlib.h>
+#include <string.h>
+#include <time.h>
#include <unistd.h>
#include <rtems.h>
@@ -188,6 +194,16 @@ static void next_step(init_step expected)
step = expected + 1;
}
+static bool info_not_init(const Objects_Information *info)
+{
+ return _Chain_Is_empty(&info->Inactive);
+}
+
+static bool info_is_init(const Objects_Information *info, size_t count)
+{
+ return _Chain_Node_count_unprotected(&info->Inactive) == count;
+}
+
FIRST(RTEMS_SYSINIT_BSP_WORK_AREAS)
{
assert(_Workspace_Area.area_begin == 0);
@@ -248,53 +264,49 @@ LAST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
FIRST(RTEMS_SYSINIT_DATA_STRUCTURES)
{
- assert(
- _Objects_Get_maximum_index(&_Thread_Internal_information.Objects) == 0
- );
+ assert(info_not_init(&_Thread_Information.Objects));
next_step(DATA_STRUCTURES_PRE);
}
LAST(RTEMS_SYSINIT_DATA_STRUCTURES)
{
- assert(
- _Objects_Get_maximum_index(&_Thread_Internal_information.Objects) != 0
- );
+ assert(info_is_init(&_Thread_Information.Objects, 1));
next_step(DATA_STRUCTURES_POST);
}
FIRST(RTEMS_SYSINIT_USER_EXTENSIONS)
{
- assert(_Objects_Get_maximum_index(&_Extension_Information) == 0);
+ assert(info_not_init(&_Extension_Information));
next_step(USER_EXTENSIONS_PRE);
}
LAST(RTEMS_SYSINIT_USER_EXTENSIONS)
{
- assert(_Objects_Get_maximum_index(&_Extension_Information) != 0);
+ assert(info_is_init(&_Extension_Information, 1));
next_step(USER_EXTENSIONS_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_TASKS)
{
- assert(_Objects_Get_maximum_index(&_RTEMS_tasks_Information.Objects) == 0);
+ assert(info_not_init(&_RTEMS_tasks_Information.Objects));
next_step(CLASSIC_TASKS_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_TASKS)
{
- assert(_Objects_Get_maximum_index(&_RTEMS_tasks_Information.Objects) != 0);
+ assert(info_is_init(&_RTEMS_tasks_Information.Objects, 2));
next_step(CLASSIC_TASKS_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_TIMER)
{
- assert(_Objects_Get_maximum_index(&_Timer_Information) == 0);
+ assert(info_not_init(&_Timer_Information));
next_step(CLASSIC_TIMER_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_TIMER)
{
- assert(_Objects_Get_maximum_index(&_Timer_Information) != 0);
+ assert(info_is_init(&_Timer_Information, 1));
next_step(CLASSIC_TIMER_POST);
}
@@ -322,85 +334,85 @@ LAST(RTEMS_SYSINIT_CLASSIC_EVENT)
FIRST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
{
- assert(_Objects_Get_maximum_index(&_Message_queue_Information) == 0);
+ assert(info_not_init(&_Message_queue_Information));
next_step(CLASSIC_MESSAGE_QUEUE_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
{
- assert(_Objects_Get_maximum_index(&_Message_queue_Information) != 0);
+ assert(info_is_init(&_Message_queue_Information, 1));
next_step(CLASSIC_MESSAGE_QUEUE_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
- assert(_Objects_Get_maximum_index(&_Semaphore_Information) == 0);
+ assert(_Semaphore_Information.initial_objects[0].id == 0);
next_step(CLASSIC_SEMAPHORE_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
{
- assert(_Objects_Get_maximum_index(&_Semaphore_Information) != 0);
+ assert(_Semaphore_Information.initial_objects[0].id != 0);
next_step(CLASSIC_SEMAPHORE_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_PARTITION)
{
- assert(_Objects_Get_maximum_index(&_Partition_Information) == 0);
+ assert(info_not_init(&_Partition_Information));
next_step(CLASSIC_PARTITION_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_PARTITION)
{
- assert(_Objects_Get_maximum_index(&_Partition_Information) != 0);
+ assert(info_is_init(&_Partition_Information, 1));
next_step(CLASSIC_PARTITION_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_REGION)
{
- assert(_Objects_Get_maximum_index(&_Region_Information) == 0);
+ assert(info_not_init(&_Region_Information));
next_step(CLASSIC_REGION_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_REGION)
{
- assert(_Objects_Get_maximum_index(&_Region_Information) != 0);
+ assert(info_is_init(&_Region_Information, 1));
next_step(CLASSIC_REGION_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
{
- assert(_Objects_Get_maximum_index(&_Dual_ported_memory_Information) == 0);
+ assert(info_not_init(&_Dual_ported_memory_Information));
next_step(CLASSIC_DUAL_PORTED_MEMORY_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
{
- assert(_Objects_Get_maximum_index(&_Dual_ported_memory_Information) != 0);
+ assert(info_is_init(&_Dual_ported_memory_Information, 1));
next_step(CLASSIC_DUAL_PORTED_MEMORY_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
{
- assert(_Objects_Get_maximum_index(&_Rate_monotonic_Information) == 0);
+ assert(info_not_init(&_Rate_monotonic_Information));
next_step(CLASSIC_RATE_MONOTONIC_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
{
- assert(_Objects_Get_maximum_index(&_Rate_monotonic_Information) != 0);
+ assert(info_is_init(&_Rate_monotonic_Information, 1));
next_step(CLASSIC_RATE_MONOTONIC_POST);
}
FIRST(RTEMS_SYSINIT_CLASSIC_BARRIER)
{
- assert(_Objects_Get_maximum_index(&_Barrier_Information) == 0);
+ assert(info_not_init(&_Barrier_Information));
next_step(CLASSIC_BARRIER_PRE);
}
LAST(RTEMS_SYSINIT_CLASSIC_BARRIER)
{
- assert(_Objects_Get_maximum_index(&_Barrier_Information) != 0);
+ assert(info_is_init(&_Barrier_Information, 1));
next_step(CLASSIC_BARRIER_POST);
}
@@ -432,63 +444,63 @@ LAST(RTEMS_SYSINIT_POSIX_SIGNALS)
FIRST(RTEMS_SYSINIT_POSIX_THREADS)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Threads_Information.Objects) == 0);
+ assert(info_not_init(&_POSIX_Threads_Information.Objects));
next_step(POSIX_THREADS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_THREADS)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Threads_Information.Objects) != 0);
+ assert(info_is_init(&_POSIX_Threads_Information.Objects, 1));
next_step(POSIX_THREADS_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Message_queue_Information) == 0);
+ assert(info_not_init(&_POSIX_Message_queue_Information));
next_step(POSIX_MESSAGE_QUEUE_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Message_queue_Information) != 0);
+ assert(info_is_init(&_POSIX_Message_queue_Information, 1));
next_step(POSIX_MESSAGE_QUEUE_POST);
}
FIRST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Semaphore_Information) == 0);
+ assert(info_not_init(&_POSIX_Semaphore_Information));
next_step(POSIX_SEMAPHORE_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Semaphore_Information) != 0);
+ assert(info_is_init(&_POSIX_Semaphore_Information, 1));
next_step(POSIX_SEMAPHORE_POST);
}
#ifdef RTEMS_POSIX_API
FIRST(RTEMS_SYSINIT_POSIX_TIMER)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Timer_Information) == 0);
+ assert(info_not_init(&_POSIX_Timer_Information));
next_step(POSIX_TIMER_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_TIMER)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Timer_Information) != 0);
+ assert(info_is_init(&_POSIX_Timer_Information, 1));
next_step(POSIX_TIMER_POST);
}
#endif /* RTEMS_POSIX_API */
FIRST(RTEMS_SYSINIT_POSIX_SHM)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Shm_Information) == 0);
+ assert(info_not_init(&_POSIX_Shm_Information));
next_step(POSIX_SHM_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_SHM)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Shm_Information) != 0);
+ assert(info_is_init(&_POSIX_Shm_Information, 1));
next_step(POSIX_SHM_POST);
}
@@ -512,13 +524,13 @@ LAST(RTEMS_SYSINIT_POSIX_CLEANUP)
FIRST(RTEMS_SYSINIT_POSIX_KEYS)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Keys_Information) == 0);
+ assert(info_not_init(&_POSIX_Keys_Information));
next_step(POSIX_KEYS_PRE);
}
LAST(RTEMS_SYSINIT_POSIX_KEYS)
{
- assert(_Objects_Get_maximum_index(&_POSIX_Keys_Information) != 0);
+ assert(info_is_init(&_POSIX_Keys_Information, 2));
next_step(POSIX_KEYS_POST);
}
@@ -657,11 +669,268 @@ LAST_STEP(TENTH);
LAST_STEP(MIDDLE);
LAST_STEP(LAST);
-static void Init(rtems_task_argument arg)
+static void do_barrier_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_barrier_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ RTEMS_DEFAULT_ATTRIBUTES,
+ 1,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_barrier_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_extensions_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+ rtems_extensions_table table;
+
+ memset(&table, 0, sizeof(table));
+ sc = rtems_extension_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ &table,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_extension_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_message_queue_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_message_queue_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ 1,
+ 1,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_message_queue_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_partition_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+ long buf[32];
+
+ sc = rtems_partition_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ buf,
+ sizeof(buf),
+ sizeof(buf),
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_partition_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_period_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_rate_monotonic_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_rate_monotonic_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_port_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_port_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ NULL,
+ NULL,
+ 1,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_port_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_region_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+ long buf[32];
+
+ sc = rtems_region_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ buf,
+ sizeof(buf),
+ 1,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_region_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_semaphore_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_semaphore_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ 0,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ 0,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_semaphore_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_task_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_task_create(
+ rtems_build_name('T', 'E', 'S', 'T'),
+ 1,
+ RTEMS_MINIMUM_STACK_SIZE,
+ RTEMS_DEFAULT_MODES,
+ RTEMS_DEFAULT_ATTRIBUTES,
+ &id
+ );
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_task_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_timer_create(void)
+{
+ rtems_status_code sc;
+ rtems_id id;
+
+ sc = rtems_timer_create(rtems_build_name('T', 'E', 'S', 'T'), &id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+
+ sc = rtems_timer_delete(id);
+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
+}
+
+static void do_cleanup_push_pop(void)
{
pthread_cleanup_push(NULL, NULL);
pthread_cleanup_pop(0);
+}
+
+static void do_posix_mq_open(void)
+{
+ struct mq_attr attr;
+ mqd_t mq;
+ int rv;
+
+ memset(&attr, 0, sizeof(attr));
+ attr.mq_maxmsg = 1;
+ attr.mq_msgsize = 1;
+ mq = mq_open("mq", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO, &attr);
+ rtems_test_assert(mq != (mqd_t) -1);
+
+ rv = mq_close(mq);
+ rtems_test_assert(rv == 0);
+
+ rv = mq_unlink("mq");
+ rtems_test_assert(rv == 0);
+}
+
+static void do_posix_sem_open(void)
+{
+ sem_t *sem;
+ int rv;
+
+ sem = sem_open("sem", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(sem != SEM_FAILED);
+
+ rv = sem_close(sem);
+ rtems_test_assert(rv == 0);
+
+ rv = sem_unlink("sem");
+ rtems_test_assert(rv == 0);
+}
+
+static void do_posix_shm_open(void)
+{
+ int fd;
+ int rv;
+
+ fd = shm_open("/shm", O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO);
+ rtems_test_assert(fd >= 0);
+
+ rv = close(fd);
+ rtems_test_assert(rv == 0);
+
+ rv = shm_unlink("/shm");
+ rtems_test_assert(rv == 0);
+}
+
+static void do_posix_timer_create(void)
+{
+#ifdef RTEMS_POSIX_API
+ int rv;
+ timer_t timer;
+
+ rv = timer_create(CLOCK_REALTIME, NULL, &timer);
+ rtems_test_assert(rv == 0);
+
+ rv = timer_delete(timer);
+ rtems_test_assert(rv == 0);
+#endif /* RTEMS_POSIX_API */
+}
+
+static void Init(rtems_task_argument arg)
+{
next_step(INIT_TASK);
+ do_barrier_create();
+ do_extensions_create();
+ do_message_queue_create();
+ do_partition_create();
+ do_period_create();
+ do_port_create();
+ do_region_create();
+ do_semaphore_create();
+ do_task_create();
+ do_timer_create();
+ do_cleanup_push_pop();
+ do_posix_mq_open();
+ do_posix_sem_open();
+ do_posix_shm_open();
+ do_posix_timer_create();
TEST_END();
exit(0);
}
@@ -672,8 +941,11 @@ static void *POSIX_Init(void *arg)
}
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4
+
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
#define CONFIGURE_MAXIMUM_BARRIERS 1
@@ -690,7 +962,7 @@ static void *POSIX_Init(void *arg)
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
-#define CONFIGURE_MAXIMUM_TASKS 1
+#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_MAXIMUM_TIMERS 1
@@ -710,6 +982,9 @@ static void *POSIX_Init(void *arg)
#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
+#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(1, 1)
+
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_STACK_CHECKER_ENABLED