Skip to content

Commit 4b3834f

Browse files
chu11mergify[bot]
authored andcommitted
testsuite: add systemd system instance tests
1 parent 1d129f1 commit 4b3834f

File tree

3 files changed

+135
-0
lines changed

3 files changed

+135
-0
lines changed

t/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ EXTRA_DIST= \
270270
dist_check_SCRIPTS = \
271271
$(TESTSCRIPTS) \
272272
system/0001-basic.t \
273+
system/0002-job-exec-sdexec-basic.t \
274+
system/0003-instance-restart.t \
273275
issues/t0441-kvs-put-get.sh \
274276
issues/t0505-msg-handler-reg.lua \
275277
issues/t0821-kvs-segfault.sh \
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#
2+
# Basic job-exec sdexec / systemd tests
3+
#
4+
5+
test_expect_success 'job-exec: setup system instance to use systemd' '
6+
method=$(sudo -u flux flux config get --default=notset exec.method)
7+
if test "${method}" != "systemd"
8+
then
9+
if ! sudo test -f /etc/flux/system/conf.d/exec.toml
10+
then
11+
sudo touch /etc/flux/system/conf.d/exec.toml
12+
sudo bash -c "echo [exec] >> /etc/flux/system/conf.d/exec.toml"
13+
fi
14+
sudo bash -c "echo method = \\\"systemd\\\" >> /etc/flux/system/conf.d/exec.toml"
15+
sudo systemctl restart flux
16+
until flux mini run hostname 2>/dev/null; do
17+
sleep 1
18+
done
19+
fi
20+
'
21+
test_expect_success 'job-exec: verify system instance using systemd' '
22+
jobid=$(flux mini submit sleep 100) &&
23+
flux job wait-event -v -t 60 $jobid start &&
24+
jobiddec=`flux job id --to=dec $jobid` &&
25+
rank=`flux getattr rank` &&
26+
sudo -u flux systemctl list-units --user | grep "flux-sdexec-${rank}-${jobiddec}" &&
27+
flux job cancel ${jobid}
28+
'
29+
test_expect_success 'job-exec: simple job exits 0 on success' '
30+
jobid=$(flux mini submit /bin/true) &&
31+
test_expect_code 0 flux job status $jobid
32+
'
33+
test_expect_success 'job-exec: simple job exits 1 on failure' '
34+
jobid=$(flux mini submit /bin/false) &&
35+
test_expect_code 1 flux job status -vv $jobid
36+
'
37+
test_expect_success 'job-exec: simple job exits 127 on bad command' '
38+
jobid=$(flux mini submit /bin/foobar) &&
39+
test_expect_code 127 flux job status $jobid
40+
'
41+
# When sending a signal very shortly after a job is started, there is
42+
# a small race where we don't know where the signal is actually sent.
43+
# It could be sent to the imp or job shell before actual job tasks are
44+
# started. To ensure consistent test results, wait for shell.start in
45+
# guest.exec.eventlog.
46+
test_expect_success 'job-exec: simple job exits 138 on signaled job' '
47+
jobid=$(flux mini submit sleep 30) &&
48+
flux job wait-event -t 10 ${jobid} start &&
49+
flux job wait-event -p guest.exec.eventlog -t 10 ${jobid} shell.start &&
50+
flux job kill --signal=SIGUSR1 $jobid &&
51+
test_expect_code 138 flux job status $jobid
52+
'
53+
# Similar to above test, wait for shell.start in guest.exec.eventlog
54+
# to ensure consistent test results. The job cancel will send a
55+
# SIGTERM to the shell/tasks.
56+
test_expect_success 'job-exec: simple job can be canceled' '
57+
jobid=$(flux mini submit sleep 30) &&
58+
flux job wait-event -t 10 ${jobid} start &&
59+
flux job wait-event -p guest.exec.eventlog -t 10 ${jobid} shell.start &&
60+
flux job cancel $jobid &&
61+
flux job wait-event -t 10 ${jobid} clean &&
62+
test_expect_code 143 flux job status $jobid
63+
'
64+
test_expect_success 'job-exec: job fails correctly if user service not setup' '
65+
jobid=$(flux mini submit \
66+
--setattr=system.exec.sd.test_exec_fail=true \
67+
hostname) &&
68+
flux job wait-event -v -t 60 $jobid clean &&
69+
flux job eventlog ${jobid} | grep "test sdprocess_exec" \
70+
| grep "Operation not permitted"
71+
'

t/system/0003-instance-restart.t

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#
2+
# Ensure jobs and scheduling continue to work if instance is restarted
3+
#
4+
5+
test_expect_success 'job-exec: setup system instance to use systemd' '
6+
method=$(sudo -u flux flux config get --default=notset exec.method)
7+
if test "${method}" != "systemd"
8+
then
9+
if ! sudo test -f /etc/flux/system/conf.d/exec.toml
10+
then
11+
sudo touch /etc/flux/system/conf.d/exec.toml
12+
sudo bash -c "echo [exec] >> /etc/flux/system/conf.d/exec.toml"
13+
fi
14+
sudo bash -c "echo method = \\\"systemd\\\" >> /etc/flux/system/conf.d/exec.toml"
15+
sudo systemctl restart flux
16+
until flux mini run hostname 2>/dev/null; do
17+
sleep 1
18+
done
19+
fi
20+
'
21+
test_expect_success 'job-exec: verify system instance using systemd' '
22+
jobid=$(flux mini submit sleep 100) &&
23+
flux job wait-event -v -t 60 $jobid start &&
24+
jobiddec=`flux job id --to=dec $jobid` &&
25+
rank=`flux getattr rank` &&
26+
sudo -u flux systemctl list-units --user | grep "flux-sdexec-${rank}-${jobiddec}" &&
27+
flux job cancel ${jobid}
28+
'
29+
test_expect_success 'job-exec: submit two jobs that consumes all resources' '
30+
NCORES=$(flux resource list -s up -no "{ncores}") &&
31+
flux mini submit -n ${NCORES} sleep 1000 > jobid1 &&
32+
flux job wait-event $(cat jobid1) start &&
33+
flux mini submit -n ${NCORES} sleep 1000 > jobid2
34+
'
35+
test_expect_success 'job-exec: verify jobs listed and in expected state' '
36+
flux jobs --filter=running | grep $(cat jobid1) &&
37+
flux jobs --filter=pending | grep $(cat jobid2)
38+
'
39+
test_expect_success 'job-exec: restart flux' '
40+
sudo systemctl restart flux
41+
'
42+
test_expect_success 'job-exec: wait for flux to finish setting up' '
43+
until flux jobs | grep $(cat jobid1) 2>/dev/null; do
44+
sleep 1
45+
done
46+
'
47+
test_expect_success 'job-exec: verify jobs still listed and in expected state' '
48+
flux jobs --filter=running | grep $(cat jobid1) &&
49+
flux jobs --filter=pending | grep $(cat jobid2)
50+
'
51+
test_expect_success 'job-exec: cancel job1 and make sure job2 will run' '
52+
flux job cancel $(cat jobid1) &&
53+
flux job wait-event -t 60 $(cat jobid1) clean &&
54+
flux job wait-event -t 60 $(cat jobid2) start
55+
'
56+
test_expect_success 'job-exec: verify jobs listed and in new expected state' '
57+
flux jobs --filter=canceled | grep $(cat jobid1) &&
58+
flux jobs --filter=running | grep $(cat jobid2)
59+
'
60+
test_expect_success 'job-exec: cancel jobs' '
61+
flux job cancel $(cat jobid2)
62+
'

0 commit comments

Comments
 (0)