[PATCH] Test for clock_nanosleep with CLOCK_MONOTONIC option.

Gedare Bloom gedare at rtems.org
Tue Apr 14 14:45:30 UTC 2020


On Tue, Apr 14, 2020 at 6:05 AM Utkarsh Rai <utkarsh.rai60 at gmail.com> wrote:
>
> This test checks for a simple 1 ns delay with clock_nanosleep with
> CLOCK_MONOTONIC.
> ---
>  testsuites/psxtests/Makefile.am               |  9 +++
>  testsuites/psxtests/configure.ac              |  1 +
>  .../psxtests/psxclocknanosleep01/init.c       | 81 +++++++++++++++++++
>  .../psxclocknanosleep01.doc                   | 10 +++
>  .../psxclocknanosleep01.scn                   |  3 +
>  5 files changed, 104 insertions(+)
>  create mode 100644 testsuites/psxtests/psxclocknanosleep01/init.c
>  create mode 100644 testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc
>  create mode 100644 testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn
>
> diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am
> index 1f9e4233ec..e3918ae7a5 100755
> --- a/testsuites/psxtests/Makefile.am
> +++ b/testsuites/psxtests/Makefile.am
> @@ -321,6 +321,15 @@ psxclockrealtime01_CPPFLAGS = $(AM_CPPFLAGS) \
>         $(TEST_FLAGS_psxclockrealtime01) $(support_includes)
>  endif
>
> +if TEST_psxclocknanosleep01
> +psx_tests += psxclocknanosleep01
> +psx_screens += psxclocknanosleep01/psxclocknanosleep01.scn
> +psx_docs += psxclocknanosleep01/psxclocknanosleep01.doc
> +psxclocknanosleep01_SOURCES = psxclocknanosleep01/init.c
> +psxclocknanosleep01_CPPFLAGS = $(AM_CPPFLAGS) \
> +       $(TEST_FLAGS_psxclocknanosleep01) $(support_includes)
> +endif
> +
>  if TEST_psxconcurrency01
>  psx_tests += psxconcurrency01
>  psx_screens += psxconcurrency01/psxconcurrency01.scn
> diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac
> index 139787cccb..9bfe8e2c0b 100644
> --- a/testsuites/psxtests/configure.ac
> +++ b/testsuites/psxtests/configure.ac
> @@ -75,6 +75,7 @@ RTEMS_TEST_CHECK([psxcleanup01])
>  RTEMS_TEST_CHECK([psxcleanup02])
>  RTEMS_TEST_CHECK([psxclock])
>  RTEMS_TEST_CHECK([psxclock01])
> +RTEMS_TEST_CHECK([psxclocknanosleep01])
>  RTEMS_TEST_CHECK([psxclockrealtime01])
>  RTEMS_TEST_CHECK([psxconcurrency01])
>  RTEMS_TEST_CHECK([psxcond01])
> diff --git a/testsuites/psxtests/psxclocknanosleep01/init.c b/testsuites/psxtests/psxclocknanosleep01/init.c
> new file mode 100644
> index 0000000000..462ee114f8
> --- /dev/null
> +++ b/testsuites/psxtests/psxclocknanosleep01/init.c
> @@ -0,0 +1,81 @@
> +/*
> + * 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.
> + */
> +
> +#include<rtems.h>
> +#include<rtems/test.h>
> +#include<time.h>
> +#include<tmacros.h>
add space after the CPP directive
#include <rtems.h>

> +
> +/*Forward declaration to avoid compiler warning*/
> +void clock_sleep(void);
> +
> +rtems_task Init(rtems_task_argument ignored);
> +
> +const char rtems_test_name[] = "PSXCLOCKNANOSLEEP 01";
> +
> +void clock_sleep(void)
> +{
> +  struct timespec delay_time;
> +  int    status;
> +
> +  delay_time.tv_sec=0;
> +  delay_time.tv_nsec=1;
add spaces around operators

> +
> +  status=clock_nanosleep(CLOCK_MONOTONIC, 0, &delay_time, (struct timespec* )NULL);
add spaces within function parens, repeat below.
ex: clock_nanosleep( CLOCK_MONOTONIC, ..., NULL );

> +  rtems_test_assert(!status);
It is better to check the explicit value:
rtems_test_assert( status == 0 );

> +}
> +
> +rtems_task Init(rtems_task_argument ignored)
> +{
> +
> +  struct timespec init_time;
> +  struct timespec end_time;
> +  int    status;
> +
> +  TEST_BEGIN();
> +
> +  status = clock_gettime(CLOCK_MONOTONIC, &init_time);
> +  rtems_test_assert(!status);
> +
> +  clock_sleep();
> +
> +  status = clock_gettime(CLOCK_MONOTONIC, &end_time);
> +  rtems_test_assert(!status);
> +
> +  rtems_test_assert((end_time.tv_sec-init_time.tv_sec)==0);
> +  rtems_test_assert((end_time.tv_nsec-init_time.tv_nsec)>=1);
> +
> +  TEST_END();
> +  rtems_test_exit(0);
> +}
> +
> +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> +
> +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> +#define CONFIGURE_MAXIMUM_TASKS  1
> +#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..ac70182aa0
> --- /dev/null
> +++ b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.doc
> @@ -0,0 +1,10 @@
> +This file describes the directives and concepts tested by this test set.
> +
> +test set name:  psxclocknanosleep01
> +
> +directives: clock_nanosleep
> +
> +concepts:
> +
> ++ This test ensures that the clock_nanosleep produces a 1 ns delay while using
> +CLOCK_MONOTONIC option
> \ 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..2f1b39f4f7
> --- /dev/null
> +++ b/testsuites/psxtests/psxclocknanosleep01/psxclocknanosleep01.scn
> @@ -0,0 +1,3 @@
> +*** BEGIN OF TEST PSXCLOCKNANOSLEEP 01 ***
> +
> +*** END OF TEST PSXCLOCKNANOSLEEP 01 ***
> --
> 2.17.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list