[LTP] [PATCH] syscalls/stime: Use 3 variants via test_multiplex()
Steve Muckle
smuckle@google.com
Wed Mar 27 21:13:58 CET 2019
On 03/26/2019 11:36 PM, Xiao Yang wrote:
> Hi Steve,
>
> Could you tell me if Android's libc doesn't implements stime()?
> If libc stime() isn't implemented on Android, we should avoid testing it
> as the patch does.
Hi Xiao, that is correct, bionic (Android libc) does not provide stime().
I reviewed and tested your patch on Android, looks good to me.
Reviewed-by: Steve Muckle <smuckle@google.com>
Tested-by: Steve Muckle <smuckle@google.com>
>
> Best Regards,
> Xiao Yang
> On 2019/03/27 14:30, Xiao Yang wrote:
>> We will test stime() libc wrapper, __NR_stime and __NR_settimeofday syscalls.
>>
>> Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
>> ---
>> testcases/kernel/syscalls/stime/stime01.c | 11 ++++--
>> testcases/kernel/syscalls/stime/stime02.c | 8 +++--
>> testcases/kernel/syscalls/stime/stime_var.h | 54 +++++++++++++++++++++++++++++
>> 3 files changed, 68 insertions(+), 5 deletions(-)
>> create mode 100644 testcases/kernel/syscalls/stime/stime_var.h
>>
>> diff --git a/testcases/kernel/syscalls/stime/stime01.c b/testcases/kernel/syscalls/stime/stime01.c
>> index 279b0b1..82a3402 100644
>> --- a/testcases/kernel/syscalls/stime/stime01.c
>> +++ b/testcases/kernel/syscalls/stime/stime01.c
>> @@ -17,8 +17,8 @@
>> #include <time.h>
>> #include <sys/time.h>
>>
>> -#include "lapi/syscalls.h"
>> #include "tst_test.h"
>> +#include "stime_var.h"
>>
>> static struct timeval real_time_tv;
>>
>> @@ -32,7 +32,7 @@ static void run(void)
>>
>> new_time = real_time_tv.tv_sec + 30;
>>
>> - if (tst_syscall(__NR_stime, &new_time) < 0) {
>> + if (do_stime(&new_time) < 0) {
>> tst_res(TFAIL | TERRNO, "stime(%ld) failed", new_time);
>> return;
>> }
>> @@ -52,8 +52,15 @@ static void run(void)
>> }
>> }
>>
>> +static void setup(void)
>> +{
>> + stime_info();
>> +}
>> +
>> static struct tst_test test = {
>> .test_all = run,
>> .needs_root = 1,
>> .restore_wallclock = 1,
>> + .setup = setup,
>> + .test_variants = TEST_VARIANTS,
>> };
>> diff --git a/testcases/kernel/syscalls/stime/stime02.c b/testcases/kernel/syscalls/stime/stime02.c
>> index 1aa1021..126a49a 100644
>> --- a/testcases/kernel/syscalls/stime/stime02.c
>> +++ b/testcases/kernel/syscalls/stime/stime02.c
>> @@ -19,15 +19,14 @@
>> #include <time.h>
>> #include <pwd.h>
>>
>> -#include "lapi/syscalls.h"
>> #include "tst_test.h"
>> +#include "stime_var.h"
>>
>> static time_t new_time;
>>
>> static void run(void)
>> {
>> - TEST(tst_syscall(__NR_stime, &new_time));
>> -
>> + TEST(do_stime(&new_time));
>> if (TST_RET != -1) {
>> tst_res(TFAIL,
>> "stime() returned %ld, expected -1 EPERM", TST_RET);
>> @@ -48,6 +47,8 @@ static void setup(void)
>> time_t curr_time;
>> struct passwd *ltpuser;
>>
>> + stime_info();
>> +
>> ltpuser = SAFE_GETPWNAM("nobody");
>> SAFE_SETUID(ltpuser->pw_uid);
>>
>> @@ -61,4 +62,5 @@ static struct tst_test test = {
>> .test_all = run,
>> .setup = setup,
>> .needs_root = 1,
>> + .test_variants = TEST_VARIANTS,
>> };
>> diff --git a/testcases/kernel/syscalls/stime/stime_var.h b/testcases/kernel/syscalls/stime/stime_var.h
>> new file mode 100644
>> index 0000000..1b47441
>> --- /dev/null
>> +++ b/testcases/kernel/syscalls/stime/stime_var.h
>> @@ -0,0 +1,54 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later
>> +/*
>> + * Copyright (c) 2019 FUJITSU LIMITED. All rights reserved.
>> + * Author: Xiao Yang <yangx.jy@cn.fujitsu.com>
>> + */
>> +
>> +#ifndef STIME_VAR__
>> +#define STIME_VAR__
>> +
>> +#include <sys/time.h>
>> +#include "lapi/syscalls.h"
>> +
>> +#define TEST_VARIANTS 3
>> +
>> +static int do_stime(time_t *ntime)
>> +{
>> + switch (tst_variant) {
>> + case 0:
>> +#ifdef __ANDROID__
>> + tst_brk(TCONF, "libc stime() is not implemented for Android");
>> +#else
>> + return stime(ntime);
>> +#endif
>> + case 1:
>> + return tst_syscall(__NR_stime, ntime);
>> + case 2: {
>> + struct timeval tv;
>> +
>> + tv.tv_sec = *ntime;
>> + tv.tv_usec = 0;
>> +
>> + return tst_syscall(__NR_settimeofday, &tv, (struct timezone *) 0);
>> + }
>> + }
>> +
>> + return -1;
>> +}
>> +
>> +static void stime_info(void)
>> +{
>> + switch (tst_variant) {
>> + case 0:
>> + tst_res(TINFO, "Testing libc stime()");
>> + break;
>> + case 1:
>> + tst_res(TINFO, "Testing SYS_stime syscall");
>> + break;
>> + case 2:
>> + tst_res(TINFO, "Testing SYS_settimeofday syscall");
>> + break;
>> + }
>> +}
>> +
>> +#endif /* STIME_VAR__ */
>
>
>
More information about the ltp
mailing list