From 840ae715a9c1e45b31d7a493e9b5c4113e17bf62 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 10 Mar 2014 14:39:41 +0100 Subject: sapi: Add Provide support functions to print the begin/end of test message. Provide a test fatal extension to print out profiling reports in the future. --- cpukit/sapi/Makefile.am | 3 + cpukit/sapi/include/rtems/test.h | 125 ++++++++++++++++++++++++++++ cpukit/sapi/preinstall.am | 4 + cpukit/sapi/src/testbeginend.c | 43 ++++++++++ cpukit/sapi/src/testextension.c | 30 +++++++ testsuites/support/include/buffer_test_io.h | 16 ++++ testsuites/support/include/tmacros.h | 1 + 7 files changed, 222 insertions(+) create mode 100644 cpukit/sapi/include/rtems/test.h create mode 100644 cpukit/sapi/src/testbeginend.c create mode 100644 cpukit/sapi/src/testextension.c diff --git a/cpukit/sapi/Makefile.am b/cpukit/sapi/Makefile.am index 19f7d87f61..37a2fa4228 100644 --- a/cpukit/sapi/Makefile.am +++ b/cpukit/sapi/Makefile.am @@ -18,6 +18,7 @@ include_rtems_HEADERS += include/rtems/profiling.h include_rtems_HEADERS += include/rtems/rbheap.h include_rtems_HEADERS += include/rtems/rbtree.h include_rtems_HEADERS += include/rtems/sptables.h +include_rtems_HEADERS += include/rtems/test.h include_rtems_HEADERS += include/rtems/timespec.h EXTRA_DIST = include/rtems/README @@ -39,6 +40,8 @@ libsapi_a_SOURCES += src/delayticks.c libsapi_a_SOURCES += src/delaynano.c libsapi_a_SOURCES += src/profilingiterate.c libsapi_a_SOURCES += src/profilingreportxml.c +libsapi_a_SOURCES += src/testbeginend.c +libsapi_a_SOURCES += src/testextension.c libsapi_a_CPPFLAGS = $(AM_CPPFLAGS) include $(srcdir)/preinstall.am diff --git a/cpukit/sapi/include/rtems/test.h b/cpukit/sapi/include/rtems/test.h new file mode 100644 index 0000000000..91a5a22906 --- /dev/null +++ b/cpukit/sapi/include/rtems/test.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * 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. + */ + +#ifndef _RTEMS_TEST_H +#define _RTEMS_TEST_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @defgroup RTEMSTest Test Support + * + * @brief Test support functions. + * + * @{ + */ + +/** + * @brief Each test must define a test name string. + */ +extern const char rtems_test_name[]; + +/** + * @brief Fatal extension for tests. + */ +void rtems_test_fatal_extension( + rtems_fatal_source source, + bool is_internal, + rtems_fatal_code code +); + +/** + * @brief Initial extension for tests. + */ +#define RTEMS_TEST_INITIAL_EXTENSION \ + { NULL, NULL, NULL, NULL, NULL, NULL, NULL, rtems_test_fatal_extension } + +/** + * @brief Prints a begin of test message. + * + * @param[in] printf_func The formatted output function. + * @param[in, out] printf_arg The formatted output function argument. + * + * @returns As specified by printf(). + */ +int rtems_test_begin_with_plugin( + rtems_printk_plugin_t printf_func, + void *printf_arg +); + +/** + * @brief Prints a begin of test message using printf(). + * + * @returns As specified by printf(). + */ +static inline int rtems_test_begin(void) +{ + return rtems_test_begin_with_plugin(rtems_printf_plugin, NULL); +} + +/** + * @brief Prints a begin of test message using printk(). + * + * @returns As specified by printf(). + */ +static inline int rtems_test_begink(void) +{ + return rtems_test_begin_with_plugin(printk_plugin, NULL); +} + +/** + * @brief Prints an end of test message. + * + * @param[in] printf_func The formatted output function. + * @param[in, out] printf_arg The formatted output function argument. + * + * @returns As specified by printf(). + */ +int rtems_test_end_with_plugin( + rtems_printk_plugin_t printf_func, + void *printf_arg +); + +/** + * @brief Prints an end of test message using printf(). + * + * @returns As specified by printf(). + */ +static inline int rtems_test_end(void) +{ + return rtems_test_end_with_plugin(rtems_printf_plugin, NULL); +} + +/** + * @brief Prints an end of test message using printk(). + * + * @returns As specified by printf(). + */ +static inline int rtems_test_endk(void) +{ + return rtems_test_end_with_plugin(printk_plugin, NULL); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _RTEMS_TEST_H */ diff --git a/cpukit/sapi/preinstall.am b/cpukit/sapi/preinstall.am index d05ab256a1..7e18d3ab54 100644 --- a/cpukit/sapi/preinstall.am +++ b/cpukit/sapi/preinstall.am @@ -88,6 +88,10 @@ $(PROJECT_INCLUDE)/rtems/sptables.h: include/rtems/sptables.h $(PROJECT_INCLUDE) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/sptables.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/sptables.h +$(PROJECT_INCLUDE)/rtems/test.h: include/rtems/test.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/test.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/test.h + $(PROJECT_INCLUDE)/rtems/timespec.h: include/rtems/timespec.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/timespec.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/timespec.h diff --git a/cpukit/sapi/src/testbeginend.c b/cpukit/sapi/src/testbeginend.c new file mode 100644 index 0000000000..dac0763440 --- /dev/null +++ b/cpukit/sapi/src/testbeginend.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * 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. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include + +int rtems_test_begin_with_plugin( + rtems_printk_plugin_t printf_func, + void *printf_arg +) +{ + return (*printf_func)( + printf_arg, + "\n\n*** BEGIN OF TEST %s ***\n", + rtems_test_name + ); +} + +int rtems_test_end_with_plugin( + rtems_printk_plugin_t printf_func, + void *printf_arg +) +{ + return (*printf_func)( + printf_arg, + "*** END OF TEST %s ***\n", + rtems_test_name + ); +} diff --git a/cpukit/sapi/src/testextension.c b/cpukit/sapi/src/testextension.c new file mode 100644 index 0000000000..a896c783a7 --- /dev/null +++ b/cpukit/sapi/src/testextension.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * 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. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include + +void rtems_test_fatal_extension( + rtems_fatal_source source, + bool is_internal, + rtems_fatal_code code +) +{ + (void) source; + (void) is_internal; + (void) code; +} diff --git a/testsuites/support/include/buffer_test_io.h b/testsuites/support/include/buffer_test_io.h index 03d5419b76..3cadc481f5 100644 --- a/testsuites/support/include/buffer_test_io.h +++ b/testsuites/support/include/buffer_test_io.h @@ -5,6 +5,8 @@ #ifndef __BUFFER_TEST_IO_h #define __BUFFER_TEST_IO_h +#include + #ifdef __cplusplus extern "C" { #endif @@ -54,6 +56,10 @@ extern "C" { do { \ } while (0) + #define TEST_BEGIN() rtems_test_begink() + + #define TEST_END() rtems_test_endk() + /* * BUFFER TEST OUTPUT */ @@ -152,6 +158,10 @@ extern "C" { fflush(stdout); \ } while (0) + #define TEST_BEGIN() rtems_test_begin() + + #define TEST_END() rtems_test_end() + /* * USE IPRINT */ @@ -197,6 +207,12 @@ extern "C" { fflush(stdout); \ } while (0) + #define TEST_BEGIN() \ + rtems_test_begin_with_plugin((rtems_printk_plugin_t) fiprintf, stderr) + + #define TEST_END() \ + rtems_test_end_with_plugin((rtems_printk_plugin_t) fiprintf, stderr) + #endif #ifdef __cplusplus diff --git a/testsuites/support/include/tmacros.h b/testsuites/support/include/tmacros.h index c8ace400b5..ce835fe954 100644 --- a/testsuites/support/include/tmacros.h +++ b/testsuites/support/include/tmacros.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #ifdef __cplusplus -- cgit v1.2.3