On Fri, Mar 22, 2019 at 3:20 AM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > 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. > --- > testsuites/automake/compile.am | 1 + > testsuites/libtests/Makefile.am | 10 ++ > testsuites/libtests/configure.ac | 1 + > testsuites/libtests/ttest01/init.c | 183 > +++++++++++++++++++++++++++++ > testsuites/libtests/ttest01/t-self-test.h | 46 ++++++++ > testsuites/libtests/ttest01/test-example.c | 57 +++++++++ > testsuites/libtests/ttest01/ttest01.doc | 19 +++ > testsuites/libtests/ttest01/ttest01.scn | 26 ++++ > 8 files changed, 343 insertions(+) > create mode 100644 testsuites/libtests/ttest01/init.c > create mode 100644 testsuites/libtests/ttest01/t-self-test.h > create mode 100644 testsuites/libtests/ttest01/test-example.c > create mode 100644 testsuites/libtests/ttest01/ttest01.doc > create mode 100644 testsuites/libtests/ttest01/ttest01.scn > > diff --git a/testsuites/automake/compile.am b/testsuites/automake/compile.am > index 83d4ab111c..66ea9a8421 100644 > --- a/testsuites/automake/compile.am > +++ b/testsuites/automake/compile.am > @@ -11,6 +11,7 @@ STRIP = @STRIP@ > TEST_LD_FLAGS = -Wl,--wrap=printf -Wl,--wrap=puts -Wl,--wrap=putchar > > AM_CPPFLAGS = $(TEST_FLAGS) @RTEMS_CPPFLAGS@ @RTEMS_BSP_CPPFLAGS@ > +AM_CPPFLAGS += -DT_FILE_NAME='"$(notdir $<)"' > AM_CFLAGS = $(TEST_C_FLAGS) > AM_CXXFLAGS = $(TEST_CXX_FLAGS) > > diff --git a/testsuites/libtests/Makefile.am b/testsuites/libtests/Makefile.am > index fe6f7d8ee8..1b80283123 100644 > --- a/testsuites/libtests/Makefile.am > +++ b/testsuites/libtests/Makefile.am > @@ -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) > 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 > lib_tests += tztest > lib_screens += tztest/tztest.scn > diff --git a/testsuites/libtests/configure.ac > b/testsuites/libtests/configure.ac > index a6879a7430..c02b42a5f9 100644 > --- a/testsuites/libtests/configure.ac > +++ b/testsuites/libtests/configure.ac > @@ -226,6 +226,7 @@ RTEMS_TEST_CHECK([termios07]) > RTEMS_TEST_CHECK([termios08]) > RTEMS_TEST_CHECK([termios09]) > RTEMS_TEST_CHECK([top]) > +RTEMS_TEST_CHECK([ttest01]) > RTEMS_TEST_CHECK([tztest]) > RTEMS_TEST_CHECK([uid01]) > RTEMS_TEST_CHECK([unlink]) > diff --git a/testsuites/libtests/ttest01/init.c > b/testsuites/libtests/ttest01/init.c > new file mode 100644 > index 0000000000..6a76eec123 > --- /dev/null > +++ b/testsuites/libtests/ttest01/init.c > @@ -0,0 +1,183 @@ > +/* > + * 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; > + BSP_output_char_function_type output_char; > + 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) > +{ > + BSP_output_char = test_instance.output_char; > + printk("FAILED:%i:%s\n", line, e); > + rtems_test_exit(1); > +} > + > +static void > +output_char(char c) > +{ > + test_context *ctx; > + > + ctx = &test_instance; > + > + if (c != '\r' && ctx->c != NULL) { > + test_assert(*ctx->c == c); > + ++ctx->c; > + } > + > + (*ctx->output_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 > +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_Ulong counter; > + > +static T_time > +now(void) > +{ > + return _Atomic_Fetch_add_ulong(&counter, SBT_1MS, > ATOMIC_ORDER_RELAXED); > +} > + > +static const T_action actions[] = { action }; > + > +static const T_config config = { > + .name = "ttest01", > + .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; > + ctx->output_char = BSP_output_char; > + BSP_output_char = output_char; > + 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> > diff --git a/testsuites/libtests/ttest01/t-self-test.h > b/testsuites/libtests/ttest01/t-self-test.h > new file mode 100644 > index 0000000000..1035872c9d > --- /dev/null > +++ b/testsuites/libtests/ttest01/t-self-test.h > @@ -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 */ > diff --git a/testsuites/libtests/ttest01/test-example.c > b/testsuites/libtests/ttest01/test-example.c > new file mode 100644 > index 0000000000..bcbf7b33b0 > --- /dev/null > +++ b/testsuites/libtests/ttest01/test-example.c > @@ -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). > + */ Is there any standing for dual-licensing 2BSD with CC-BY-SA?
> diff --git a/testsuites/libtests/ttest01/ttest01.doc > b/testsuites/libtests/ttest01/ttest01.doc > new file mode 100644 > index 0000000000..37d9ff8535 > --- /dev/null > +++ b/testsuites/libtests/ttest01/ttest01.doc > @@ -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 paste > +enables a constent line numbering between the documentation code fragements > and constant ... fragments > +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 licensed > +BSD-2-Clause and CC-BY-SA-4.0. > + Thanks for the above explanation, it was helpful for this example. For future tests, do you anticipate any text here such as a short narrative description? Or this text should be deleted if it gets copy-paste into new tests? > +directives: > + > + - T Test Framework > + > +concepts: > + > + - Provide examples for the T Test Framework. > + - Ensure that the T Test Framework works. > diff --git a/testsuites/libtests/ttest01/ttest01.scn > b/testsuites/libtests/ttest01/ttest01.scn > new file mode 100644 > index 0000000000..05bd1eaa3e > --- /dev/null > +++ b/testsuites/libtests/ttest01/ttest01.scn > @@ -0,0 +1,26 @@ > +*** BEGIN OF TEST TTEST 1 *** > +*** TEST VERSION: 5.0.0.286e9354e008b08983e6390a68f8ecc5071de069 > +*** 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.286e9354e008b08983e6390a68f8ecc5071de069 > +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 > + > +*** END OF TEST TTEST 1 *** > -- > 2.16.4 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel