[v3] tst: Add test for clock_adjtime
Commit Message
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
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.
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.
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.
@@ -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
new file mode 100644
@@ -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>