diff mbox series

elf: Update audit tests to not depend on stdout

Message ID 20211005233038.2219730-1-shorne@gmail.com
State New
Headers show
Series elf: Update audit tests to not depend on stdout | expand

Commit Message

Stafford Horne Oct. 5, 2021, 11:30 p.m. UTC
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.
---
 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

Comments

Adhemerval Zanella Oct. 12, 2021, 2:15 p.m. UTC | #1
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.
diff mbox series

Patch

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))
@@ -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 \
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
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
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