elf: Update audit tests to not depend on stdout

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.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Stafford Horne 2021-10-06 08:30:38 +09:00 committed by Adhemerval Zanella
parent 4af6982e4c
commit 171ab1af56
7 changed files with 22 additions and 125 deletions

View File

@ -240,6 +240,10 @@ tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
endif endif
ifeq ($(have-depaudit),yes) ifeq ($(have-depaudit),yes)
tests += tst-audit14 tst-audit15 tst-audit16 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
endif endif
tests += $(tests-execstack-$(have-z-execstack)) 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) CFLAGS-.os += $(call elide-stack-protector,.os,tst-auditmod17)
tst-audit17-ENV = LD_AUDIT=$(objpfx)tst-auditmod17.so 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. # tst-sonamemove links against an older implementation of the library.
LDFLAGS-tst-sonamemove-linkmod1.so = \ LDFLAGS-tst-sonamemove-linkmod1.so = \
-Wl,--version-script=tst-sonamemove-linkmod1.map \ -Wl,--version-script=tst-sonamemove-linkmod1.map \

View File

@ -16,30 +16,9 @@
License along with the GNU C Library; if not, see License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */ <https://www.gnu.org/licenses/>. */
#include <stdlib.h>
#include <string.h>
#include <support/check.h>
#include <support/xstdio.h>
static int static int
do_test (void) 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; return 0;
} }

1
elf/tst-audit14.exp Normal file
View File

@ -0,0 +1 @@
info: tst-auditlogmod-1.so loaded

View File

@ -1,50 +1 @@
/* Main program with DT_AUDIT and DT_DEPAUDIT. Two audit modules. #include "tst-audit14.c"
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>

2
elf/tst-audit15.exp Normal file
View File

@ -0,0 +1,2 @@
info: tst-auditlogmod-1.so loaded
info: tst-auditlogmod-2.so loaded

View File

@ -1,54 +1 @@
/* Main program with DT_AUDIT and DT_DEPAUDIT. Three audit modules. #include "tst-audit14.c"
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>

3
elf/tst-audit16.exp Normal file
View File

@ -0,0 +1,3 @@
info: tst-auditlogmod-1.so loaded
info: tst-auditlogmod-2.so loaded
info: tst-auditlogmod-3.so loaded