@@ -864,6 +864,148 @@ func TestSLOAwareRouter_MultipleRequests_DifferentPods(t *testing.T) {
864864 assert .NotEqual (t , queue1 , queue2 )
865865}
866866
867+ func TestSLOAwareRouter_AdmitRequest_NilRequest (t * testing.T ) {
868+ router := createTestRouter ()
869+ ctx := context .Background ()
870+ pods := []schedulingtypes.Pod {}
871+
872+ err := router .AdmitRequest (ctx , nil , pods )
873+
874+ assert .NoError (t , err , "Should return nil for nil request" )
875+ }
876+
877+ func TestSLOAwareRouter_AdmitRequest_NoContext (t * testing.T ) {
878+ router := createTestRouter ()
879+ ctx := context .Background ()
880+ request := createTestLLMRequest ("test" , 100 , 50 , true )
881+ pods := []schedulingtypes.Pod {}
882+
883+ // Don't set SLO context
884+ err := router .AdmitRequest (ctx , request , pods )
885+
886+ assert .NoError (t , err , "Should return nil when SLO context not found" )
887+ }
888+
889+ func TestSLOAwareRouter_AdmitRequest_HasValidPod (t * testing.T ) {
890+ router := createTestRouter ()
891+ ctx := context .Background ()
892+ request := createTestLLMRequest ("test" , 100 , 50 , true )
893+ pods := []schedulingtypes.Pod {}
894+
895+ // Create SLO context with valid pod
896+ sloCtx := newSLORequestContext (request )
897+ sloCtx .hasValidPod = true
898+ router .setSLOContextForRequest (request , sloCtx )
899+
900+ err := router .AdmitRequest (ctx , request , pods )
901+
902+ assert .NoError (t , err , "Should admit request when hasValidPod is true" )
903+ }
904+
905+ func TestSLOAwareRouter_AdmitRequest_NoValidPod (t * testing.T ) {
906+ router := createTestRouter ()
907+ ctx := context .Background ()
908+ request := createTestLLMRequest ("test" , 100 , 50 , true )
909+ pods := []schedulingtypes.Pod {}
910+
911+ // Create SLO context without valid pod
912+ sloCtx := newSLORequestContext (request )
913+ sloCtx .hasValidPod = false
914+ router .setSLOContextForRequest (request , sloCtx )
915+
916+ err := router .AdmitRequest (ctx , request , pods )
917+
918+ assert .Error (t , err , "Should reject request when hasValidPod is false" )
919+ assert .Contains (t , err .Error (), "no valid pod available based on SLO predictions" )
920+ }
921+
922+ func TestSLOAwareRouter_AdmitRequest_WithMultiplePods (t * testing.T ) {
923+ router := createTestRouter ()
924+ ctx := context .Background ()
925+ request := createTestLLMRequest ("test" , 100 , 50 , true )
926+
927+ // Create multiple test pods
928+ pod1 := createTestPod ("test-pod-1" , 1 , 1 , 1 )
929+ pod2 := createTestPod ("test-pod-2" , 1 , 1 , 1 )
930+ pods := []schedulingtypes.Pod {pod1 , pod2 }
931+
932+ // Create SLO context with valid pod
933+ sloCtx := newSLORequestContext (request )
934+ sloCtx .hasValidPod = true
935+ router .setSLOContextForRequest (request , sloCtx )
936+
937+ err := router .AdmitRequest (ctx , request , pods )
938+
939+ assert .NoError (t , err , "Should admit request with valid pod even with multiple pods available" )
940+ }
941+
942+ func TestSLOAwareRouter_AdmitRequest_DefaultHasValidPod (t * testing.T ) {
943+ router := createTestRouter ()
944+ ctx := context .Background ()
945+ request := createTestLLMRequest ("test" , 100 , 50 , true )
946+ pods := []schedulingtypes.Pod {}
947+
948+ // Create SLO context - hasValidPod defaults to false
949+ sloCtx := newSLORequestContext (request )
950+ router .setSLOContextForRequest (request , sloCtx )
951+
952+ err := router .AdmitRequest (ctx , request , pods )
953+
954+ assert .Error (t , err , "Should reject request when hasValidPod defaults to false" )
955+ assert .Contains (t , err .Error (), "no valid pod available" )
956+ }
957+
958+ func TestSLOAwareRouter_AdmitRequest_ConcurrentAccess (t * testing.T ) {
959+ router := createTestRouter ()
960+ ctx := context .Background ()
961+
962+ var wg sync.WaitGroup
963+ numGoroutines := 50
964+
965+ // Half with valid pods, half without
966+ for i := 0 ; i < numGoroutines ; i ++ {
967+ wg .Add (1 )
968+ go func (idx int ) {
969+ defer wg .Done ()
970+
971+ requestID := uuid .New ().String ()
972+ request := createTestLLMRequest (requestID , 100 , 50 , true )
973+ pods := []schedulingtypes.Pod {}
974+
975+ sloCtx := newSLORequestContext (request )
976+ sloCtx .hasValidPod = (idx % 2 == 0 ) // Alternate between true and false
977+ router .setSLOContextForRequest (request , sloCtx )
978+
979+ err := router .AdmitRequest (ctx , request , pods )
980+
981+ if idx % 2 == 0 {
982+ assert .NoError (t , err , "Should admit request with valid pod" )
983+ } else {
984+ assert .Error (t , err , "Should reject request without valid pod" )
985+ }
986+ }(i )
987+ }
988+
989+ wg .Wait ()
990+ }
991+
992+ func TestSLOAwareRouter_AdmitRequest_ErrorMessage (t * testing.T ) {
993+ router := createTestRouter ()
994+ ctx := context .Background ()
995+ request := createTestLLMRequest ("test" , 100 , 50 , true )
996+ pods := []schedulingtypes.Pod {}
997+
998+ sloCtx := newSLORequestContext (request )
999+ sloCtx .hasValidPod = false
1000+ router .setSLOContextForRequest (request , sloCtx )
1001+
1002+ err := router .AdmitRequest (ctx , request , pods )
1003+
1004+ require .Error (t , err )
1005+ expectedMsg := "request cannot be admitted: no valid pod available based on SLO predictions"
1006+ assert .Equal (t , expectedMsg , err .Error (), "Error message should match expected format" )
1007+ }
1008+
8671009func TestSLORequestContext_SLOValidation (t * testing.T ) {
8681010 tests := []struct {
8691011 name string
0 commit comments