Skip to content

Commit

Permalink
testsuite: cover job-list.list-ids state option
Browse files Browse the repository at this point in the history
Problem: There is no coverage of job-list.list-ids and its
ability to return only after a specific job state has been reached.

Add coverage in t2260-job-list.t.
  • Loading branch information
chu11 committed May 27, 2023
1 parent 51c69c5 commit 732db00
Showing 1 changed file with 140 additions and 0 deletions.
140 changes: 140 additions & 0 deletions t/t2260-job-list.t
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,27 @@ test_expect_success 'flux job list-ids fails with one bad ID out of several' '
grep "No such file or directory" list_ids_error4.out
'

test_expect_success 'flux job list-ids works with --wait-state' '
id=`head -n 1 pending.ids` &&
flux job list-ids --wait-state=sched $id > /dev/null &&
id=`head -n 1 running.ids` &&
flux job list-ids --wait-state=sched $id > /dev/null &&
flux job list-ids --wait-state=run $id > /dev/null &&
id=`head -n 1 completed.ids` &&
flux job list-ids --wait-state=sched $id > /dev/null &&
flux job list-ids --wait-state=run $id > /dev/null &&
flux job list-ids --wait-state=inactive $id > /dev/null &&
id=`head -n 1 canceled.ids` &&
flux job list-ids --wait-state=sched $id > /dev/null &&
flux job list-ids --wait-state=run $id > /dev/null &&
flux job list-ids --wait-state=inactive $id > /dev/null
'

test_expect_success 'flux job list-ids fail with bad --wait-state' '
id=`head -n 1 pending.ids` &&
test_must_fail flux job list-ids --wait-state=foo $id > /dev/null
'

# In order to test potential racy behavior, use job state pause/unpause to pause
# the handling of job state transitions from the job-manager.
#
Expand Down Expand Up @@ -613,6 +634,125 @@ test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids (same id)
cat list_id_wait3B.out | jq -e ".id == ${jobid}"
'

test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (depend)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=depend ${jobid} > list_id_wait_state_depend.out &
pid=$!
wait_idsync 1 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
wait $pid &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
cat list_id_wait_state_depend.out | jq -e ".id == ${jobid}"
'

test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (run)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_run.out &
pid=$!
wait_idsync 1 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
wait $pid &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
cat list_id_wait_state_run.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_run.out | jq .state | ${JOB_CONV} statetostr > list_id_state_run.out &&
grep RUN list_id_state_run.out
'

test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (cleanup)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=cleanup ${jobid} > list_id_wait_state_cleanup.out &
pid=$!
wait_idsync 1 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
wait $pid &&
cat list_id_wait_state_cleanup.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_cleanup.out | jq .state | ${JOB_CONV} statetostr > list_id_state_cleanup.out &&
grep CLEANUP list_id_state_cleanup.out
'

test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (inactive)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=inactive ${jobid} > list_id_wait_state_inactive.out &
pid=$!
wait_idsync 1 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
wait $pid &&
cat list_id_wait_state_inactive.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_inactive.out | jq .state | ${JOB_CONV} statetostr > list_id_state_inactive.out &&
grep INACTIVE list_id_state_inactive.out
'

# The job should never reach job state b/c we cancel it before it can
# run, so will return when job becomes inactive
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (run - cancel)' '
${RPC} job-list.job-state-pause 0 </dev/null
flux queue stop &&
jobid=`flux submit sleep inf | flux job id`
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_run_cancel.out &
pid=$!
wait_idsync 1 &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
flux queue start &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
wait $pid &&
cat list_id_wait_state_run_cancel.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_run_cancel.out | jq .state | ${JOB_CONV} statetostr > list_id_state_run_cancel.out &&
grep INACTIVE list_id_state_run_cancel.out
'

# Can't guarantee output order, so grep for jobid instead of match jobid
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids state (different ids)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid1=`flux submit --wait-event=start sleep inf | flux job id`
jobid2=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=run ${jobid1} ${jobid2} > list_id_wait_state_different_ids.out &
pid=$!
wait_idsync 2 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
wait $pid &&
flux cancel $jobid1 $jobid2 &&
fj_wait_event $jobid1 clean >/dev/null &&
fj_wait_event $jobid2 clean >/dev/null &&
grep ${jobid1} list_id_wait_state_different_ids.out &&
grep ${jobid2} list_id_wait_state_different_ids.out &&
head -n1 list_id_wait_state_different_ids.out | jq .state | ${JOB_CONV} statetostr > list_id_state_different_idsA.out &&
tail -n1 list_id_wait_state_different_ids.out | jq .state | ${JOB_CONV} statetostr > list_id_state_different_idsB.out &&
grep RUN list_id_state_different_idsA.out &&
grep RUN list_id_state_different_idsB.out
'

test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids state (same id)' '
${RPC} job-list.job-state-pause 0 </dev/null
jobid=`flux submit --wait-event=start sleep inf | flux job id`
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_same_idsA.out &
pid1=$!
flux job list-ids --wait-state=cleanup ${jobid} > list_id_wait_state_same_idsB.out &
pid2=$!
wait_idsync 1 &&
${RPC} job-list.job-state-unpause 0 </dev/null &&
wait ${pid1} &&
flux cancel $jobid &&
fj_wait_event $jobid clean >/dev/null &&
wait ${pid2} &&
cat list_id_wait_state_same_idsA.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_same_idsB.out | jq -e ".id == ${jobid}" &&
cat list_id_wait_state_same_idsA.out | jq .state | ${JOB_CONV} statetostr > list_id_state_same_idsA.out &&
grep RUN list_id_state_same_idsA.out &&
cat list_id_wait_state_same_idsB.out | jq .state | ${JOB_CONV} statetostr > list_id_state_same_idsB.out &&
grep CLEANUP list_id_state_same_idsB.out
'

#
# job list timing
#
Expand Down

0 comments on commit 732db00

Please sign in to comment.