@@ -533,3 +533,142 @@ const decisionTreeParametersErrorBadNextOnSuccessOrFailure = `
533533 }
534534}
535535`
536+
537+ func TestSubsettingFilter (t * testing.T ) {
538+ var makeFilterMetadata = func (data []interface {}) map [string ]any {
539+ return map [string ]any {
540+ "envoy.lb.subset_hint" : map [string ]any {
541+ "x-gateway-destination-endpoint-subset" : data ,
542+ },
543+ }
544+ }
545+
546+ tests := []struct {
547+ name string
548+ metadata map [string ]any
549+ filter framework.Filter
550+ input []types.Pod
551+ output []types.Pod
552+ }{
553+ {
554+ name : "SubsetFilter, filter not present — return all pods" ,
555+ filter : & SubsetFilter {},
556+ metadata : map [string ]any {},
557+ input : []types.Pod {
558+ & types.PodMetrics {
559+ Pod : & backend.Pod {Address : "10.0.0.1" },
560+ },
561+ & types.PodMetrics {
562+ Pod : & backend.Pod {Address : "10.0.0.2" },
563+ },
564+ },
565+ output : []types.Pod {
566+ & types.PodMetrics {
567+ Pod : & backend.Pod {Address : "10.0.0.1" },
568+ },
569+ & types.PodMetrics {
570+ Pod : & backend.Pod {Address : "10.0.0.2" },
571+ },
572+ },
573+ },
574+ {
575+ name : "SubsetFilter, namespace present filter not present — return all pods" ,
576+ filter : & SubsetFilter {},
577+ metadata : map [string ]any {"envoy.lb.subset_hint" : map [string ]any {}},
578+ input : []types.Pod {
579+ & types.PodMetrics {
580+ Pod : & backend.Pod {Address : "10.0.0.1" },
581+ },
582+ & types.PodMetrics {
583+ Pod : & backend.Pod {Address : "10.0.0.2" },
584+ },
585+ },
586+ output : []types.Pod {
587+ & types.PodMetrics {
588+ Pod : & backend.Pod {Address : "10.0.0.1" },
589+ },
590+ & types.PodMetrics {
591+ Pod : & backend.Pod {Address : "10.0.0.2" },
592+ },
593+ },
594+ },
595+ {
596+ name : "SubsetFilter, filter present with empty list — return no pods" ,
597+ filter : & SubsetFilter {},
598+ metadata : makeFilterMetadata ([]interface {}{}),
599+ input : []types.Pod {
600+ & types.PodMetrics {
601+ Pod : & backend.Pod {Address : "10.0.0.1" },
602+ },
603+ & types.PodMetrics {
604+ Pod : & backend.Pod {Address : "10.0.0.2" },
605+ },
606+ },
607+ output : []types.Pod {},
608+ },
609+ {
610+ name : "SubsetFilter, subset with one matching pod" ,
611+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.1" }),
612+ filter : & SubsetFilter {},
613+ input : []types.Pod {
614+ & types.PodMetrics {
615+ Pod : & backend.Pod {Address : "10.0.0.1" },
616+ },
617+ & types.PodMetrics {
618+ Pod : & backend.Pod {Address : "10.0.0.2" },
619+ },
620+ },
621+ output : []types.Pod {
622+ & types.PodMetrics {
623+ Pod : & backend.Pod {Address : "10.0.0.1" },
624+ },
625+ },
626+ },
627+ {
628+ name : "SubsetFilter, subset with multiple matching pods" ,
629+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.1" , "10.0.0.2" , "10.0.0.3" }),
630+ filter : & SubsetFilter {},
631+ input : []types.Pod {
632+ & types.PodMetrics {
633+ Pod : & backend.Pod {Address : "10.0.0.1" },
634+ },
635+ & types.PodMetrics {
636+ Pod : & backend.Pod {Address : "10.0.0.2" },
637+ },
638+ },
639+ output : []types.Pod {
640+ & types.PodMetrics {
641+ Pod : & backend.Pod {Address : "10.0.0.1" },
642+ },
643+ & types.PodMetrics {
644+ Pod : & backend.Pod {Address : "10.0.0.2" },
645+ },
646+ },
647+ },
648+ {
649+ name : "SubsetFilter, subset with no matching pods" ,
650+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.3" }),
651+ filter : & SubsetFilter {},
652+ input : []types.Pod {
653+ & types.PodMetrics {
654+ Pod : & backend.Pod {Address : "10.0.0.1" },
655+ },
656+ & types.PodMetrics {
657+ Pod : & backend.Pod {Address : "10.0.0.2" },
658+ },
659+ },
660+ output : []types.Pod {},
661+ },
662+ }
663+
664+ for _ , test := range tests {
665+ t .Run (test .name , func (t * testing.T ) {
666+ req := types .NewLLMRequest (uuid .NewString (), "" , "" , nil , test .metadata )
667+ got := test .filter .Filter (context .Background (), types .NewCycleState (), req , test .input )
668+
669+ if diff := cmp .Diff (test .output , got ); diff != "" {
670+ t .Errorf ("Unexpected output (-want +got): %v" , diff )
671+ }
672+ })
673+ }
674+ }
0 commit comments