xref: /freebsd/tests/sys/kern/execve/execve_test.sh (revision bbf12e6f7fe0b7417e3afb3ae904d2301a96f91e)
1*bbf12e6fSEnji Cooper
2*bbf12e6fSEnji Cooperbad_interp_len_head()
3*bbf12e6fSEnji Cooper{
4*bbf12e6fSEnji Cooper	atf_set "descr" "Bad interpreter length"
5*bbf12e6fSEnji Cooper}
6*bbf12e6fSEnji Cooperbad_interp_len_body()
7*bbf12e6fSEnji Cooper{
8*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
9*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper bad_interp_len"
10*bbf12e6fSEnji Cooper}
11*bbf12e6fSEnji Cooper
12*bbf12e6fSEnji Cooperempty_head()
13*bbf12e6fSEnji Cooper{
14*bbf12e6fSEnji Cooper	atf_set "descr" "Empty file"
15*bbf12e6fSEnji Cooper}
16*bbf12e6fSEnji Cooperempty_body()
17*bbf12e6fSEnji Cooper{
18*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
19*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper empty"
20*bbf12e6fSEnji Cooper}
21*bbf12e6fSEnji Cooper
22*bbf12e6fSEnji Coopergood_aout_head()
23*bbf12e6fSEnji Cooper{
24*bbf12e6fSEnji Cooper	atf_set "descr" "Good a.out"
25*bbf12e6fSEnji Cooper}
26*bbf12e6fSEnji Coopergood_aout_body()
27*bbf12e6fSEnji Cooper{
28*bbf12e6fSEnji Cooper	atf_check -s exit:0 -e empty -o 'match:succeeded' \
29*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper ./good_aout"
30*bbf12e6fSEnji Cooper}
31*bbf12e6fSEnji Cooper
32*bbf12e6fSEnji Coopergood_script_head()
33*bbf12e6fSEnji Cooper{
34*bbf12e6fSEnji Cooper	atf_set "descr" "Good script"
35*bbf12e6fSEnji Cooper}
36*bbf12e6fSEnji Coopergood_script_body()
37*bbf12e6fSEnji Cooper{
38*bbf12e6fSEnji Cooper	atf_check -s exit:0 -e empty -o 'match:succeeded' \
39*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper good_script"
40*bbf12e6fSEnji Cooper}
41*bbf12e6fSEnji Cooper
42*bbf12e6fSEnji Coopernon_exist_head()
43*bbf12e6fSEnji Cooper{
44*bbf12e6fSEnji Cooper	atf_set "descr" "Non-existent file"
45*bbf12e6fSEnji Cooper}
46*bbf12e6fSEnji Coopernon_exist_body()
47*bbf12e6fSEnji Cooper{
48*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
49*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper non_exist"
50*bbf12e6fSEnji Cooper}
51*bbf12e6fSEnji Cooper
52*bbf12e6fSEnji Coopernon_exist_shell_head()
53*bbf12e6fSEnji Cooper{
54*bbf12e6fSEnji Cooper	atf_set "descr" "Non-existent shell"
55*bbf12e6fSEnji Cooper}
56*bbf12e6fSEnji Coopernon_exist_shell_body()
57*bbf12e6fSEnji Cooper{
58*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:No such file or directory' -o empty \
59*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper non_exist_shell"
60*bbf12e6fSEnji Cooper}
61*bbf12e6fSEnji Cooper
62*bbf12e6fSEnji Cooperscript_arg_head()
63*bbf12e6fSEnji Cooper{
64*bbf12e6fSEnji Cooper	atf_set "descr" "-x in the shebang"
65*bbf12e6fSEnji Cooper}
66*bbf12e6fSEnji Cooperscript_arg_body()
67*bbf12e6fSEnji Cooper{
68*bbf12e6fSEnji Cooper	atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
69*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper script_arg"
70*bbf12e6fSEnji Cooper}
71*bbf12e6fSEnji Cooper
72*bbf12e6fSEnji Cooperscript_arg_nospace_head()
73*bbf12e6fSEnji Cooper{
74*bbf12e6fSEnji Cooper	atf_set "descr" '-x in the shebang; no space between #! and /bin/sh'
75*bbf12e6fSEnji Cooper}
76*bbf12e6fSEnji Cooperscript_arg_nospace_body()
77*bbf12e6fSEnji Cooper{
78*bbf12e6fSEnji Cooper	atf_check -s exit:0 -e 'match:\+ echo succeeded' -o 'match:succeeded' \
79*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper script_arg_nospace"
80*bbf12e6fSEnji Cooper}
81*bbf12e6fSEnji Cooper
82*bbf12e6fSEnji Coopersparse_aout_head()
83*bbf12e6fSEnji Cooper{
84*bbf12e6fSEnji Cooper	atf_set "descr" 'Sparse file'
85*bbf12e6fSEnji Cooper}
86*bbf12e6fSEnji Coopersparse_aout_body()
87*bbf12e6fSEnji Cooper{
88*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
89*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper sparse_aout"
90*bbf12e6fSEnji Cooper}
91*bbf12e6fSEnji Cooper
92*bbf12e6fSEnji Coopertrunc_aout_head()
93*bbf12e6fSEnji Cooper{
94*bbf12e6fSEnji Cooper	atf_set "descr" 'Truncated file'
95*bbf12e6fSEnji Cooper}
96*bbf12e6fSEnji Coopertrunc_aout_body()
97*bbf12e6fSEnji Cooper{
98*bbf12e6fSEnji Cooper	atf_check -s exit:1 -e 'match:Exec format error' -o empty \
99*bbf12e6fSEnji Cooper	    -x "cd $(atf_get_srcdir) && ./execve_helper trunc_aout"
100*bbf12e6fSEnji Cooper}
101*bbf12e6fSEnji Cooper
102*bbf12e6fSEnji Cooperatf_init_test_cases()
103*bbf12e6fSEnji Cooper{
104*bbf12e6fSEnji Cooper	atf_add_test_case bad_interp_len
105*bbf12e6fSEnji Cooper	atf_add_test_case empty
106*bbf12e6fSEnji Cooper	atf_add_test_case good_aout
107*bbf12e6fSEnji Cooper	atf_add_test_case good_script
108*bbf12e6fSEnji Cooper	atf_add_test_case non_exist
109*bbf12e6fSEnji Cooper	atf_add_test_case non_exist_shell
110*bbf12e6fSEnji Cooper	atf_add_test_case script_arg
111*bbf12e6fSEnji Cooper	atf_add_test_case script_arg_nospace
112*bbf12e6fSEnji Cooper	atf_add_test_case sparse_aout
113*bbf12e6fSEnji Cooper	atf_add_test_case trunc_aout
114*bbf12e6fSEnji Cooper
115*bbf12e6fSEnji Cooper}
116