package controller import ( "testing" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestServicePortsToAllocateRules(t *testing.T) { svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "web"}, Spec: corev1.ServiceSpec{Ports: []corev1.ServicePort{{Port: 80, Protocol: corev1.ProtocolTCP}, {Port: 53, Protocol: corev1.ProtocolUDP}}}, } rules, err := servicePortsToAllocateRules(svc) if err != nil { t.Fatalf("servicePortsToAllocateRules: %v", err) } if len(rules) != 2 { t.Fatalf("rules count = %d, want 2", len(rules)) } if rules[0].Protocol != "tcp" || rules[0].PortFrom != 80 { t.Fatalf("unexpected first rule: %+v", rules[0]) } if rules[1].Protocol != "udp" || rules[1].PortFrom != 53 { t.Fatalf("unexpected second rule: %+v", rules[1]) } } func TestServicePortsToAllocateRulesRejectsUnsupportedProtocol(t *testing.T) { svc := &corev1.Service{ ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "web"}, Spec: corev1.ServiceSpec{Ports: []corev1.ServicePort{{Port: 80, Protocol: corev1.ProtocolSCTP}}}, } if _, err := servicePortsToAllocateRules(svc); err == nil { t.Fatal("expected error for unsupported protocol") } } func TestServicePortsToAllocateRulesRejectsNoPorts(t *testing.T) { svc := &corev1.Service{ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "web"}} if _, err := servicePortsToAllocateRules(svc); err == nil { t.Fatal("expected error for empty ports") } }