[4/4] stdlib: Move tst-system to tests-container
Commit Message
Fix some issues with different shell and error messages.
Checked on x86_64-linux-gnu.
---
stdlib/Makefile | 3 ++-
stdlib/tst-system.c | 10 ++++++----
2 files changed, 8 insertions(+), 5 deletions(-)
Comments
Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
> Fix some issues with different shell and error messages.
[...]
> + char *returnerr = xasprintf ("%s: execing %s failed: "
> + "No such file or directory",
> basename(_PATH_BSHELL), cmd);
> TEST_COMPARE_STRING (result.err.buffer, returnerr);
Yesterday's cherry-pick of this new test to the 2.31 branch breaks the
test suite for me with bash 5.0.11 as /bin/sh. Here's tst-system.out,
trimmed a bit:
| tst-system.c:93: error: string comparison failed
| left string: 279 bytes
| right string: 274 bytes
| left (evaluated from result.err.buffer):
| "sh: aaa...aaaaaa: command not found\n"
| right (evaluated from returnerr):
| "sh: 1: aaa...aaaaaa: not found\n"
| tst-system.c:111: error: string comparison failed
| left string: 280 bytes
| right string: 284 bytes
| left (evaluated from result.err.buffer):
| "sh: aaa...aaaaaaa: command not found\n"
| right (evaluated from returnerr):
| "sh: 1: aaa...aaaaaaa: File name too long\n"
| error: 2 test failures
I don't think that trying to match against the shell error message here
is a good idea, since it'll depend on what /bin/sh the user has:
$ bash -c blargh
bash: blargh: command not found
$ dash -c blargh
dash: 1: blargh: not found
$ mksh -c blargh
mksh: blargh: inaccessible or not found
Thanks,
On 25/03/2020 09:03, Adam Sampson via Libc-alpha wrote:
> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> writes:
>
>> Fix some issues with different shell and error messages.
> [...]
>> + char *returnerr = xasprintf ("%s: execing %s failed: "
>> + "No such file or directory",
>> basename(_PATH_BSHELL), cmd);
>> TEST_COMPARE_STRING (result.err.buffer, returnerr);
>
> Yesterday's cherry-pick of this new test to the 2.31 branch breaks the
> test suite for me with bash 5.0.11 as /bin/sh. Here's tst-system.out,
> trimmed a bit:
>
> | tst-system.c:93: error: string comparison failed
> | left string: 279 bytes
> | right string: 274 bytes
> | left (evaluated from result.err.buffer):
> | "sh: aaa...aaaaaa: command not found\n"
> | right (evaluated from returnerr):
> | "sh: 1: aaa...aaaaaa: not found\n"
> | tst-system.c:111: error: string comparison failed
> | left string: 280 bytes
> | right string: 284 bytes
> | left (evaluated from result.err.buffer):
> | "sh: aaa...aaaaaaa: command not found\n"
> | right (evaluated from returnerr):
> | "sh: 1: aaa...aaaaaaa: File name too long\n"
> | error: 2 test failures
>
> I don't think that trying to match against the shell error message here
> is a good idea, since it'll depend on what /bin/sh the user has:
>
> $ bash -c blargh
> bash: blargh: command not found
> $ dash -c blargh
> dash: 1: blargh: not found
> $ mksh -c blargh
> mksh: blargh: inaccessible or not found
>
> Thanks,
> '
Yes, the patchset it exactly to remove this dependency and use
the libsupport shell-container.c instead.
@@ -70,7 +70,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
test-canon test-canon2 tst-strtoll tst-environ \
tst-xpg-basename tst-random tst-random2 tst-bsearch \
tst-limits tst-rand48 bug-strtod tst-setcontext \
- tst-setcontext2 test-a64l tst-qsort tst-system testmb2 \
+ tst-setcontext2 test-a64l tst-qsort testmb2 \
bug-strtod2 tst-atof1 tst-atof2 tst-strtod2 \
tst-rand48-2 tst-makecontext tst-strtod5 \
tst-qsort2 tst-makecontext2 tst-strtod6 tst-unsetenv1 \
@@ -92,6 +92,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
tests-internal := tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
tst-tls-atexit tst-tls-atexit-nodelete
tests-static := tst-secure-getenv
+tests-container := tst-system
ifeq ($(build-hardcoded-path-in-tests),yes)
tests += tst-empty-env
@@ -88,7 +88,8 @@ do_test (void)
});
support_capture_subprocess_check (&result, "system", 0, sc_allow_stderr);
- char *returnerr = xasprintf ("%s: 1: %s: not found\n",
+ char *returnerr = xasprintf ("%s: execing %s failed: "
+ "No such file or directory",
basename(_PATH_BSHELL), cmd);
TEST_COMPARE_STRING (result.err.buffer, returnerr);
free (returnerr);
@@ -106,7 +107,8 @@ do_test (void)
});
support_capture_subprocess_check (&result, "system", 0, sc_allow_stderr);
- char *returnerr = xasprintf ("%s: 1: %s: File name too long\n",
+ char *returnerr = xasprintf ("%s: execing %s failed: "
+ "File name too long",
basename(_PATH_BSHELL), cmd);
TEST_COMPARE_STRING (result.err.buffer, returnerr);
free (returnerr);
@@ -116,7 +118,7 @@ do_test (void)
struct support_capture_subprocess result;
result = support_capture_subprocess (call_system,
&(struct args) {
- "kill -USR1 $$", 0, SIGUSR1
+ "kill $$", 0, SIGTERM
});
support_capture_subprocess_check (&result, "system", 0, sc_allow_none);
}
@@ -136,7 +138,7 @@ do_test (void)
support_capture_subprocess_check (&result, "system", 0, sc_allow_none);
}
- TEST_COMPARE (system (":"), 0);
+ TEST_COMPARE (system (""), 0);
return 0;
}