@@ -615,6 +615,113 @@ test_expect_success 'flux job list all via t_depend (3)' '
615615 test $(cat list_constraint_all3.out | wc -l) -eq ${numlines}
616616'
617617
618+ #
619+ # nodelist / hostlist constraint filtering
620+ #
621+
622+ # N.B. all failed and timeout jobs we explicitly ran on node0, so
623+ # tests below don't test against node0 to make things easier.
624+
625+ # N.B. failed.ids are jobs that failed after running, thus will have
626+ # had a node assigned. timeout.ids obviously ran on a node, but timed
627+ # out.
628+ test_expect_success ' flux job list all jobs that ran on any node (1)' '
629+ constraint="{ and: [ {hostlist:[\"node[0-3]\"]} ] }" &&
630+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
631+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist1.out &&
632+ numlines=$(cat completed.ids running.ids failed.ids timeout.ids | wc -l) &&
633+ test $(cat constraint_hostlist1.out | wc -l) -eq ${numlines}
634+ '
635+
636+ test_expect_success ' flux job list all jobs that ran on any node (2)' '
637+ constraint="{ and: [ {hostlist:[\"node[2-3]\", \"node1\", \"node0\"]} ] }" &&
638+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
639+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist2.out &&
640+ numlines=$(cat completed.ids running.ids failed.ids timeout.ids | wc -l) &&
641+ test $(cat constraint_hostlist2.out | wc -l) -eq ${numlines}
642+ '
643+
644+ # We evenly distributed non-bad jobs on nodes, so should be half of the jobs
645+ test_expect_success ' flux job list all jobs that ran on nodes[1-2] (1)' '
646+ constraint="{ and: [ {hostlist:[\"node[1-2]\"]} ] }" &&
647+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
648+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist3.out &&
649+ numlines=$(expr $(cat completed.ids running.ids | wc -l) / 2) &&
650+ test $(cat constraint_hostlist3.out | wc -l) -eq ${numlines}
651+ '
652+
653+ # We evenly distributed non-bad jobs on nodes, so should be half of the jobs
654+ test_expect_success ' flux job list all jobs that ran on nodes[1-2] (2)' '
655+ constraint="{ and: [ {hostlist:[\"node1\", \"node2\"]} ] }" &&
656+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
657+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist4.out &&
658+ numlines=$(expr $(cat completed.ids running.ids | wc -l) / 2) &&
659+ test $(cat constraint_hostlist4.out | wc -l) -eq ${numlines}
660+ '
661+
662+ # We evenly distributed non-bad jobs on nodes, so should be quarter of the jobs
663+ test_expect_success ' flux job list all jobs that ran on node3' '
664+ constraint="{ and: [ {hostlist:[\"node3\"]} ] }" &&
665+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
666+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist5.out &&
667+ numlines=$(expr $(cat completed.ids running.ids | wc -l) / 4) &&
668+ test $(cat constraint_hostlist5.out | wc -l) -eq ${numlines}
669+ '
670+
671+ # We evenly distributed completed jobs on nodes, so should be quarter of the jobs
672+ test_expect_success ' flux job list completed jobs that ran on node3' '
673+ state=`${JOB_CONV} strtostate INACTIVE` &&
674+ constraint="{ and: [ {hostlist:[\"node3\"]}, {states:[${state}]} ] }" &&
675+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
676+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist6.out &&
677+ numlines=$(expr $(cat completed.ids | wc -l) / 4) &&
678+ test $(cat constraint_hostlist6.out | wc -l) -eq ${numlines}
679+ '
680+
681+ # We evenly distributed running jobs on nodes, so should be quarter of the jobs
682+ test_expect_success ' flux job list running jobs that ran on node3' '
683+ state=`${JOB_CONV} strtostate RUNNING` &&
684+ constraint="{ and: [ {hostlist:[\"node3\"]}, {states:[${state}]} ] }" &&
685+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
686+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist7.out &&
687+ numlines=$(expr $(cat running.ids | wc -l) / 4) &&
688+ test $(cat constraint_hostlist7.out | wc -l) -eq ${numlines}
689+ '
690+
691+ # We evenly distributed running jobs on nodes, so should be half of the jobs
692+ # For this test, get start time of first running job
693+ test_expect_success ' flux job list of running jobs that ran on node[1-2] after certain time (1)' '
694+ id=`tail -n1 running.ids` &&
695+ t_submit=`flux job list-ids ${id} | $jq .t_submit` &&
696+ constraint="{ and: [ {hostlist:[\"node[1-2]\"]}, {t_submit:[\">=${t_submit}\"]} ] }" &&
697+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
698+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist8.out &&
699+ numlines=$(expr $(cat running.ids | wc -l) / 2) &&
700+ test $(cat constraint_hostlist8.out | wc -l) -eq ${numlines}
701+ '
702+
703+ # We evenly distributed running jobs on nodes, so should be half of the jobs
704+ # For this test, get last inactive time of completed jobs
705+ test_expect_success ' flux job list of running jobs that ran on node[1-2] after certain time (2)' '
706+ id=`head -n1 completed.ids` &&
707+ t_inactive=`flux job list-ids ${id} | $jq .t_inactive` &&
708+ constraint="{ and: [ {hostlist:[\"node[1-2]\"]}, {t_submit:[\">${t_inactive}\"]} ] }" &&
709+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
710+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist9.out &&
711+ numlines=$(expr $(cat running.ids | wc -l) / 2) &&
712+ test $(cat constraint_hostlist9.out | wc -l) -eq ${numlines}
713+ '
714+
715+ # We evenly distributed completed & running jobs on nodes, so should be half of the jobs
716+ test_expect_success ' flux job list of all jobs that ran on node[1-2] after certain time' '
717+ id=`head -n1 completed.ids` &&
718+ constraint="{ and: [ {hostlist:[\"node[1-2]\"]}, {t_submit:[\">5\"]} ] }" &&
719+ $jq -j -c -n "{max_entries:1000, attrs:[], constraint:${constraint}}" \
720+ | $RPC job-list.list | $jq .jobs | $jq -c ' .[]' | $jq .id > constraint_hostlist9.out &&
721+ numlines=$(expr $(cat completed.ids running.ids | wc -l) / 2) &&
722+ test $(cat constraint_hostlist9.out | wc -l) -eq ${numlines}
723+ '
724+
618725#
619726# legacy RPC tests
620727#
0 commit comments