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