@@ -251,3 +251,142 @@ func TestLoRASoftAffinityDistribution(t *testing.T) {
251251 actualAvailablePercent , availableLowerBound , availableUpperBound )
252252 }
253253}
254+
255+ func TestSubsettingFilter (t * testing.T ) {
256+ var makeFilterMetadata = func (data []interface {}) map [string ]any {
257+ return map [string ]any {
258+ "envoy.lb.subset_hint" : map [string ]any {
259+ "x-gateway-destination-endpoint-subset" : data ,
260+ },
261+ }
262+ }
263+
264+ tests := []struct {
265+ name string
266+ metadata map [string ]any
267+ filter framework.Filter
268+ input []types.Pod
269+ output []types.Pod
270+ }{
271+ {
272+ name : "SubsetFilter, filter not present — return all pods" ,
273+ filter : & SubsetFilter {},
274+ metadata : map [string ]any {},
275+ input : []types.Pod {
276+ & types.PodMetrics {
277+ Pod : & backend.Pod {Address : "10.0.0.1" },
278+ },
279+ & types.PodMetrics {
280+ Pod : & backend.Pod {Address : "10.0.0.2" },
281+ },
282+ },
283+ output : []types.Pod {
284+ & types.PodMetrics {
285+ Pod : & backend.Pod {Address : "10.0.0.1" },
286+ },
287+ & types.PodMetrics {
288+ Pod : & backend.Pod {Address : "10.0.0.2" },
289+ },
290+ },
291+ },
292+ {
293+ name : "SubsetFilter, namespace present filter not present — return all pods" ,
294+ filter : & SubsetFilter {},
295+ metadata : map [string ]any {"envoy.lb.subset_hint" : map [string ]any {}},
296+ input : []types.Pod {
297+ & types.PodMetrics {
298+ Pod : & backend.Pod {Address : "10.0.0.1" },
299+ },
300+ & types.PodMetrics {
301+ Pod : & backend.Pod {Address : "10.0.0.2" },
302+ },
303+ },
304+ output : []types.Pod {
305+ & types.PodMetrics {
306+ Pod : & backend.Pod {Address : "10.0.0.1" },
307+ },
308+ & types.PodMetrics {
309+ Pod : & backend.Pod {Address : "10.0.0.2" },
310+ },
311+ },
312+ },
313+ {
314+ name : "SubsetFilter, filter present with empty list — return no pods" ,
315+ filter : & SubsetFilter {},
316+ metadata : makeFilterMetadata ([]interface {}{}),
317+ input : []types.Pod {
318+ & types.PodMetrics {
319+ Pod : & backend.Pod {Address : "10.0.0.1" },
320+ },
321+ & types.PodMetrics {
322+ Pod : & backend.Pod {Address : "10.0.0.2" },
323+ },
324+ },
325+ output : []types.Pod {},
326+ },
327+ {
328+ name : "SubsetFilter, subset with one matching pod" ,
329+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.1" }),
330+ filter : & SubsetFilter {},
331+ input : []types.Pod {
332+ & types.PodMetrics {
333+ Pod : & backend.Pod {Address : "10.0.0.1" },
334+ },
335+ & types.PodMetrics {
336+ Pod : & backend.Pod {Address : "10.0.0.2" },
337+ },
338+ },
339+ output : []types.Pod {
340+ & types.PodMetrics {
341+ Pod : & backend.Pod {Address : "10.0.0.1" },
342+ },
343+ },
344+ },
345+ {
346+ name : "SubsetFilter, subset with multiple matching pods" ,
347+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.1" , "10.0.0.2" , "10.0.0.3" }),
348+ filter : & SubsetFilter {},
349+ input : []types.Pod {
350+ & types.PodMetrics {
351+ Pod : & backend.Pod {Address : "10.0.0.1" },
352+ },
353+ & types.PodMetrics {
354+ Pod : & backend.Pod {Address : "10.0.0.2" },
355+ },
356+ },
357+ output : []types.Pod {
358+ & types.PodMetrics {
359+ Pod : & backend.Pod {Address : "10.0.0.1" },
360+ },
361+ & types.PodMetrics {
362+ Pod : & backend.Pod {Address : "10.0.0.2" },
363+ },
364+ },
365+ },
366+ {
367+ name : "SubsetFilter, subset with no matching pods" ,
368+ metadata : makeFilterMetadata ([]interface {}{"10.0.0.3" }),
369+ filter : & SubsetFilter {},
370+ input : []types.Pod {
371+ & types.PodMetrics {
372+ Pod : & backend.Pod {Address : "10.0.0.1" },
373+ },
374+ & types.PodMetrics {
375+ Pod : & backend.Pod {Address : "10.0.0.2" },
376+ },
377+ },
378+ output : []types.Pod {},
379+ },
380+ }
381+
382+ for _ , test := range tests {
383+ t .Run (test .name , func (t * testing.T ) {
384+ req := types .NewLLMRequest (uuid .NewString (), "" , "" , nil , test .metadata )
385+ got := test .filter .Filter (context .Background (), types .NewCycleState (), req , test .input )
386+
387+ if diff := cmp .Diff (test .output , got ); diff != "" {
388+ t .Errorf ("Unexpected output (-want +got): %v" , diff )
389+ }
390+ })
391+ }
392+ }
0 commit comments