@@ -251,3 +251,142 @@ func TestLoRASoftAffinityDistribution(t *testing.T) {
251
251
actualAvailablePercent , availableLowerBound , availableUpperBound )
252
252
}
253
253
}
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