[PATCH v2] tst: Provide test for getrusage

Lukasz Majewski lukma@denx.de
Wed Mar 31 12:51:05 GMT 2021


Dear Community,

> This commit adds test to check if getrusage works correctly. As the
> first check - if the wrong 'who' parameter causes errno set to EINVAL.
> 
> Next for the ru_{us}time.tv_usec fields it is checked if they are in
> microseconds range.
> 
> The last check is to perform busy wait loop for 10ms and afterwards
> assess if ru_{us}time.tv_sec are not smaller than values read on the
> test start.
> 
> Changes for v2:
> - Add check for EINVAL return value
> - Check if getrusage ru_{su}time.tv_usec are in correct microseconds
> range
> - Busy wait for 10ms and then compare getrusage system and user times
>   (in seconds) if they are equal or larger than previous ones

Gentle ping on this patch. Are there any more comments?

> ---
>  resource/Makefile        |  2 +-
>  resource/tst-getrusage.c | 67
> ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68
> insertions(+), 1 deletion(-) create mode 100644
> resource/tst-getrusage.c
> 
> diff --git a/resource/Makefile b/resource/Makefile
> index bd9e716749..e236df3d7c 100644
> --- a/resource/Makefile
> +++ b/resource/Makefile
> @@ -25,6 +25,6 @@ headers	  := sys/resource.h bits/resource.h
> sys/vlimit.h	\ routines := getrlimit setrlimit getrlimit64
> setrlimit64 getrusage ulimit      \ vlimit vtimes getpriority
> setpriority nice 
> -tests = tst-getrlimit bug-ulimit1
> +tests = tst-getrlimit bug-ulimit1 tst-getrusage
>  
>  include ../Rules
> diff --git a/resource/tst-getrusage.c b/resource/tst-getrusage.c
> new file mode 100644
> index 0000000000..da721b0613
> --- /dev/null
> +++ b/resource/tst-getrusage.c
> @@ -0,0 +1,67 @@
> +/* Test for getrusage.
> +   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 <errno.h>
> +#include <sys/resource.h>
> +#include <support/check.h>
> +#include <support/timespec.h>
> +
> +static int
> +do_test (void)
> +{
> +  struct timespec tv_then, tv_now, r;
> +  struct rusage ru, ru_then;
> +  int ret;
> +
> +  /* Check for invalid 'who' parameter.  */
> +  ret = getrusage (-100, &ru);
> +  if (! (ret == -1 && errno == EINVAL))
> +    FAIL_EXIT1 ("getrusage failed - EINVAL expected\n");
> +
> +  /* Check if ru_stime.tv_usec and ru_utime.tv_usec are correct.  */
> +  ret = getrusage (RUSAGE_SELF, &ru_then);
> +  if (ret == -1)
> +    FAIL_EXIT1 ("getrusage failed: %m\n");
> +
> +  TEST_VERIFY (ru_then.ru_utime.tv_usec >= 0);
> +  TEST_VERIFY (ru_then.ru_utime.tv_usec < 1000000);
> +
> +  TEST_VERIFY (ru_then.ru_stime.tv_usec >= 0);
> +  TEST_VERIFY (ru_then.ru_stime.tv_usec < 1000000);
> +
> +  tv_then = xclock_now (CLOCK_REALTIME);
> +  /* Busy wait for 10 miliseconds.  */
> +  do
> +    {
> +      tv_now = xclock_now (CLOCK_REALTIME);
> +      r = timespec_sub (tv_now, tv_then);
> +    }
> +  while (r.tv_nsec <= 10000000);
> +
> +  ret = getrusage (RUSAGE_SELF, &ru);
> +  if (ret == -1)
> +    FAIL_EXIT1 ("getrusage failed: %m\n");
> +
> +  TEST_VERIFY (ru.ru_utime.tv_sec >= ru_then.ru_utime.tv_sec);
> +  TEST_VERIFY (ru.ru_stime.tv_sec >= ru_then.ru_stime.tv_sec);
> +
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20210331/3caa2fe4/attachment.sig>


More information about the Libc-alpha mailing list