[PATCH v2] tst: Add test for clock_adjtime

Adhemerval Zanella adhemerval.zanella@linaro.org
Wed Feb 24 13:05:35 GMT 2021



On 17/02/2021 20:24, Lukasz Majewski wrote:
> This code brings test to check if time on target machine is properly
> adjusted.
> The time is altered only when cross-test-ssh.sh is executed with
> --allow-time-setting flag
> As the delta added to CLOCK_REALTIME is only 1ms the original time is
> not restored and further tests are executed with this bias.
> 
> ---
> Changes for v2:
> - Use timespec_sub and support_timespec_check_in_range to check if
>   time has been adjusted properly
> ---
>  time/Makefile            |  2 +-
>  time/tst-clock_adjtime.c | 59 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 60 insertions(+), 1 deletion(-)
>  create mode 100644 time/tst-clock_adjtime.c
> 
> diff --git a/time/Makefile b/time/Makefile
> index b6f0969f3d..fc6415bf8a 100644
> --- a/time/Makefile
> +++ b/time/Makefile
> @@ -51,7 +51,7 @@ tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
>  	   tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \
>  	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock-y2038 \
>  	   tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \
> -	   tst-clock_settime
> +	   tst-clock_settime tst-clock_adjtime
>  
>  include ../Rules
>  

Ok.

> diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c
> new file mode 100644
> index 0000000000..f31a4058ec
> --- /dev/null
> +++ b/time/tst-clock_adjtime.c
> @@ -0,0 +1,59 @@
> +/* Test for clock_adjtime
> +   Copyright (C) 2021 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <time.h>
> +#include <stdlib.h>
> +#include <sys/time.h>
> +#include <sys/timex.h>
> +#include <support/check.h>
> +#include <support/timespec.h>
> +
> +static int
> +do_test (void)
> +{
> +  struct timespec tv_then, tv_now;
> +  struct timex delta;
> +
> +  /* Check if altering target time is allowed.  */
> +  if (getenv (SETTIME_ENV_NAME) == NULL)
> +    FAIL_UNSUPPORTED ("clock_adjtime is executed only when "\
> +                      SETTIME_ENV_NAME" is set\n");

Ok.

> +
> +  tv_then = xclock_now (CLOCK_REALTIME);
> +
> +  /* Setup time value to adjust - 1 ms. */
> +  delta.time.tv_sec = 0;
> +  delta.time.tv_usec = 1000;
> +  delta.modes = ADJ_SETOFFSET;

Maybe 1 ms is too low?  I take that usually the system load on the
testing scenario would be low, that's why you haven't see a potential
issue. 

> +
> +  int ret = clock_adjtime (CLOCK_REALTIME, &delta);
> +  if (ret == -1)
> +    FAIL_EXIT1 ("clock_adjtime failed: %m\n");
> +
> +  tv_now = xclock_now (CLOCK_REALTIME);
> +
> +  /* Check if clock_adjtime adjusted the system time.  */
> +  struct timespec r = timespec_sub (tv_now, tv_then);
> +  TEST_COMPARE (support_timespec_check_in_range
> +                ((struct timespec) { 0, 1000000 }, r, 0.0009, 0.0011), 0);
> +
> +
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>
> 


More information about the Libc-alpha mailing list