--- .../psxtests/psxclocknanosleep01.yml | 19 +++ spec/build/testsuites/psxtmtests/grp.yml | 4 + .../psxtmtests/psxtmclocknanosleep04.yml | 19 +++ .../psxtmtests/psxtmclocknanosleep05.yml | 19 +++ .../psxtests/psxclocknanosleep01/init.c | 145 ++++++++++++++++++ .../psxclocknanosleep01.doc | 13 ++ .../psxclocknanosleep01.scn | 50 ++++++ .../psxtmtests/psxtmclocknanosleep04/init.c | 70 +++++++++ .../psxtmtests/psxtmclocknanosleep05/init.c | 116 ++++++++++++++ 9 files changed, 455 insertions(+) create mode 100644 spec/build/testsuites/psxtests/psxclocknanosleep01.yml create mode 100644 spec/build/testsuites/psxtmtests/psxtmclocknanosleep04.yml create mode 100644 spec/build/testsuites/psxtmtests/psxtmclocknanosleep05.yml create mode 100644 testsuites/psxtests/psxclocknanosleep01/init.c create mode 100644 testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc create mode 100644 testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep04/init.c create mode 100644 testsuites/psxtmtests/psxtmclocknanosleep05/init.c
diff --git a/spec/build/testsuites/psxtests/psxclocknanosleep01.yml b/spec/build/testsuites/psxtests/psxclocknanosleep01.yml new file mode 100644 index 0000000000..990e4a633c --- /dev/null +++ b/spec/build/testsuites/psxtests/psxclocknanosleep01.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2020 Utkarsh Rai(utkarsh.ra...@gmail.com) +cppflags: [] +cxxflags: [] +enabled-by: true +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/psxtests/psxclocknanosleep01/init.c +stlib: [] +target: testsuites/psxtests/psxclocknanosleep01.exe +type: build +use-after: [] +use-before: [] diff --git a/spec/build/testsuites/psxtmtests/grp.yml b/spec/build/testsuites/psxtmtests/grp.yml index 2d4c5b2b97..409d1c45b7 100644 --- a/spec/build/testsuites/psxtmtests/grp.yml +++ b/spec/build/testsuites/psxtmtests/grp.yml @@ -31,6 +31,10 @@ links: uid: psxtmclocknanosleep02 - role: build-dependency uid: psxtmclocknanosleep03 +- role: build-dependency + uid: psxtmclocknanosleep04 +- role: build-dependency + uid: psxtmclocknanosleep05 - role: build-dependency uid: psxtmcond01 - role: build-dependency diff --git a/spec/build/testsuites/psxtmtests/psxtmclocknanosleep04.yml b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep04.yml new file mode 100644 index 0000000000..12672c79ed --- /dev/null +++ b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep04.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2020 Utkarsh Rai (utkarsh.ra...@gmail.com) +cppflags: [] +cxxflags: [] +enabled-by: true +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/psxtmtests/psxtmclocknanosleep04/init.c +stlib: [] +target: testsuites/psxtmtests/psxtmclocknanosleep04.exe +type: build +use-after: [] +use-before: [] diff --git a/spec/build/testsuites/psxtmtests/psxtmclocknanosleep05.yml b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep05.yml new file mode 100644 index 0000000000..a3634341de --- /dev/null +++ b/spec/build/testsuites/psxtmtests/psxtmclocknanosleep05.yml @@ -0,0 +1,19 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2020 Utkarsh Rai (utkarsh.ra...@gmail.com) +cppflags: [] +cxxflags: [] +enabled-by: true +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/psxtmtests/psxtmclocknanosleep05/init.c +stlib: [] +target: testsuites/psxtmtests/psxtmclocknanosleep05.exe +type: build +use-after: [] +use-before: [] diff --git a/testsuites/psxtests/psxclocknanosleep01/init.c b/testsuites/psxtests/psxclocknanosleep01/init.c new file mode 100644 index 0000000000..278683953c --- /dev/null +++ b/testsuites/psxtests/psxclocknanosleep01/init.c @@ -0,0 +1,145 @@ +/* SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 Utkarsh Rai + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <errno.h> +#include <limits.h> +#include <time.h> +#include <rtems/test.h> +#include <rtems/test-info.h> + +T_TEST_CASE( POSIXClock_Timeout_finite ) +{ + struct timespec delay_time; + int eno; + + eno = clock_gettime( CLOCK_MONOTONIC, &delay_time ); + T_eno_success( eno ); + + delay_time.tv_sec += 1; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno_success( eno ); +} + +T_TEST_CASE( POSIXClock_Timeout_huge_nsec ) +{ + struct timespec delay_time; + int eno; + + delay_time.tv_sec = 1; + delay_time.tv_nsec = LONG_MAX; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno( EINVAL, eno ); +} + +T_TEST_CASE( POSIXClock_Timeout_negative_sec ) +{ + struct timespec delay_time; + int eno; + + delay_time.tv_sec = -1; + delay_time.tv_nsec = 1; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno_success( eno ); + +} + +T_TEST_CASE( POSIXClock_Timeout_negative_nsec ) +{ + struct timespec delay_time; + int eno; + + delay_time.tv_sec = 1; + delay_time.tv_nsec = -1; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno( EINVAL, eno ); +} + +T_TEST_CASE(POSIXClock_Timeout_negative_sec_nsec) +{ + struct timespec delay_time; + int eno; + + delay_time.tv_sec = -1; + delay_time.tv_nsec = -1; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno( EINVAL, eno); +} + +T_TEST_CASE( POSIXClock_Timeout_clock_modify ) +{ + struct timespec configure_time; + struct timespec delay_time; + int eno; + +/** + * Modify the REALTIME clock, this should not have any effect on the sleep time + * with the MONOTONIC clock. +*/ + + eno = clock_gettime( CLOCK_REALTIME, &configure_time ); + T_eno_success( eno ); + + configure_time.tv_sec += 3600; + eno = clock_settime( CLOCK_REALTIME, &configure_time ); + T_eno_success( eno ); + + eno = clock_gettime( CLOCK_MONOTONIC, &delay_time ); + T_eno_success( eno ); + + delay_time.tv_sec += 1; + + eno = clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &delay_time, NULL ); + T_eno_success( eno ); +} + +const char rtems_test_name[] = "POSIXCLOCKNANOSLEEP01"; + +static rtems_task Init ( rtems_task_argument argument ) +{ + rtems_test_run( argument, TEST_STATE ); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> \ No newline at end of file diff --git a/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc new file mode 100644 index 0000000000..803c2cff15 --- /dev/null +++ b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc @@ -0,0 +1,13 @@ +This file describes the directives and concepts tested by this test set. + +test set name: psxclocknanosleep01 + +directives: + +- clock_nanosleep() + +concepts: + +- Test some invalid and extreme timeout values. +- Ensure that the CLOCK_MONOTONIC based delay is not affected by changes to + CLOCK_REALTIME \ No newline at end of file diff --git a/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn new file mode 100644 index 0000000000..38479c27fd --- /dev/null +++ b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn @@ -0,0 +1,50 @@ +** BEGIN OF TEST POSIXCLOCKNANOSLEEP01 *** +*** TEST VERSION: 6.0.0.560c08cc3d458cdeb4abc014deef8f4ce42a5d54 +*** TEST STATE: EXPECTED_PASS +*** TEST BUILD: +*** TEST TOOLS: 10.2.1 20200918 (RTEMS 6, RSB ed5030bc24dbfdfac52074ed78cf4231bf1f353d, Newlib 749cbcc) +A:POSIXCLOCKNANOSLEEP01 +S:Platform:RTEMS +S:Compiler:10.2.1 20200918 (RTEMS 6, RSB ed5030bc24dbfdfac52074ed78cf4231bf1f353d, Newlib 749cbcc) +S:Version:6.0.0.560c08cc3d458cdeb4abc014deef8f4ce42a5d54 +S:BSP:realview_pbx_a9_qemu +S:RTEMS_DEBUG:0 +S:RTEMS_MULTIPROCESSING:0 +S:RTEMS_POSIX_API:0 +S:RTEMS_PROFILING:0 +S:RTEMS_SMP:0 +B:POSIXClock_Timeout_negative_sec_nsec +P:0:0:UI1:init.c:99 +E:POSIXClock_Timeout_negative_sec_nsec:N:1:F:0:D:0.004953 +B:POSIXClock_Timeout_negative_sec +P:0:0:UI1:init.c:74 +E:POSIXClock_Timeout_negative_sec:N:1:F:0:D:0.000541 +B:POSIXClock_Timeout_negative_nsec +P:0:0:UI1:init.c:87 +E:POSIXClock_Timeout_negative_nsec:N:1:F:0:D:0.000347 +B:POSIXClock_Timeout_huge_nsec +P:0:0:UI1:init.c:62 +E:POSIXClock_Timeout_huge_nsec:N:1:F:0:D:0.000271 +B:POSIXClock_Timeout_finite +P:0:0:UI1:init.c:43 +P:1:0:UI1:init.c:50 +E:POSIXClock_Timeout_finite:N:2:F:0:D:0.009012 +B:POSIXClock_Timeout_clock_modify +P:0:0:UI1:init.c:109 +P:1:0:UI1:init.c:113 +P:2:0:UI1:init.c:116 +P:3:0:UI1:init.c:121 +E:POSIXClock_Timeout_clock_modify:N:4:F:0:D:1.008998 +Z:POSIXCLOCKNANOSLEEP01:C:6:N:10:F:0:D:1.027995 +Y:ReportHash:SHA256:7abe99f057e7ed39a7cd7ffd51c6ff0e0ec85ef1b8fe153399bd1b0a185bcfeb + +*** END OF TEST POSIXCLOCKNANOSLEEP01 *** + + +*** FATAL *** +fatal source: 5 (RTEMS_FATAL_SOURCE_EXIT) +fatal code: 0 (0x00000000) +RTEMS version: 6.0.0.560c08cc3d458cdeb4abc014deef8f4ce42a5d54 +RTEMS tools: 10.2.1 20200918 (RTEMS 6, RSB ed5030bc24dbfdfac52074ed78cf4231bf1f353d, Newlib 749cbcc) +executing thread ID: 0x08a010001 +executing thread name: UI1 diff --git a/testsuites/psxtmtests/psxtmclocknanosleep04/init.c b/testsuites/psxtmtests/psxtmclocknanosleep04/init.c new file mode 100644 index 0000000000..4dd83b3201 --- /dev/null +++ b/testsuites/psxtmtests/psxtmclocknanosleep04/init.c @@ -0,0 +1,70 @@ +/* SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 Utkarsh Rai + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <errno.h> +#include <limits.h> +#include <time.h> +#include <timesys.h> +#include <pthread.h> +#include <rtems/btimer.h> +#include <rtems/test.h> +#include <rtems/test-info.h> + +const char rtems_test_name[] = "PSXTMCLOCKNANOSLEEP 04"; + +T_TEST_CASE( POSIX_Clocknanosleep_monotonic_yield ) +{ + benchmark_timer_t end_time; + struct timespec sleep_time; + + sleep_time.tv_sec = 0; + sleep_time.tv_nsec = 1; + + benchmark_timer_initialize(); + clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &sleep_time, NULL ); + end_time = benchmark_timer_read(); + + put_time( "clock_nanosleep(MONOTONIC): yield", end_time, 1, 0, 0 ); + +} + +static rtems_task Init( rtems_task_argument argument) +{ + rtems_test_run( argument, TEST_STATE ); +} + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> \ No newline at end of file diff --git a/testsuites/psxtmtests/psxtmclocknanosleep05/init.c b/testsuites/psxtmtests/psxtmclocknanosleep05/init.c new file mode 100644 index 0000000000..dd43b4dc36 --- /dev/null +++ b/testsuites/psxtmtests/psxtmclocknanosleep05/init.c @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 Utkarsh Rai + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <errno.h> +#include <limits.h> +#include <pthread.h> +#include <time.h> +#include <timesys.h> +#include <rtems/btimer.h> +#include <rtems/test.h> +#include <rtems/test-info.h> + +const char rtems_test_name[] = "PSXTMCLOCKNANOSLEEP 05"; + +void *Low( + void *argument +) +{ + benchmark_timer_t end_time; + + end_time = benchmark_timer_read(); + + put_time( + "clock_nanosleep(MONOTONIC): blocking", + end_time, + OPERATION_COUNT, + 0, + 0 + ); + + return NULL; +} + +void *Middle( + void *argument +) +{ + /* calling nanosleep */ + struct timespec sleepTime; + sleepTime.tv_sec = 0; + sleepTime.tv_nsec = 1; + + clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &sleepTime, NULL ); + + return NULL; +} + +T_TEST_CASE( POSIX_Clocknanosleep_monotonic_blocking ) +{ + int i; + int status; + pthread_t threadId; + struct timespec sleepTime; + struct timespec remainder; + + sleepTime.tv_sec = 0; + sleepTime.tv_nsec = 1; + remainder.tv_sec = 0; + remainder.tv_nsec = 0; + + for ( i = 0 ; i < OPERATION_COUNT - 1 ; i++ ) { + status = pthread_create( &threadId, NULL, Middle, NULL ); + T_psx_success( status ); + } + + status = pthread_create( &threadId, NULL, Low, NULL ); + T_psx_success( status ); + + /* start the timer and switch through all the other tasks */ + benchmark_timer_initialize(); + /* calling clock_nanosleep*/ + clock_nanosleep( CLOCK_MONOTONIC, TIMER_ABSTIME, &sleepTime, &remainder ); + +} + +static rtems_task Init( rtems_task_argument argument) +{ + rtems_test_run( argument, TEST_STATE ); +} + +#define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER + +#define CONFIGURE_MAXIMUM_POSIX_THREADS OPERATION_COUNT + 1 +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> \ No newline at end of file -- 2.25.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel