Skip to content

Commit b658aa9

Browse files
committed
testsuite: cover job-list.list-ids state option
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.
1 parent 0d912ab commit b658aa9

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

t/t2260-job-list.t

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,27 @@ test_expect_success 'flux job list-ids fails with one bad ID out of several' '
548548
grep "No such file or directory" list_ids_error4.out
549549
'
550550

551+
test_expect_success 'flux job list-ids works with --wait-state' '
552+
id=`head -n 1 pending.ids` &&
553+
flux job list-ids --wait-state=sched $id > /dev/null &&
554+
id=`head -n 1 running.ids` &&
555+
flux job list-ids --wait-state=sched $id > /dev/null &&
556+
flux job list-ids --wait-state=run $id > /dev/null &&
557+
id=`head -n 1 completed.ids` &&
558+
flux job list-ids --wait-state=sched $id > /dev/null &&
559+
flux job list-ids --wait-state=run $id > /dev/null &&
560+
flux job list-ids --wait-state=inactive $id > /dev/null &&
561+
id=`head -n 1 canceled.ids` &&
562+
flux job list-ids --wait-state=sched $id > /dev/null &&
563+
flux job list-ids --wait-state=run $id > /dev/null &&
564+
flux job list-ids --wait-state=inactive $id > /dev/null
565+
'
566+
567+
test_expect_success 'flux job list-ids fail with bad --wait-state' '
568+
id=`head -n 1 pending.ids` &&
569+
test_must_fail flux job list-ids --wait-state=foo $id > /dev/null
570+
'
571+
551572
# In order to test potential racy behavior, use job state pause/unpause to pause
552573
# the handling of job state transitions from the job-manager.
553574
#
@@ -613,6 +634,125 @@ test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids (same id)
613634
cat list_id_wait3B.out | jq -e ".id == ${jobid}"
614635
'
615636

637+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (depend)' '
638+
${RPC} job-list.job-state-pause 0 </dev/null
639+
jobid=`flux submit --wait-event=start sleep inf | flux job id`
640+
flux job list-ids --wait-state=depend ${jobid} > list_id_wait_state_depend.out &
641+
pid=$!
642+
wait_idsync 1 &&
643+
${RPC} job-list.job-state-unpause 0 </dev/null &&
644+
wait $pid &&
645+
flux cancel $jobid &&
646+
fj_wait_event $jobid clean >/dev/null &&
647+
cat list_id_wait_state_depend.out | jq -e ".id == ${jobid}"
648+
'
649+
650+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (run)' '
651+
${RPC} job-list.job-state-pause 0 </dev/null
652+
jobid=`flux submit --wait-event=start sleep inf | flux job id`
653+
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_run.out &
654+
pid=$!
655+
wait_idsync 1 &&
656+
${RPC} job-list.job-state-unpause 0 </dev/null &&
657+
wait $pid &&
658+
flux cancel $jobid &&
659+
fj_wait_event $jobid clean >/dev/null &&
660+
cat list_id_wait_state_run.out | jq -e ".id == ${jobid}" &&
661+
cat list_id_wait_state_run.out | jq .state | ${JOB_CONV} statetostr > list_id_state_run.out &&
662+
grep RUN list_id_state_run.out
663+
'
664+
665+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (cleanup)' '
666+
${RPC} job-list.job-state-pause 0 </dev/null
667+
jobid=`flux submit --wait-event=start sleep inf | flux job id`
668+
flux job list-ids --wait-state=cleanup ${jobid} > list_id_wait_state_cleanup.out &
669+
pid=$!
670+
wait_idsync 1 &&
671+
${RPC} job-list.job-state-unpause 0 </dev/null &&
672+
flux cancel $jobid &&
673+
fj_wait_event $jobid clean >/dev/null &&
674+
wait $pid &&
675+
cat list_id_wait_state_cleanup.out | jq -e ".id == ${jobid}" &&
676+
cat list_id_wait_state_cleanup.out | jq .state | ${JOB_CONV} statetostr > list_id_state_cleanup.out &&
677+
grep CLEANUP list_id_state_cleanup.out
678+
'
679+
680+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (inactive)' '
681+
${RPC} job-list.job-state-pause 0 </dev/null
682+
jobid=`flux submit --wait-event=start sleep inf | flux job id`
683+
flux job list-ids --wait-state=inactive ${jobid} > list_id_wait_state_inactive.out &
684+
pid=$!
685+
wait_idsync 1 &&
686+
${RPC} job-list.job-state-unpause 0 </dev/null &&
687+
flux cancel $jobid &&
688+
fj_wait_event $jobid clean >/dev/null &&
689+
wait $pid &&
690+
cat list_id_wait_state_inactive.out | jq -e ".id == ${jobid}" &&
691+
cat list_id_wait_state_inactive.out | jq .state | ${JOB_CONV} statetostr > list_id_state_inactive.out &&
692+
grep INACTIVE list_id_state_inactive.out
693+
'
694+
695+
# The job should never reach job state b/c we cancel it before it can
696+
# run, so will return when job becomes inactive
697+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job id state (run - cancel)' '
698+
${RPC} job-list.job-state-pause 0 </dev/null
699+
flux queue stop &&
700+
jobid=`flux submit sleep inf | flux job id`
701+
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_run_cancel.out &
702+
pid=$!
703+
wait_idsync 1 &&
704+
flux cancel $jobid &&
705+
fj_wait_event $jobid clean >/dev/null &&
706+
flux queue start &&
707+
${RPC} job-list.job-state-unpause 0 </dev/null &&
708+
wait $pid &&
709+
cat list_id_wait_state_run_cancel.out | jq -e ".id == ${jobid}" &&
710+
cat list_id_wait_state_run_cancel.out | jq .state | ${JOB_CONV} statetostr > list_id_state_run_cancel.out &&
711+
grep INACTIVE list_id_state_run_cancel.out
712+
'
713+
714+
# Can't guarantee output order, so grep for jobid instead of match jobid
715+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids state (different ids)' '
716+
${RPC} job-list.job-state-pause 0 </dev/null
717+
jobid1=`flux submit --wait-event=start sleep inf | flux job id`
718+
jobid2=`flux submit --wait-event=start sleep inf | flux job id`
719+
flux job list-ids --wait-state=run ${jobid1} ${jobid2} > list_id_wait_state_different_ids.out &
720+
pid=$!
721+
wait_idsync 2 &&
722+
${RPC} job-list.job-state-unpause 0 </dev/null &&
723+
wait $pid &&
724+
flux cancel $jobid1 $jobid2 &&
725+
fj_wait_event $jobid1 clean >/dev/null &&
726+
fj_wait_event $jobid2 clean >/dev/null &&
727+
grep ${jobid1} list_id_wait_state_different_ids.out &&
728+
grep ${jobid2} list_id_wait_state_different_ids.out &&
729+
head -n1 list_id_wait_state_different_ids.out | jq .state | ${JOB_CONV} statetostr > list_id_state_different_idsA.out &&
730+
tail -n1 list_id_wait_state_different_ids.out | jq .state | ${JOB_CONV} statetostr > list_id_state_different_idsB.out &&
731+
grep RUN list_id_state_different_idsA.out &&
732+
grep RUN list_id_state_different_idsB.out
733+
'
734+
735+
test_expect_success NO_CHAIN_LINT 'flux job list-ids waits for job ids state (same id)' '
736+
${RPC} job-list.job-state-pause 0 </dev/null
737+
jobid=`flux submit --wait-event=start sleep inf | flux job id`
738+
flux job list-ids --wait-state=run ${jobid} > list_id_wait_state_same_idsA.out &
739+
pid1=$!
740+
flux job list-ids --wait-state=cleanup ${jobid} > list_id_wait_state_same_idsB.out &
741+
pid2=$!
742+
wait_idsync 1 &&
743+
${RPC} job-list.job-state-unpause 0 </dev/null &&
744+
wait ${pid1} &&
745+
flux cancel $jobid &&
746+
fj_wait_event $jobid clean >/dev/null &&
747+
wait ${pid2} &&
748+
cat list_id_wait_state_same_idsA.out | jq -e ".id == ${jobid}" &&
749+
cat list_id_wait_state_same_idsB.out | jq -e ".id == ${jobid}" &&
750+
cat list_id_wait_state_same_idsA.out | jq .state | ${JOB_CONV} statetostr > list_id_state_same_idsA.out &&
751+
grep RUN list_id_state_same_idsA.out &&
752+
cat list_id_wait_state_same_idsB.out | jq .state | ${JOB_CONV} statetostr > list_id_state_same_idsB.out &&
753+
grep CLEANUP list_id_state_same_idsB.out
754+
'
755+
616756
#
617757
# job list timing
618758
#

0 commit comments

Comments
 (0)