func TestHandlers(t *testing.T) { // There is a single service ns1/s1 in cluster mycluster. service := api_v1.Service{ ObjectMeta: api_v1.ObjectMeta{ Namespace: "ns1", Name: "s1", }, } service2 := api_v1.Service{ ObjectMeta: api_v1.ObjectMeta{ Namespace: "ns1", Name: "s1", Annotations: map[string]string{ "A": "B", }, }, } triggerChan := make(chan struct{}, 1) triggered := func() bool { select { case <-triggerChan: return true default: return false } } trigger := NewTriggerOnAllChangesPreproc( func(obj pkg_runtime.Object) { triggerChan <- struct{}{} }, func(obj pkg_runtime.Object) { SetClusterName(obj, "mycluster") }) trigger.OnAdd(&service) assert.True(t, triggered()) name, err := GetClusterName(&service) assert.NoError(t, err) assert.Equal(t, "mycluster", name) trigger.OnDelete(&service) assert.True(t, triggered()) trigger.OnUpdate(&service, &service) assert.False(t, triggered()) trigger.OnUpdate(&service, &service2) assert.True(t, triggered()) trigger2 := NewTriggerOnMetaAndSpecChangesPreproc( func(obj pkg_runtime.Object) { triggerChan <- struct{}{} }, func(obj pkg_runtime.Object) { SetClusterName(obj, "mycluster") }) service.Annotations = make(map[string]string) trigger2.OnAdd(&service) assert.True(t, triggered()) name, err = GetClusterName(&service) assert.NoError(t, err) assert.Equal(t, "mycluster", name) trigger2.OnDelete(&service) assert.True(t, triggered()) trigger2.OnUpdate(&service, &service) assert.False(t, triggered()) trigger2.OnUpdate(&service, &service2) assert.True(t, triggered()) service3 := api_v1.Service{ ObjectMeta: api_v1.ObjectMeta{ Namespace: "ns1", Name: "s1", }, Status: api_v1.ServiceStatus{ LoadBalancer: api_v1.LoadBalancerStatus{ Ingress: []api_v1.LoadBalancerIngress{{ Hostname: "A", }}, }, }, } trigger2.OnUpdate(&service, &service3) assert.False(t, triggered()) }
func TestGetLoadBalancerSourceRanges(t *testing.T) { checkError := func(v string) { annotations := make(map[string]string) annotations[AnnotationLoadBalancerSourceRangesKey] = v svc := v1.Service{} svc.Annotations = annotations _, err := GetLoadBalancerSourceRanges(&svc) if err == nil { t.Errorf("Expected error parsing: %q", v) } svc = v1.Service{} svc.Spec.LoadBalancerSourceRanges = strings.Split(v, ",") _, err = GetLoadBalancerSourceRanges(&svc) if err == nil { t.Errorf("Expected error parsing: %q", v) } } checkError("10.0.0.1/33") checkError("foo.bar") checkError("10.0.0.1/32,*") checkError("10.0.0.1/32,") checkError("10.0.0.1/32, ") checkError("10.0.0.1") checkOK := func(v string) netsets.IPNet { annotations := make(map[string]string) annotations[AnnotationLoadBalancerSourceRangesKey] = v svc := v1.Service{} svc.Annotations = annotations cidrs, err := GetLoadBalancerSourceRanges(&svc) if err != nil { t.Errorf("Unexpected error parsing: %q", v) } svc = v1.Service{} svc.Spec.LoadBalancerSourceRanges = strings.Split(v, ",") cidrs, err = GetLoadBalancerSourceRanges(&svc) if err != nil { t.Errorf("Unexpected error parsing: %q", v) } return cidrs } cidrs := checkOK("192.168.0.1/32") if len(cidrs) != 1 { t.Errorf("Expected exactly one CIDR: %v", cidrs.StringSlice()) } cidrs = checkOK("192.168.0.1/32,192.168.0.1/32") if len(cidrs) != 1 { t.Errorf("Expected exactly one CIDR (after de-dup): %v", cidrs.StringSlice()) } cidrs = checkOK("192.168.0.1/32,192.168.0.2/32") if len(cidrs) != 2 { t.Errorf("Expected two CIDRs: %v", cidrs.StringSlice()) } cidrs = checkOK(" 192.168.0.1/32 , 192.168.0.2/32 ") if len(cidrs) != 2 { t.Errorf("Expected two CIDRs: %v", cidrs.StringSlice()) } // check LoadBalancerSourceRanges not specified svc := v1.Service{} cidrs, err := GetLoadBalancerSourceRanges(&svc) if err != nil { t.Errorf("Unexpected error: %v", err) } if len(cidrs) != 1 { t.Errorf("Expected exactly one CIDR: %v", cidrs.StringSlice()) } if !IsAllowAll(cidrs) { t.Errorf("Expected default to be allow-all: %v", cidrs.StringSlice()) } // check SourceRanges annotation is empty annotations := make(map[string]string) annotations[AnnotationLoadBalancerSourceRangesKey] = "" svc = v1.Service{} svc.Annotations = annotations cidrs, err = GetLoadBalancerSourceRanges(&svc) if err != nil { t.Errorf("Unexpected error: %v", err) } if len(cidrs) != 1 { t.Errorf("Expected exactly one CIDR: %v", cidrs.StringSlice()) } if !IsAllowAll(cidrs) { t.Errorf("Expected default to be allow-all: %v", cidrs.StringSlice()) } }