Integrate tools/regression/execve into the FreeBSD test suite as
tests/sys/kern/execve MFC after: 1 week
This commit is contained in:
commit
add5897136
@ -355,6 +355,8 @@
|
||||
..
|
||||
sys
|
||||
kern
|
||||
execve
|
||||
..
|
||||
..
|
||||
netinet
|
||||
..
|
||||
|
@ -10,4 +10,6 @@ LDADD.unix_seqpacket_test+= -lpthread
|
||||
|
||||
WARNS?= 5
|
||||
|
||||
TESTS_SUBDIRS+= execve
|
||||
|
||||
.include <bsd.test.mk>
|
||||
|
39
tests/sys/kern/execve/Makefile
Normal file
39
tests/sys/kern/execve/Makefile
Normal file
@ -0,0 +1,39 @@
|
||||
# $FreeBSD$
|
||||
|
||||
TESTSDIR= ${TESTSBASE}/sys/kern/execve
|
||||
|
||||
BINDIR= ${TESTSDIR}
|
||||
|
||||
MAN=
|
||||
|
||||
ATF_TESTS_SH+= execve_test
|
||||
|
||||
PROGS+= good_aout
|
||||
PROGS+= execve_helper
|
||||
|
||||
LDFLAGS.goodaout+= -static
|
||||
|
||||
CLEANFILES+= empty
|
||||
CLEANFILES+= sparse_aout
|
||||
CLEANFILES+= trunc_aout
|
||||
|
||||
SCRIPTS+= bad_interp_len
|
||||
SCRIPTS+= dev_null_script
|
||||
SCRIPTS+= empty
|
||||
SCRIPTS+= good_script
|
||||
SCRIPTS+= non_exist_shell
|
||||
SCRIPTS+= script_arg
|
||||
SCRIPTS+= script_arg_nospace
|
||||
SCRIPTS+= sparse_aout
|
||||
SCRIPTS+= trunc_aout
|
||||
|
||||
empty:
|
||||
@touch $@
|
||||
|
||||
sparse_aout:
|
||||
@truncate -s 20480 $@
|
||||
|
||||
trunc_aout:
|
||||
@truncate -s 16 $@
|
||||
|
||||
.include <bsd.test.mk>
|
@ -34,25 +34,21 @@
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "usage: %s <progname>\n", argv[0]);
|
||||
exit(2);
|
||||
}
|
||||
|
||||
unsetenv("LANG"); /* we compare C error strings */
|
||||
if (execve(argv[1], &argv[1], NULL) == -1) {
|
||||
printf("%s\n", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
execve(argv[1], &argv[1], NULL);
|
||||
err(1, "");
|
||||
}
|
115
tests/sys/kern/execve/execve_test.sh
Normal file
115
tests/sys/kern/execve/execve_test.sh
Normal file
@ -0,0 +1,115 @@
|
||||
|
||||
bad_interp_len_head()
|
||||
{
|
||||
atf_set "descr" "Bad interpreter length"
|
||||
}
|
||||
bad_interp_len_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper bad_interp_len"
|
||||
}
|
||||
|
||||
empty_head()
|
||||
{
|
||||
atf_set "descr" "Empty file"
|
||||
}
|
||||
empty_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:Exec format error' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper empty"
|
||||
}
|
||||
|
||||
good_aout_head()
|
||||
{
|
||||
atf_set "descr" "Good a.out"
|
||||
}
|
||||
good_aout_body()
|
||||
{
|
||||
atf_check -s exit:0 -e empty -o 'match:succeeded' \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper ./good_aout"
|
||||
}
|
||||
|
||||
good_script_head()
|
||||
{
|
||||
atf_set "descr" "Good script"
|
||||
}
|
||||
good_script_body()
|
||||
{
|
||||
atf_check -s exit:0 -e empty -o 'match:succeeded' \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper good_script"
|
||||
}
|
||||
|
||||
non_exist_head()
|
||||
{
|
||||
atf_set "descr" "Non-existent file"
|
||||
}
|
||||
non_exist_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper non_exist"
|
||||
}
|
||||
|
||||
non_exist_shell_head()
|
||||
{
|
||||
atf_set "descr" "Non-existent shell"
|
||||
}
|
||||
non_exist_shell_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper non_exist_shell"
|
||||
}
|
||||
|
||||
script_arg_head()
|
||||
{
|
||||
atf_set "descr" "-x in the shebang"
|
||||
}
|
||||
script_arg_body()
|
||||
{
|
||||
atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper script_arg"
|
||||
}
|
||||
|
||||
script_arg_nospace_head()
|
||||
{
|
||||
atf_set "descr" '-x in the shebang; no space between #! and /bin/sh'
|
||||
}
|
||||
script_arg_nospace_body()
|
||||
{
|
||||
atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper script_arg_nospace"
|
||||
}
|
||||
|
||||
sparse_aout_head()
|
||||
{
|
||||
atf_set "descr" 'Sparse file'
|
||||
}
|
||||
sparse_aout_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:Exec format error' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper sparse_aout"
|
||||
}
|
||||
|
||||
trunc_aout_head()
|
||||
{
|
||||
atf_set "descr" 'Truncated file'
|
||||
}
|
||||
trunc_aout_body()
|
||||
{
|
||||
atf_check -s exit:1 -e 'match:Exec format error' -o empty \
|
||||
-x "cd $(atf_get_srcdir) && ./execve_helper trunc_aout"
|
||||
}
|
||||
|
||||
atf_init_test_cases()
|
||||
{
|
||||
atf_add_test_case bad_interp_len
|
||||
atf_add_test_case empty
|
||||
atf_add_test_case good_aout
|
||||
atf_add_test_case good_script
|
||||
atf_add_test_case non_exist
|
||||
atf_add_test_case non_exist_shell
|
||||
atf_add_test_case script_arg
|
||||
atf_add_test_case script_arg_nospace
|
||||
atf_add_test_case sparse_aout
|
||||
atf_add_test_case trunc_aout
|
||||
|
||||
}
|
@ -38,9 +38,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
main(void)
|
||||
{
|
||||
printf("succeeded\n");
|
||||
exit(0);
|
@ -1,4 +1,4 @@
|
||||
#! /bin/csh
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
echo succeeded
|
@ -1,70 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PROG= doexec
|
||||
MAN=
|
||||
|
||||
RP= ./${PROG}
|
||||
TD= ${.CURDIR}/tests
|
||||
|
||||
TESTSCRIPTS= nonexistshell devnullscript badinterplen goodscript \
|
||||
scriptarg scriptarg-nospace
|
||||
CLEANFILES= goodaout truncaout sparseaout empty ${TESTSCRIPTS}
|
||||
|
||||
all: ${PROG} goodaout ${TESTSCRIPTS}
|
||||
|
||||
.for x in ${TESTSCRIPTS}
|
||||
${x}: ${TD}/${x}
|
||||
${CP} ${TD}/${x} .
|
||||
chmod +x ${x}
|
||||
.endfor
|
||||
|
||||
regress: test-empty test-nonexist test-nonexistshell \
|
||||
test-devnullscript test-badinterplen test-goodscript \
|
||||
test-scriptarg test-scriptarg-nospace test-goodaout \
|
||||
test-truncaout test-sparseaout
|
||||
|
||||
test-empty: ${PROG}
|
||||
rm -f empty
|
||||
touch empty
|
||||
chmod +x empty
|
||||
${RP} empty | grep 'Exec format error'
|
||||
|
||||
test-nonexist: ${PROG}
|
||||
${RP} ${TD}/nonexistent | grep 'No such file or directory'
|
||||
|
||||
test-nonexistshell: ${PROG} nonexistshell
|
||||
${RP} nonexistshell | grep 'No such file or directory'
|
||||
|
||||
test-devnullscript: ${PROG} devnullscript
|
||||
${RP} devnullscript | grep 'Permission denied'
|
||||
|
||||
test-badinterplen: ${PROG} badinterplen
|
||||
${RP} badinterplen | grep 'No such file or directory'
|
||||
|
||||
test-goodscript: ${PROG} goodscript
|
||||
${RP} goodscript | grep 'succeeded'
|
||||
|
||||
test-scriptarg: ${PROG} scriptarg
|
||||
${RP} scriptarg 2>&1 | grep '+ echo succeeded'
|
||||
|
||||
test-scriptarg-nospace: ${PROG} scriptarg-nospace
|
||||
${RP} scriptarg-nospace 2>&1 | grep '+ echo succeeded'
|
||||
|
||||
goodaout: ${TD}/goodaout.c
|
||||
${CC} -static -o ${.TARGET} ${TD}/goodaout.c
|
||||
|
||||
test-goodaout: ${PROG} goodaout
|
||||
${RP} goodaout | grep 'succeeded'
|
||||
|
||||
test-truncaout: ${PROG} goodaout
|
||||
truncate -s 16 truncaout
|
||||
chmod a+x truncaout
|
||||
${RP} truncaout | grep 'Exec format error'
|
||||
|
||||
test-sparseaout: ${PROG}
|
||||
/bin/rm -rf sparseaout
|
||||
truncate -s 20480 sparseaout
|
||||
chmod a+x sparseaout
|
||||
${RP} sparseaout | grep 'Exec format error'
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
cmd="./`basename $0 .t`"
|
||||
|
||||
make >/dev/null 2>&1
|
||||
|
||||
tests="test-empty test-nonexist test-nonexistshell \
|
||||
test-devnullscript test-badinterplen test-goodscript \
|
||||
test-scriptarg test-scriptarg-nospace test-goodaout \
|
||||
test-truncaout test-sparseaout"
|
||||
|
||||
n=0
|
||||
|
||||
echo "1..11"
|
||||
|
||||
for atest in ${tests}
|
||||
do
|
||||
n=`expr ${n} + 1`
|
||||
if make ${atest}
|
||||
then
|
||||
echo "ok ${n} - ${atest}"
|
||||
else
|
||||
echo "not ok ${n} - ${atest}"
|
||||
fi
|
||||
done
|
Loading…
x
Reference in New Issue
Block a user