@@ -934,6 +934,80 @@ def test_insert_and_reschedule(normal_user_client: TestClient):
934934 }
935935
936936
937+ ## test edge case for rescheduling
938+
939+
940+ def test_reschedule_job_attr_update (normal_user_client : TestClient ):
941+ job_definitions = [TEST_JDL ] * 15
942+
943+ r = normal_user_client .post ("/api/jobs/jdl" , json = job_definitions )
944+ assert r .status_code == 200 , r .json ()
945+ assert len (r .json ()) == len (job_definitions )
946+
947+ submitted_job_ids = sorted ([job_dict ["JobID" ] for job_dict in r .json ()])
948+
949+ # Test /jobs/reschedule and
950+ # test max_reschedule
951+
952+ max_resched = 3
953+
954+ fail_resched_ids = submitted_job_ids [0 :5 ]
955+ good_resched_ids = list (set (submitted_job_ids ) - set (fail_resched_ids ))
956+
957+ for i in range (max_resched ):
958+ r = normal_user_client .post (
959+ "/api/jobs/reschedule" ,
960+ params = {"job_ids" : fail_resched_ids },
961+ )
962+ assert r .status_code == 200 , r .json ()
963+ result = r .json ()
964+ successful_results = result ["success" ]
965+ for jid in fail_resched_ids :
966+ assert str (jid ) in successful_results , result
967+ assert successful_results [str (jid )]["Status" ] == JobStatus .RECEIVED
968+ assert successful_results [str (jid )]["MinorStatus" ] == "Job Rescheduled"
969+ assert successful_results [str (jid )]["RescheduleCounter" ] == i + 1
970+
971+ for i in range (max_resched ):
972+ r = normal_user_client .post (
973+ "/api/jobs/reschedule" ,
974+ params = {"job_ids" : submitted_job_ids },
975+ )
976+ assert r .status_code == 200 , r .json ()
977+ result = r .json ()
978+ successful_results = result ["success" ]
979+ failed_results = result ["failed" ]
980+ for jid in good_resched_ids :
981+ assert str (jid ) in successful_results , result
982+ assert successful_results [str (jid )]["Status" ] == JobStatus .RECEIVED
983+ assert successful_results [str (jid )]["MinorStatus" ] == "Job Rescheduled"
984+ assert successful_results [str (jid )]["RescheduleCounter" ] == i + 1
985+ for jid in fail_resched_ids :
986+ assert str (jid ) in failed_results , result
987+ # assert successful_results[jid]["Status"] == JobStatus.RECEIVED
988+ # assert successful_results[jid]["MinorStatus"] == "Job Rescheduled"
989+ # assert successful_results[jid]["RescheduleCounter"] == i + 1
990+
991+ r = normal_user_client .post (
992+ "/api/jobs/reschedule" ,
993+ params = {"job_ids" : submitted_job_ids },
994+ )
995+ assert (
996+ r .status_code != 200
997+ ), f"Rescheduling more than { max_resched } times should have failed by now { r .json ()} "
998+ assert r .json () == {
999+ "detail" : {
1000+ "success" : [],
1001+ "failed" : {
1002+ str (i ): {
1003+ "detail" : f"Maximum number of reschedules exceeded ({ max_resched } )"
1004+ }
1005+ for i in good_resched_ids + fail_resched_ids
1006+ },
1007+ }
1008+ }
1009+
1010+
9371011# Test delete job
9381012
9391013
0 commit comments