[v3] tst: Add test for clock_adjtime

Message ID 20210224233945.31447-1-lukma@denx.de
State Superseded
Delegated to: Adhemerval Zanella Netto
Headers
Series [v3] tst: Add test for clock_adjtime |

Commit Message

Lukasz Majewski Feb. 24, 2021, 11:39 p.m. UTC
  This code privides 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 1 sec 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

Changes for v3:
- Set clock_adjtime delta time to 1sec instead of 1ms.
---
 time/Makefile            |  3 ++-
 time/tst-clock_adjtime.c | 58 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
 create mode 100644 time/tst-clock_adjtime.c
  

Comments

Adhemerval Zanella Netto Feb. 25, 2021, 11:57 a.m. UTC | #1
On 24/02/2021 20:39, Lukasz Majewski wrote:
> This code privides 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 1 sec 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
> 
> Changes for v3:
> - Set clock_adjtime delta time to 1sec instead of 1ms.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  time/Makefile            |  3 ++-
>  time/tst-clock_adjtime.c | 58 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 60 insertions(+), 1 deletion(-)
>  create mode 100644 time/tst-clock_adjtime.c
> 
> diff --git a/time/Makefile b/time/Makefile
> index b3c5368c3b..0d571fb777 100644
> --- a/time/Makefile
> +++ b/time/Makefile
> @@ -48,7 +48,8 @@ tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
>  	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
>  	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
>  	   tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \
> -	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime
> +	   tst-adjtime tst-ctime tst-difftime tst-mktime4 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..c472f0a261
> --- /dev/null
> +++ b/time/tst-clock_adjtime.c
> @@ -0,0 +1,58 @@
> +/* 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");
> +
> +  tv_then = xclock_now (CLOCK_REALTIME);
> +
> +  /* Setup time value to adjust - 1 sec. */
> +  delta.time.tv_sec = 1;
> +  delta.time.tv_usec = 0;
> +  delta.modes = ADJ_SETOFFSET;
> +
> +  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) { 1, 0 }, r, 0.9, 1.1), 0);
> +
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>
> 

Ok.
  
Adhemerval Zanella Netto Feb. 25, 2021, 2:11 p.m. UTC | #2
On 25/02/2021 08:57, Adhemerval Zanella wrote:
> 
> 
> On 24/02/2021 20:39, Lukasz Majewski wrote:
>> This code privides 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 1 sec 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
>>
>> Changes for v3:
>> - Set clock_adjtime delta time to 1sec instead of 1ms.
> 
> LGTM, thanks.
> 
> Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
> 
>> ---
>>  time/Makefile            |  3 ++-
>>  time/tst-clock_adjtime.c | 58 ++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 60 insertions(+), 1 deletion(-)
>>  create mode 100644 time/tst-clock_adjtime.c
>>
>> diff --git a/time/Makefile b/time/Makefile
>> index b3c5368c3b..0d571fb777 100644
>> --- a/time/Makefile
>> +++ b/time/Makefile
>> @@ -48,7 +48,8 @@ tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
>>  	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
>>  	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
>>  	   tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \
>> -	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime
>> +	   tst-adjtime tst-ctime tst-difftime tst-mktime4 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..c472f0a261
>> --- /dev/null
>> +++ b/time/tst-clock_adjtime.c
>> @@ -0,0 +1,58 @@
>> +/* 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>

This header is not required and only provided by Linux.
  
Adhemerval Zanella Netto Feb. 25, 2021, 2:12 p.m. UTC | #3
On 25/02/2021 11:11, Adhemerval Zanella wrote:
> 
> 
> On 25/02/2021 08:57, Adhemerval Zanella wrote:
>>
>>
>> On 24/02/2021 20:39, Lukasz Majewski wrote:
>>> This code privides 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 1 sec 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
>>>
>>> Changes for v3:
>>> - Set clock_adjtime delta time to 1sec instead of 1ms.
>>
>> LGTM, thanks.
>>
>> Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
>>
>>> ---
>>>  time/Makefile            |  3 ++-
>>>  time/tst-clock_adjtime.c | 58 ++++++++++++++++++++++++++++++++++++++++
>>>  2 files changed, 60 insertions(+), 1 deletion(-)
>>>  create mode 100644 time/tst-clock_adjtime.c
>>>
>>> diff --git a/time/Makefile b/time/Makefile
>>> index b3c5368c3b..0d571fb777 100644
>>> --- a/time/Makefile
>>> +++ b/time/Makefile
>>> @@ -48,7 +48,8 @@ tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
>>>  	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
>>>  	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
>>>  	   tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \
>>> -	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime
>>> +	   tst-adjtime tst-ctime tst-difftime tst-mktime4 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..c472f0a261
>>> --- /dev/null
>>> +++ b/time/tst-clock_adjtime.c
>>> @@ -0,0 +1,58 @@
>>> +/* 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>
> 
> This header is not required and only provided by Linux.
> 

In fact this test uses clock_adjtime which is only provided by Linux,
please move it to be Linux specific.
  

Patch

diff --git a/time/Makefile b/time/Makefile
index b3c5368c3b..0d571fb777 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -48,7 +48,8 @@  tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
 	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
 	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \
 	   tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \
-	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime
+	   tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock_settime \
+	   tst-clock_adjtime
 
 include ../Rules
 
diff --git a/time/tst-clock_adjtime.c b/time/tst-clock_adjtime.c
new file mode 100644
index 0000000000..c472f0a261
--- /dev/null
+++ b/time/tst-clock_adjtime.c
@@ -0,0 +1,58 @@ 
+/* 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");
+
+  tv_then = xclock_now (CLOCK_REALTIME);
+
+  /* Setup time value to adjust - 1 sec. */
+  delta.time.tv_sec = 1;
+  delta.time.tv_usec = 0;
+  delta.modes = ADJ_SETOFFSET;
+
+  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) { 1, 0 }, r, 0.9, 1.1), 0);
+
+  return 0;
+}
+
+#include <support/test-driver.c>