Integrate tools/regression/execve into the FreeBSD test suite as

tests/sys/kern/execve

MFC after: 1 week
This commit is contained in:
ngie 2015-04-27 07:22:18 +00:00
commit add5897136
14 changed files with 165 additions and 110 deletions

View File

@ -355,6 +355,8 @@
..
sys
kern
execve
..
..
netinet
..

View File

@ -10,4 +10,6 @@ LDADD.unix_seqpacket_test+= -lpthread
WARNS?= 5
TESTS_SUBDIRS+= execve
.include <bsd.test.mk>

View 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>

View File

@ -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, "");
}

View 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
}

View File

@ -38,9 +38,7 @@
#include <stdlib.h>
int
main(argc, argv)
int argc;
char *argv[];
main(void)
{
printf("succeeded\n");
exit(0);

View File

@ -1,4 +1,4 @@
#! /bin/csh
#!/bin/sh
# $FreeBSD$
echo succeeded

View File

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

View File

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