[PATCH] elf: Update audit tests to not depend on stdout

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Oct 12 14:15:32 GMT 2021



On 05/10/2021 20:30, Stafford Horne via Libc-alpha wrote:
> The tst-audit14, tst-audit15 and tst-audit16 tests all have audit
> modules that write to stdout; the test reads from stdout to confirm
> what was written.  This assumes the stdout is a file which is not the
> case when run over ssh.
> 
> This patch updates the tests to use a post run cmp command to compare
> the output against and .exp file.  This is similar to how many other
> tests work and it fixes the stdout limitation.  Also, this means the
> test code can be greatly simplified.

LGTM, thank.

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

> ---
>  elf/Makefile        | 14 ++++++++++++
>  elf/tst-audit14.c   | 21 -----------------
>  elf/tst-audit14.exp |  1 +
>  elf/tst-audit15.c   | 51 +----------------------------------------
>  elf/tst-audit15.exp |  2 ++
>  elf/tst-audit16.c   | 55 +--------------------------------------------
>  elf/tst-audit16.exp |  3 +++
>  7 files changed, 22 insertions(+), 125 deletions(-)
>  create mode 100644 elf/tst-audit14.exp
>  create mode 100644 elf/tst-audit15.exp
>  create mode 100644 elf/tst-audit16.exp
> 
> diff --git a/elf/Makefile b/elf/Makefile
> index 26986c0692..bf45d8ee24 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -240,6 +240,10 @@ tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
>  endif
>  ifeq ($(have-depaudit),yes)
>  tests += tst-audit14 tst-audit15 tst-audit16
> +ifeq ($(run-built-tests),yes)
> +tests-special += $(objpfx)tst-audit14-cmp.out $(objpfx)tst-audit15-cmp.out \
> +		 $(objpfx)tst-audit16-cmp.out
> +endif
>  endif
>  endif
>  tests += $(tests-execstack-$(have-z-execstack))

Ok.

> @@ -1492,6 +1496,16 @@ $(objpfx)tst-auditmod17.so: $(objpfx)tst-auditmod17.os
>  CFLAGS-.os += $(call elide-stack-protector,.os,tst-auditmod17)
>  tst-audit17-ENV = LD_AUDIT=$(objpfx)tst-auditmod17.so
>  
> +$(objpfx)tst-audit14-cmp.out: tst-audit14.exp $(objpfx)tst-audit14.out
> +	cmp $^ > $@; \
> +	$(evaluate-test)
> +$(objpfx)tst-audit15-cmp.out: tst-audit15.exp $(objpfx)tst-audit15.out
> +	cmp $^ > $@; \
> +	$(evaluate-test)
> +$(objpfx)tst-audit16-cmp.out: tst-audit16.exp $(objpfx)tst-audit16.out
> +	cmp $^ > $@; \
> +	$(evaluate-test)
> +
>  # tst-sonamemove links against an older implementation of the library.
>  LDFLAGS-tst-sonamemove-linkmod1.so = \
>    -Wl,--version-script=tst-sonamemove-linkmod1.map \

Ok.

> diff --git a/elf/tst-audit14.c b/elf/tst-audit14.c
> index c57c2184c3..13c14b1a92 100644
> --- a/elf/tst-audit14.c
> +++ b/elf/tst-audit14.c
> @@ -16,30 +16,9 @@
>     License along with the GNU C Library; if not, see
>     <https://www.gnu.org/licenses/>.  */
>  
> -#include <stdlib.h>
> -#include <string.h>
> -#include <support/check.h>
> -#include <support/xstdio.h>
> -
>  static int
>  do_test (void)
>  {
> -  /* Verify what the audit module has written.  This test assumes that
> -     standard output has been redirected to a regular file.  */
> -  FILE *fp = xfopen ("/dev/stdout", "r");
> -
> -  char *buffer = NULL;
> -  size_t buffer_length = 0;
> -  size_t line_length = xgetline (&buffer, &buffer_length, fp);
> -  const char *message = "info: tst-auditlogmod-1.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  /* No more audit module output.  */
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  TEST_COMPARE_BLOB ("", 0, buffer, line_length);
> -
> -  free (buffer);
> -  xfclose (fp);
>    return 0;
>  }
>  
> diff --git a/elf/tst-audit14.exp b/elf/tst-audit14.exp
> new file mode 100644
> index 0000000000..8e96b3c858
> --- /dev/null
> +++ b/elf/tst-audit14.exp
> @@ -0,0 +1 @@
> +info: tst-auditlogmod-1.so loaded

Ok.

> diff --git a/elf/tst-audit15.c b/elf/tst-audit15.c
> index 76f3b9f9ed..c6232eacf2 100644
> --- a/elf/tst-audit15.c
> +++ b/elf/tst-audit15.c
> @@ -1,50 +1 @@
> -/* Main program with DT_AUDIT and DT_DEPAUDIT.  Two audit modules.
> -   Copyright (C) 2020-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 <stdlib.h>
> -#include <string.h>
> -#include <support/check.h>
> -#include <support/xstdio.h>
> -
> -static int
> -do_test (void)
> -{
> -  /* Verify what the audit modules have written.  This test assumes
> -     that standard output has been redirected to a regular file.  */
> -  FILE *fp = xfopen ("/dev/stdout", "r");
> -
> -  char *buffer = NULL;
> -  size_t buffer_length = 0;
> -  size_t line_length = xgetline (&buffer, &buffer_length, fp);
> -  const char *message = "info: tst-auditlogmod-1.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  message = "info: tst-auditlogmod-2.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  /* No more audit module output.  */
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  TEST_COMPARE_BLOB ("", 0, buffer, line_length);
> -
> -  free (buffer);
> -  xfclose (fp);
> -  return 0;
> -}
> -
> -#include <support/test-driver.c>
> +#include "tst-audit14.c"
> diff --git a/elf/tst-audit15.exp b/elf/tst-audit15.exp
> new file mode 100644
> index 0000000000..ac6d59e569
> --- /dev/null
> +++ b/elf/tst-audit15.exp
> @@ -0,0 +1,2 @@
> +info: tst-auditlogmod-1.so loaded
> +info: tst-auditlogmod-2.so loaded

Ok.

> diff --git a/elf/tst-audit16.c b/elf/tst-audit16.c
> index 168a294c86..c6232eacf2 100644
> --- a/elf/tst-audit16.c
> +++ b/elf/tst-audit16.c
> @@ -1,54 +1 @@
> -/* Main program with DT_AUDIT and DT_DEPAUDIT.  Three audit modules.
> -   Copyright (C) 2020-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 <stdlib.h>
> -#include <string.h>
> -#include <support/check.h>
> -#include <support/xstdio.h>
> -
> -static int
> -do_test (void)
> -{
> -  /* Verify what the audit modules have written.  This test assumes
> -     that standard output has been redirected to a regular file.  */
> -  FILE *fp = xfopen ("/dev/stdout", "r");
> -
> -  char *buffer = NULL;
> -  size_t buffer_length = 0;
> -  size_t line_length = xgetline (&buffer, &buffer_length, fp);
> -  const char *message = "info: tst-auditlogmod-1.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  message = "info: tst-auditlogmod-2.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  message = "info: tst-auditlogmod-3.so loaded\n";
> -  TEST_COMPARE_BLOB (message, strlen (message), buffer, line_length);
> -
> -  /* No more audit module output.  */
> -  line_length = xgetline (&buffer, &buffer_length, fp);
> -  TEST_COMPARE_BLOB ("", 0, buffer, line_length);
> -
> -  free (buffer);
> -  xfclose (fp);
> -  return 0;
> -}
> -
> -#include <support/test-driver.c>
> +#include "tst-audit14.c"
> diff --git a/elf/tst-audit16.exp b/elf/tst-audit16.exp
> new file mode 100644
> index 0000000000..7d6145ad4d
> --- /dev/null
> +++ b/elf/tst-audit16.exp
> @@ -0,0 +1,3 @@
> +info: tst-auditlogmod-1.so loaded
> +info: tst-auditlogmod-2.so loaded
> +info: tst-auditlogmod-3.so loaded
> 

Ok.


More information about the Libc-alpha mailing list