xref: /netbsd-src/tests/lib/librumpclient/t_exec.sh (revision 3a37f06f8b61fa76e81c890ba8bbc8b4f67b4a1f)
1*3a37f06fSmartin#       $NetBSD: t_exec.sh,v 1.12 2020/11/08 08:54:50 martin Exp $
2fd59a0e4Spooka#
3fd59a0e4Spooka# Copyright (c) 2011 The NetBSD Foundation, Inc.
4fd59a0e4Spooka# All rights reserved.
5fd59a0e4Spooka#
6fd59a0e4Spooka# Redistribution and use in source and binary forms, with or without
7fd59a0e4Spooka# modification, are permitted provided that the following conditions
8fd59a0e4Spooka# are met:
9fd59a0e4Spooka# 1. Redistributions of source code must retain the above copyright
10fd59a0e4Spooka#    notice, this list of conditions and the following disclaimer.
11fd59a0e4Spooka# 2. Redistributions in binary form must reproduce the above copyright
12fd59a0e4Spooka#    notice, this list of conditions and the following disclaimer in the
13fd59a0e4Spooka#    documentation and/or other materials provided with the distribution.
14fd59a0e4Spooka#
15fd59a0e4Spooka# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16fd59a0e4Spooka# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17fd59a0e4Spooka# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18fd59a0e4Spooka# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19fd59a0e4Spooka# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20fd59a0e4Spooka# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21fd59a0e4Spooka# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22fd59a0e4Spooka# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23fd59a0e4Spooka# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24fd59a0e4Spooka# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25fd59a0e4Spooka# POSSIBILITY OF SUCH DAMAGE.
26fd59a0e4Spooka#
27fd59a0e4Spooka
2848e354a3Sbadrumpsrv='rump_server -lrumpnet -lrumpnet_net -lrumpnet_netinet'
29fd59a0e4Spookaexport RUMP_SERVER=unix://csock
305c6cde8aSpookaexport RUMPHIJACK_RETRYCONNECT='die'
31fd59a0e4Spooka
32fd59a0e4Spookaatf_test_case noexec cleanup
33fd59a0e4Spookanoexec_head()
34fd59a0e4Spooka{
35fd59a0e4Spooka        atf_set "descr" "check that we see what we expect without exec"
36fd59a0e4Spooka}
37fd59a0e4Spooka
38fd59a0e4Spookanoexec_body()
39fd59a0e4Spooka{
40fd59a0e4Spooka
41fd59a0e4Spooka	atf_check -s exit:0 ${rumpsrv} ${RUMP_SERVER}
429f22773cSpooka	atf_check -s exit:0 env $(atf_get_srcdir)/h_exec
43828eb913Spooka	atf_check -s exit:0 -o save:sstat.out rump.sockstat -n
44fd59a0e4Spooka	atf_check -s exit:0 -o match:'^root.*h_exec.*tcp.*\*\.1234' \
45fd59a0e4Spooka	    sed -n 2p sstat.out
46fd59a0e4Spooka	atf_check -s exit:0 -o match:'^root.*h_exec.*tcp.*\*\.2345' \
47fd59a0e4Spooka	    sed -n 3p sstat.out
48fd59a0e4Spooka}
49fd59a0e4Spooka
50fd59a0e4Spookanoexec_cleanup()
51fd59a0e4Spooka{
52fd59a0e4Spooka	rump.halt
53fd59a0e4Spooka}
54fd59a0e4Spooka
55fd59a0e4Spookaatf_test_case exec cleanup
56fd59a0e4Spookaexec_head()
57fd59a0e4Spooka{
58fd59a0e4Spooka        atf_set "descr" "check that client names changes after exec"
59fd59a0e4Spooka}
60fd59a0e4Spooka
61fd59a0e4Spookaexec_body()
62fd59a0e4Spooka{
63fd59a0e4Spooka
64fd59a0e4Spooka	atf_check -s exit:0 ${rumpsrv} ${RUMP_SERVER}
65daf96a00Spooka	atf_check -s exit:0 $(atf_get_srcdir)/h_exec $(atf_get_srcdir)/h_exec
66828eb913Spooka	atf_check -s exit:0 -o save:sstat.out rump.sockstat -n
67fd59a0e4Spooka	atf_check -s exit:0 -o match:'^root.*h_ution.*tcp.*\*\.1234' \
68fd59a0e4Spooka	    sed -n 2p sstat.out
69fd59a0e4Spooka	atf_check -s exit:0 -o match:'^root.*h_ution.*tcp.*\*\.2345' \
70fd59a0e4Spooka	    sed -n 3p sstat.out
71fd59a0e4Spooka}
72fd59a0e4Spooka
73fd59a0e4Spookaexec_cleanup()
74fd59a0e4Spooka{
75fd59a0e4Spooka	rump.halt
76fd59a0e4Spooka}
77fd59a0e4Spooka
7836823968Spookaatf_test_case cloexec cleanup
7936823968Spookacloexec_head()
8036823968Spooka{
8136823968Spooka        atf_set "descr" "check that FD_CLOEXEC works"
8236823968Spooka}
8336823968Spooka
8436823968Spookacloexec_body()
8536823968Spooka{
8636823968Spooka
8736823968Spooka	atf_check -s exit:0 ${rumpsrv} ${RUMP_SERVER}
889f22773cSpooka	atf_check -s exit:0  \
89daf96a00Spooka	    $(atf_get_srcdir)/h_exec $(atf_get_srcdir)/h_exec cloexec1
90828eb913Spooka	atf_check -s exit:0 -o save:sstat.out rump.sockstat -n
9136823968Spooka	atf_check -s exit:0 -o inline:'2\n' sed -n '$=' sstat.out
9236823968Spooka	atf_check -s exit:0 -o match:'^root.*h_ution.*tcp.*\*\.2345' \
9336823968Spooka	    sed -n 2p sstat.out
9436823968Spooka}
9536823968Spooka
9636823968Spookacloexec_cleanup()
9736823968Spooka{
9836823968Spooka	rump.halt
9936823968Spooka}
10036823968Spooka
1011a011130Spookaatf_test_case vfork cleanup
1021a011130Spookavfork_head()
1031a011130Spooka{
1041a011130Spooka        atf_set "descr" "test rumpclient_vfork()"
1051a011130Spooka}
1061a011130Spooka
1071a011130Spookavfork_body()
1081a011130Spooka{
1091a011130Spooka
1101a011130Spooka	atf_check -s exit:0 ${rumpsrv} ${RUMP_SERVER}
1111a011130Spooka	atf_check -s exit:0  \
1121a011130Spooka	    $(atf_get_srcdir)/h_exec $(atf_get_srcdir)/h_exec vfork_please
113828eb913Spooka	atf_check -s exit:0 -o save:sstat.out rump.sockstat -n
1141a011130Spooka	atf_check -s exit:0 -o inline:'5\n' sed -n '$=' sstat.out
1151a011130Spooka	atf_check -s exit:0 -o match:'^root.*h_ution.*tcp.*\*\.1234' \
1161a011130Spooka	    cat sstat.out
1171a011130Spooka	atf_check -s exit:0 -o match:'^root.*h_ution.*tcp.*\*\.2345' \
1181a011130Spooka	    cat sstat.out
1191a011130Spooka	atf_check -s exit:0 -o match:'^root.*fourchette.*tcp.*\*\.1234' \
1201a011130Spooka	    cat sstat.out
1211a011130Spooka	atf_check -s exit:0 -o match:'^root.*fourchette.*tcp.*\*\.2345' \
1221a011130Spooka	    cat sstat.out
1231a011130Spooka}
1241a011130Spooka
1251a011130Spookavfork_cleanup()
1261a011130Spooka{
1271a011130Spooka	rump.halt
1281a011130Spooka}
1291a011130Spooka
13046dfa511Spookaatf_test_case threxec cleanup
13146dfa511Spookathrexec_head()
13246dfa511Spooka{
13346dfa511Spooka	atf_set "descr" "check that threads are killed before exec continues"
13446dfa511Spooka}
13546dfa511Spooka
13646dfa511Spookathrexec_body()
13746dfa511Spooka{
138*3a37f06fSmartin	# atf_skip "PR 55338: triggers a scheduler bug"
13946dfa511Spooka	atf_check -s exit:0 rump_server ${RUMP_SERVER}
14046dfa511Spooka	atf_check -s exit:0 $(atf_get_srcdir)/h_execthr
14146dfa511Spooka}
14246dfa511Spooka
14346dfa511Spookathrexec_cleanup()
14446dfa511Spooka{
14546dfa511Spooka	rump.halt
14646dfa511Spooka}
147fd59a0e4Spooka
148fd59a0e4Spookaatf_init_test_cases()
149fd59a0e4Spooka{
150fd59a0e4Spooka	atf_add_test_case noexec
151fd59a0e4Spooka	atf_add_test_case exec
15236823968Spooka	atf_add_test_case cloexec
1531a011130Spooka	atf_add_test_case vfork
15446dfa511Spooka	atf_add_test_case threxec
155fd59a0e4Spooka}
156