forked from Imagelibrary/rtems
ttest01: New test
This is an example test using the RTEMS Test Framework. It tests also the framework itself. Add T_FILE_NAME command line define to get rid of the full file path. This is important to reduce the read-only data of test files and make them build system independent. Update #3199.
This commit is contained in:
@@ -11,6 +11,7 @@ STRIP = @STRIP@
|
|||||||
TEST_LD_FLAGS = -Wl,--wrap=printf -Wl,--wrap=puts -Wl,--wrap=putchar
|
TEST_LD_FLAGS = -Wl,--wrap=printf -Wl,--wrap=puts -Wl,--wrap=putchar
|
||||||
|
|
||||||
AM_CPPFLAGS = $(TEST_FLAGS) @RTEMS_CPPFLAGS@ @RTEMS_BSP_CPPFLAGS@
|
AM_CPPFLAGS = $(TEST_FLAGS) @RTEMS_CPPFLAGS@ @RTEMS_BSP_CPPFLAGS@
|
||||||
|
AM_CPPFLAGS += -DT_FILE_NAME='"$(notdir $<)"'
|
||||||
AM_CFLAGS = $(TEST_C_FLAGS)
|
AM_CFLAGS = $(TEST_C_FLAGS)
|
||||||
AM_CXXFLAGS = $(TEST_CXX_FLAGS)
|
AM_CXXFLAGS = $(TEST_CXX_FLAGS)
|
||||||
|
|
||||||
|
|||||||
@@ -1500,6 +1500,16 @@ top_SOURCES = top/init.c top/task1.c top/task2.c top/task3.c \
|
|||||||
top_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_top) $(support_includes)
|
top_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_top) $(support_includes)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if TEST_ttest01
|
||||||
|
lib_tests += ttest01
|
||||||
|
lib_screens += ttest01/ttest01.scn
|
||||||
|
lib_docs += ttest01/ttest01.doc
|
||||||
|
ttest01_SOURCES = ttest01/init.c
|
||||||
|
ttest01_SOURCES += ttest01/test-example.c
|
||||||
|
ttest01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_ttest01) \
|
||||||
|
$(support_includes)
|
||||||
|
endif
|
||||||
|
|
||||||
if TEST_tztest
|
if TEST_tztest
|
||||||
lib_tests += tztest
|
lib_tests += tztest
|
||||||
lib_screens += tztest/tztest.scn
|
lib_screens += tztest/tztest.scn
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ RTEMS_TEST_CHECK([termios07])
|
|||||||
RTEMS_TEST_CHECK([termios08])
|
RTEMS_TEST_CHECK([termios08])
|
||||||
RTEMS_TEST_CHECK([termios09])
|
RTEMS_TEST_CHECK([termios09])
|
||||||
RTEMS_TEST_CHECK([top])
|
RTEMS_TEST_CHECK([top])
|
||||||
|
RTEMS_TEST_CHECK([ttest01])
|
||||||
RTEMS_TEST_CHECK([tztest])
|
RTEMS_TEST_CHECK([tztest])
|
||||||
RTEMS_TEST_CHECK([uid01])
|
RTEMS_TEST_CHECK([uid01])
|
||||||
RTEMS_TEST_CHECK([unlink])
|
RTEMS_TEST_CHECK([unlink])
|
||||||
|
|||||||
187
testsuites/libtests/ttest01/init.c
Normal file
187
testsuites/libtests/ttest01/init.c
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018, 2019 embedded brains GmbH
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <t.h>
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <rtems/bspIo.h>
|
||||||
|
|
||||||
|
#include "t-self-test.h"
|
||||||
|
|
||||||
|
#include <tmacros.h>
|
||||||
|
|
||||||
|
const char rtems_test_name[] = "TTEST 1";
|
||||||
|
|
||||||
|
#define test_assert(e) (e) ? (void)0 : test_failed(__LINE__, #e)
|
||||||
|
|
||||||
|
RTEMS_LINKER_ROSET(t_self_test, const char *);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char *c;
|
||||||
|
size_t case_begin_count;
|
||||||
|
size_t case_end_count;
|
||||||
|
} test_context;
|
||||||
|
|
||||||
|
static test_context test_instance;
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_failed(int line, const char *e)
|
||||||
|
{
|
||||||
|
printk("FAILED:%i:%s\n", line, e);
|
||||||
|
rtems_test_exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_putchar(int c, void *arg)
|
||||||
|
{
|
||||||
|
test_context *ctx;
|
||||||
|
|
||||||
|
ctx = arg;
|
||||||
|
|
||||||
|
if (c != '\r' && ctx->c != NULL) {
|
||||||
|
test_assert(*ctx->c == c);
|
||||||
|
++ctx->c;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtems_putc((char)c);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
case_early(const char *name)
|
||||||
|
{
|
||||||
|
test_context *ctx;
|
||||||
|
const char **item;
|
||||||
|
ssize_t n;
|
||||||
|
|
||||||
|
ctx = &test_instance;
|
||||||
|
++ctx->case_begin_count;
|
||||||
|
n = strlen(name);
|
||||||
|
|
||||||
|
RTEMS_LINKER_SET_FOREACH(t_self_test, item) {
|
||||||
|
const char *to;
|
||||||
|
|
||||||
|
to = *item;
|
||||||
|
|
||||||
|
if (strncmp(name, to, n) == 0 && to[n] == ':') {
|
||||||
|
ctx->c = to + n + 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test_assert(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
case_late(const char *name)
|
||||||
|
{
|
||||||
|
test_context *ctx;
|
||||||
|
|
||||||
|
ctx = &test_instance;
|
||||||
|
++ctx->case_end_count;
|
||||||
|
test_assert(ctx->c != NULL);
|
||||||
|
test_assert(*ctx->c == '\0');
|
||||||
|
ctx->c = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_action(T_event event, const char *name)
|
||||||
|
{
|
||||||
|
(void)name;
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case T_EVENT_CASE_EARLY:
|
||||||
|
case_early(name);
|
||||||
|
break;
|
||||||
|
case T_EVENT_CASE_LATE:
|
||||||
|
case_late(name);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static Atomic_Uint counter = ATOMIC_INITIALIZER_UINT(0);
|
||||||
|
|
||||||
|
static T_time
|
||||||
|
now(void)
|
||||||
|
{
|
||||||
|
T_time t;
|
||||||
|
|
||||||
|
t = _Atomic_Fetch_add_uint(&counter, 1, ATOMIC_ORDER_RELAXED);
|
||||||
|
return t * SBT_1MS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const T_action actions[] = {
|
||||||
|
T_report_hash_sha256,
|
||||||
|
test_action
|
||||||
|
};
|
||||||
|
|
||||||
|
static const T_config config = {
|
||||||
|
.name = "ttest01",
|
||||||
|
.putchar = test_putchar,
|
||||||
|
.putchar_arg = &test_instance,
|
||||||
|
.verbosity = T_VERBOSE,
|
||||||
|
.now = now,
|
||||||
|
.action_count = T_ARRAY_SIZE(actions),
|
||||||
|
.actions = actions
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
Init(rtems_task_argument arg)
|
||||||
|
{
|
||||||
|
test_context *ctx;
|
||||||
|
int exit_code;
|
||||||
|
size_t case_count;
|
||||||
|
|
||||||
|
(void)arg;
|
||||||
|
TEST_BEGIN();
|
||||||
|
ctx = &test_instance;
|
||||||
|
test_assert(!T_is_runner());
|
||||||
|
T_register();
|
||||||
|
test_assert(!T_is_runner());
|
||||||
|
exit_code = T_main(&config);
|
||||||
|
test_assert(exit_code == 1);
|
||||||
|
test_assert(!T_is_runner());
|
||||||
|
case_count = RTEMS_LINKER_SET_ITEM_COUNT(t_self_test);
|
||||||
|
test_assert(ctx->case_begin_count == case_count);
|
||||||
|
test_assert(ctx->case_end_count == case_count);
|
||||||
|
TEST_END();
|
||||||
|
rtems_test_exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
||||||
|
|
||||||
|
#define CONFIGURE_MAXIMUM_TASKS 1
|
||||||
|
|
||||||
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||||
|
|
||||||
|
#define CONFIGURE_INIT
|
||||||
|
|
||||||
|
#include <rtems/confdefs.h>
|
||||||
46
testsuites/libtests/ttest01/t-self-test.h
Normal file
46
testsuites/libtests/ttest01/t-self-test.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 embedded brains GmbH
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef THE_T_TEST_FRAMEWORK_SELF_TEST_H
|
||||||
|
#define THE_T_TEST_FRAMEWORK_SELF_TEST_H
|
||||||
|
|
||||||
|
#include <rtems/linkersets.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
RTEMS_LINKER_ROSET_DECLARE(t_self_test, const char *);
|
||||||
|
|
||||||
|
#define T_TEST_OUTPUT(name, output) \
|
||||||
|
RTEMS_LINKER_ROSET_ITEM(t_self_test, const char *, name) = #name ":" output
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* THE_T_TEST_FRAMEWORK_SELF_TEST_H */
|
||||||
57
testsuites/libtests/ttest01/test-example.c
Normal file
57
testsuites/libtests/ttest01/test-example.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#include <t.h>
|
||||||
|
|
||||||
|
T_TEST_CASE(example)
|
||||||
|
{
|
||||||
|
T_true(true, "test passes, no message output");
|
||||||
|
T_true(false, "test fails");
|
||||||
|
T_quiet_true(true, "quiet test passes, no output at all");
|
||||||
|
T_quiet_true(false, "quiet test fails");
|
||||||
|
T_step_true(2, true, "step test passes, no message output");
|
||||||
|
T_step_true(3, false, "step test fails");
|
||||||
|
T_assert_false(true, "this is a format %s", "string");
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "t-self-test.h"
|
||||||
|
|
||||||
|
T_TEST_OUTPUT(example,
|
||||||
|
"B:example\n"
|
||||||
|
"P:0:0:UI1:test-example.c:5\n"
|
||||||
|
"F:1:0:UI1:test-example.c:6:test fails\n"
|
||||||
|
"F:*:0:UI1:test-example.c:8:quiet test fails\n"
|
||||||
|
"P:2:0:UI1:test-example.c:9\n"
|
||||||
|
"F:3:0:UI1:test-example.c:10:step test fails\n"
|
||||||
|
"F:4:0:UI1:test-example.c:11:this is a format string\n"
|
||||||
|
"E:example:N:5:F:4:D:0.001000\n");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
* SPDX-License-Identifier: CC-BY-SA-4.0
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018, 2019 embedded brains GmbH
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||||
|
* Creative Commons Attribution-ShareAlike 4.0 International Public License as
|
||||||
|
* published by Creative Commons, PO Box 1866, Mountain View, CA 94042
|
||||||
|
* (https://creativecommons.org/licenses/by-sa/4.0/legalcode).
|
||||||
|
*/
|
||||||
19
testsuites/libtests/ttest01/ttest01.doc
Normal file
19
testsuites/libtests/ttest01/ttest01.doc
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
This file describes the directives and concepts tested by this test set.
|
||||||
|
|
||||||
|
test set name: ttest01
|
||||||
|
|
||||||
|
The test-*.c files must place the license header at the bottom of the file.
|
||||||
|
This allows a copy and past of the test code into documentation sources and
|
||||||
|
enables a constent line numbering between the documentation code fragements and
|
||||||
|
the actual test output. For the same reason the T_TEST_OUTPUT() macros must be
|
||||||
|
placed after the actual test cases. The test source files are dual licensesd
|
||||||
|
BSD-2-Clause and CC-BY-SA-4.0.
|
||||||
|
|
||||||
|
directives:
|
||||||
|
|
||||||
|
- RTEMS Test Framework
|
||||||
|
|
||||||
|
concepts:
|
||||||
|
|
||||||
|
- Provide examples for the RTEMS Test Framework.
|
||||||
|
- Ensure that the RTEMS Test Framework works.
|
||||||
27
testsuites/libtests/ttest01/ttest01.scn
Normal file
27
testsuites/libtests/ttest01/ttest01.scn
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
*** BEGIN OF TEST TTEST 1 ***
|
||||||
|
*** TEST VERSION: 5.0.0.cfcc2cbf7aa4e6aeb6dca83d57cf2dae610d4d65
|
||||||
|
*** TEST STATE: EXPECTED-PASS
|
||||||
|
*** TEST BUILD: RTEMS_DEBUG RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP
|
||||||
|
*** TEST TOOLS: 7.4.0 20181206 (RTEMS 5, RSB e0aec65182449a4e22b820e773087636edaf5b32, Newlib 1d35a003f)
|
||||||
|
A:ttest01
|
||||||
|
S:Platform:RTEMS
|
||||||
|
S:Compiler:7.4.0 20181206 (RTEMS 5, RSB e0aec65182449a4e22b820e773087636edaf5b32, Newlib 1d35a003f)
|
||||||
|
S:Version:5.0.0.cfcc2cbf7aa4e6aeb6dca83d57cf2dae610d4d65
|
||||||
|
S:BSP:erc32
|
||||||
|
S:RTEMS_DEBUG:1
|
||||||
|
S:RTEMS_MULTIPROCESSING:0
|
||||||
|
S:RTEMS_POSIX_API:1
|
||||||
|
S:RTEMS_PROFILING:0
|
||||||
|
S:RTEMS_SMP:1
|
||||||
|
B:example
|
||||||
|
P:0:0:UI1:test-example.c:5
|
||||||
|
F:1:0:UI1:test-example.c:6:test fails
|
||||||
|
F:*:0:UI1:test-example.c:8:quiet test fails
|
||||||
|
P:2:0:UI1:test-example.c:9
|
||||||
|
F:3:0:UI1:test-example.c:10:step test fails
|
||||||
|
F:4:0:UI1:test-example.c:11:this is a format string
|
||||||
|
E:example:N:5:F:4:D:0.001000
|
||||||
|
Z:ttest01:C:1:N:5:F:4:D:0.003000
|
||||||
|
Y:ReportHash:SHA256:4fe7850e583f4114c4c12b369da33809c35843b09c691e9a6c7d28e1a7cdbebd
|
||||||
|
|
||||||
|
*** END OF TEST TTEST 1 ***
|
||||||
Reference in New Issue
Block a user