Skip to content

Commit 04b2965

Browse files
committed
Added tests with multiple TargetPorts
Signed-off-by: Shmuel Kallner <[email protected]>
1 parent 6e1b7dc commit 04b2965

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed

pkg/epp/datastore/datastore_test.go

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
v1 "sigs.k8s.io/gateway-api-inference-extension/api/v1"
3636
"sigs.k8s.io/gateway-api-inference-extension/apix/v1alpha2"
3737
backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics"
38+
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datalayer"
3839
testutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/testing"
3940
)
4041

@@ -248,6 +249,11 @@ var (
248249
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8000))}},
249250
},
250251
}
252+
inferencePoolMultiTarget = &v1.InferencePool{
253+
Spec: v1.InferencePoolSpec{
254+
TargetPorts: []v1.Port{{Number: v1.PortNumber(int32(8000))}, {Number: v1.PortNumber(int32(8001))}},
255+
},
256+
}
251257
)
252258

253259
func TestMetrics(t *testing.T) {
@@ -402,3 +408,184 @@ func TestPods(t *testing.T) {
402408
})
403409
}
404410
}
411+
412+
func TestPodInfo(t *testing.T) {
413+
tests := []struct {
414+
name string
415+
op func(ctx context.Context, ds Datastore)
416+
pool *v1.InferencePool
417+
existingPods []*corev1.Pod
418+
wantPodInfos []*datalayer.PodInfo
419+
}{
420+
{
421+
name: "Add new pod, no existing pods, should add",
422+
existingPods: []*corev1.Pod{},
423+
wantPodInfos: []*datalayer.PodInfo{
424+
{
425+
NamespacedName: types.NamespacedName{
426+
Name: pod1.Name + "-rank-0",
427+
Namespace: pod1.Namespace,
428+
},
429+
430+
PodName: pod1.Name,
431+
Address: pod1.Status.PodIP,
432+
Port: int32(inferencePool.Spec.TargetPorts[0].Number),
433+
MetricsPort: int32(inferencePool.Spec.TargetPorts[0].Number),
434+
Labels: map[string]string{},
435+
},
436+
},
437+
op: func(ctx context.Context, ds Datastore) {
438+
ds.PodUpdateOrAddIfNotExist(pod1)
439+
},
440+
pool: inferencePool,
441+
},
442+
{
443+
name: "Add new pod, no existing pods, should add, multiple target ports",
444+
existingPods: []*corev1.Pod{},
445+
wantPodInfos: []*datalayer.PodInfo{
446+
{
447+
NamespacedName: types.NamespacedName{
448+
Name: pod1.Name + "-rank-0",
449+
Namespace: pod1.Namespace,
450+
},
451+
452+
PodName: pod1.Name,
453+
Address: pod1.Status.PodIP,
454+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
455+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
456+
Labels: map[string]string{},
457+
},
458+
{
459+
NamespacedName: types.NamespacedName{
460+
Name: pod1.Name + "-rank-1",
461+
Namespace: pod1.Namespace,
462+
},
463+
464+
PodName: pod1.Name,
465+
Address: pod1.Status.PodIP,
466+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
467+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
468+
Labels: map[string]string{},
469+
},
470+
},
471+
op: func(ctx context.Context, ds Datastore) {
472+
ds.PodUpdateOrAddIfNotExist(pod1)
473+
},
474+
pool: inferencePoolMultiTarget,
475+
},
476+
{
477+
name: "Add new pod, with existing pods, should add, multiple target ports",
478+
existingPods: []*corev1.Pod{pod1},
479+
wantPodInfos: []*datalayer.PodInfo{
480+
{
481+
NamespacedName: types.NamespacedName{
482+
Name: pod1.Name + "-rank-0",
483+
Namespace: pod1.Namespace,
484+
},
485+
486+
PodName: pod1.Name,
487+
Address: pod1.Status.PodIP,
488+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
489+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
490+
Labels: map[string]string{},
491+
},
492+
{
493+
NamespacedName: types.NamespacedName{
494+
Name: pod1.Name + "-rank-1",
495+
Namespace: pod1.Namespace,
496+
},
497+
498+
PodName: pod1.Name,
499+
Address: pod1.Status.PodIP,
500+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
501+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
502+
Labels: map[string]string{},
503+
},
504+
{
505+
NamespacedName: types.NamespacedName{
506+
Name: pod2.Name + "-rank-0",
507+
Namespace: pod2.Namespace,
508+
},
509+
510+
PodName: pod2.Name,
511+
Address: pod2.Status.PodIP,
512+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
513+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
514+
Labels: map[string]string{},
515+
},
516+
{
517+
NamespacedName: types.NamespacedName{
518+
Name: pod2.Name + "-rank-1",
519+
Namespace: pod2.Namespace,
520+
},
521+
522+
PodName: pod2.Name,
523+
Address: pod2.Status.PodIP,
524+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
525+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
526+
Labels: map[string]string{},
527+
},
528+
},
529+
op: func(ctx context.Context, ds Datastore) {
530+
ds.PodUpdateOrAddIfNotExist(pod2)
531+
},
532+
pool: inferencePoolMultiTarget,
533+
},
534+
{
535+
name: "Delete the pod, multiple target ports",
536+
existingPods: []*corev1.Pod{pod1, pod2},
537+
wantPodInfos: []*datalayer.PodInfo{
538+
{
539+
NamespacedName: types.NamespacedName{
540+
Name: pod1.Name + "-rank-0",
541+
Namespace: pod1.Namespace,
542+
},
543+
544+
PodName: pod1.Name,
545+
Address: pod1.Status.PodIP,
546+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
547+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[0].Number),
548+
Labels: map[string]string{},
549+
},
550+
{
551+
NamespacedName: types.NamespacedName{
552+
Name: pod1.Name + "-rank-1",
553+
Namespace: pod1.Namespace,
554+
},
555+
556+
PodName: pod1.Name,
557+
Address: pod1.Status.PodIP,
558+
Port: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
559+
MetricsPort: int32(inferencePoolMultiTarget.Spec.TargetPorts[1].Number),
560+
Labels: map[string]string{},
561+
},
562+
},
563+
op: func(ctx context.Context, ds Datastore) {
564+
ds.PodRemove(pod2.Name)
565+
},
566+
pool: inferencePoolMultiTarget,
567+
},
568+
}
569+
570+
for _, test := range tests {
571+
t.Run(test.name, func(t *testing.T) {
572+
ctx := context.Background()
573+
pmf := backendmetrics.NewPodMetricsFactory(&backendmetrics.FakePodMetricsClient{}, time.Second)
574+
ds := NewDatastore(t.Context(), pmf, 0)
575+
fakeClient := fake.NewFakeClient()
576+
ds.PoolSet(ctx, fakeClient, test.pool)
577+
for _, pod := range test.existingPods {
578+
ds.PodUpdateOrAddIfNotExist(pod)
579+
}
580+
581+
test.op(ctx, ds)
582+
var gotPodInfos []*datalayer.PodInfo
583+
for _, pm := range ds.PodList(backendmetrics.AllPodsPredicate) {
584+
gotPodInfos = append(gotPodInfos, pm.GetPod())
585+
}
586+
if diff := cmp.Diff(test.wantPodInfos, gotPodInfos, cmpopts.SortSlices(func(a, b *datalayer.PodInfo) bool { return a.NamespacedName.Name < b.NamespacedName.Name })); diff != "" {
587+
t.Errorf("ConvertTo() mismatch (-want +got):\n%s", diff)
588+
}
589+
})
590+
}
591+
}

0 commit comments

Comments
 (0)