topology_test.go: remove unnecessary helper type

Remove the `endpoint` type, and just use `Endpoint` directly in the
testCases.
This commit is contained in:
Dan Winship 2021-11-16 18:11:47 -05:00
parent e5ba48f7d1
commit 6caa18a6b7

View File

@ -46,28 +46,23 @@ func checkExpectedEndpoints(expected sets.String, actual []Endpoint) error {
} }
func TestFilterEndpoints(t *testing.T) { func TestFilterEndpoints(t *testing.T) {
type endpoint struct {
ip string
zoneHints sets.String
unready bool
}
testCases := []struct { testCases := []struct {
name string name string
hintsEnabled bool hintsEnabled bool
nodeLabels map[string]string nodeLabels map[string]string
serviceInfo ServicePort serviceInfo ServicePort
endpoints []endpoint endpoints []Endpoint
expectedEndpoints sets.String expectedEndpoints sets.String
}{{ }{{
name: "hints enabled, hints annotation == auto", name: "hints enabled, hints annotation == auto",
hintsEnabled: true, hintsEnabled: true,
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "auto"}, serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "auto"},
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"),
}, { }, {
@ -75,11 +70,11 @@ func TestFilterEndpoints(t *testing.T) {
hintsEnabled: true, hintsEnabled: true,
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "disabled"}, serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "disabled"},
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
@ -87,11 +82,11 @@ func TestFilterEndpoints(t *testing.T) {
hintsEnabled: true, hintsEnabled: true,
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "aUto"}, serviceInfo: &BaseServiceInfo{nodeLocalExternal: false, hintsAnnotation: "aUto"},
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
@ -99,11 +94,11 @@ func TestFilterEndpoints(t *testing.T) {
hintsEnabled: true, hintsEnabled: true,
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
serviceInfo: &BaseServiceInfo{nodeLocalExternal: false}, serviceInfo: &BaseServiceInfo{nodeLocalExternal: false},
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
@ -111,11 +106,11 @@ func TestFilterEndpoints(t *testing.T) {
hintsEnabled: true, hintsEnabled: true,
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
serviceInfo: &BaseServiceInfo{nodeLocalExternal: true, hintsAnnotation: "auto"}, serviceInfo: &BaseServiceInfo{nodeLocalExternal: true, hintsAnnotation: "auto"},
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}} }}
@ -124,12 +119,7 @@ func TestFilterEndpoints(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.TopologyAwareHints, tc.hintsEnabled)() defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.TopologyAwareHints, tc.hintsEnabled)()
endpoints := []Endpoint{} filteredEndpoints := FilterEndpoints(tc.endpoints, tc.serviceInfo, tc.nodeLabels)
for _, ep := range tc.endpoints {
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip + ":80", ZoneHints: ep.zoneHints, Ready: !ep.unready})
}
filteredEndpoints := FilterEndpoints(endpoints, tc.serviceInfo, tc.nodeLabels)
err := checkExpectedEndpoints(tc.expectedEndpoints, filteredEndpoints) err := checkExpectedEndpoints(tc.expectedEndpoints, filteredEndpoints)
if err != nil { if err != nil {
t.Errorf(err.Error()) t.Errorf(err.Error())
@ -139,133 +129,129 @@ func TestFilterEndpoints(t *testing.T) {
} }
func Test_filterEndpointsWithHints(t *testing.T) { func Test_filterEndpointsWithHints(t *testing.T) {
type endpoint struct {
ip string
zoneHints sets.String
unready bool
}
testCases := []struct { testCases := []struct {
name string name string
nodeLabels map[string]string nodeLabels map[string]string
hintsAnnotation string hintsAnnotation string
endpoints []endpoint endpoints []Endpoint
expectedEndpoints sets.String expectedEndpoints sets.String
}{{ }{{
name: "empty node labels", name: "empty node labels",
nodeLabels: map[string]string{}, nodeLabels: map[string]string{},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}}, endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
},
expectedEndpoints: sets.NewString("10.1.2.3:80"), expectedEndpoints: sets.NewString("10.1.2.3:80"),
}, { }, {
name: "empty zone label", name: "empty zone label",
nodeLabels: map[string]string{v1.LabelTopologyZone: ""}, nodeLabels: map[string]string{v1.LabelTopologyZone: ""},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}}, endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
},
expectedEndpoints: sets.NewString("10.1.2.3:80"), expectedEndpoints: sets.NewString("10.1.2.3:80"),
}, { }, {
name: "node in different zone, no endpoint filtering", name: "node in different zone, no endpoint filtering",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-b"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-b"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}}, endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
},
expectedEndpoints: sets.NewString("10.1.2.3:80"), expectedEndpoints: sets.NewString("10.1.2.3:80"),
}, { }, {
name: "normal endpoint filtering, auto annotation", name: "normal endpoint filtering, auto annotation",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"),
}, { }, {
name: "unready endpoint", name: "unready endpoint",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a"), unready: true}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: false},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80"), expectedEndpoints: sets.NewString("10.1.2.3:80"),
}, { }, {
name: "only unready endpoints in same zone (should not filter)", name: "only unready endpoints in same zone (should not filter)",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a"), unready: true}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: false},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a"), unready: true}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: false},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
name: "normal endpoint filtering, Auto annotation", name: "normal endpoint filtering, Auto annotation",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "Auto", hintsAnnotation: "Auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.6:80"),
}, { }, {
name: "hintsAnnotation empty, no filtering applied", name: "hintsAnnotation empty, no filtering applied",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "", hintsAnnotation: "",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
name: "hintsAnnotation disabled, no filtering applied", name: "hintsAnnotation disabled, no filtering applied",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "disabled", hintsAnnotation: "disabled",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
name: "missing hints, no filtering applied", name: "missing hints, no filtering applied",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b"), Ready: true},
{ip: "10.1.2.5"}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: nil, Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-a")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-a"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"),
}, { }, {
name: "multiple hints per endpoint, filtering includes any endpoint with zone included", name: "multiple hints per endpoint, filtering includes any endpoint with zone included",
nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-c"}, nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-c"},
hintsAnnotation: "auto", hintsAnnotation: "auto",
endpoints: []endpoint{ endpoints: []Endpoint{
{ip: "10.1.2.3", zoneHints: sets.NewString("zone-a", "zone-b", "zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.3:80", ZoneHints: sets.NewString("zone-a", "zone-b", "zone-c"), Ready: true},
{ip: "10.1.2.4", zoneHints: sets.NewString("zone-b", "zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.4:80", ZoneHints: sets.NewString("zone-b", "zone-c"), Ready: true},
{ip: "10.1.2.5", zoneHints: sets.NewString("zone-b", "zone-d")}, &BaseEndpointInfo{Endpoint: "10.1.2.5:80", ZoneHints: sets.NewString("zone-b", "zone-d"), Ready: true},
{ip: "10.1.2.6", zoneHints: sets.NewString("zone-c")}, &BaseEndpointInfo{Endpoint: "10.1.2.6:80", ZoneHints: sets.NewString("zone-c"), Ready: true},
}, },
expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.6:80"), expectedEndpoints: sets.NewString("10.1.2.3:80", "10.1.2.4:80", "10.1.2.6:80"),
}} }}
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
endpoints := []Endpoint{} filteredEndpoints := filterEndpointsWithHints(tc.endpoints, tc.hintsAnnotation, tc.nodeLabels)
for _, ep := range tc.endpoints {
endpoints = append(endpoints, &BaseEndpointInfo{Endpoint: ep.ip + ":80", ZoneHints: ep.zoneHints, Ready: !ep.unready})
}
filteredEndpoints := filterEndpointsWithHints(endpoints, tc.hintsAnnotation, tc.nodeLabels)
err := checkExpectedEndpoints(tc.expectedEndpoints, filteredEndpoints) err := checkExpectedEndpoints(tc.expectedEndpoints, filteredEndpoints)
if err != nil { if err != nil {
t.Errorf(err.Error()) t.Errorf(err.Error())
@ -288,24 +274,24 @@ func TestFilterLocalEndpoint(t *testing.T) {
{ {
name: "all endpoints not local", name: "all endpoints not local",
endpoints: []Endpoint{ endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: false}, &BaseEndpointInfo{Endpoint: "10.0.0.0:80", Ready: true, IsLocal: false},
&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, &BaseEndpointInfo{Endpoint: "10.0.0.1:80", Ready: true, IsLocal: false},
}, },
expected: nil, expected: nil,
}, },
{ {
name: "all endpoints are local", name: "all endpoints are local",
endpoints: []Endpoint{ endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, &BaseEndpointInfo{Endpoint: "10.0.0.0:80", Ready: true, IsLocal: true},
&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: true}, &BaseEndpointInfo{Endpoint: "10.0.0.1:80", Ready: true, IsLocal: true},
}, },
expected: sets.NewString("10.0.0.0:80", "10.0.0.1:80"), expected: sets.NewString("10.0.0.0:80", "10.0.0.1:80"),
}, },
{ {
name: "some endpoints are local", name: "some endpoints are local",
endpoints: []Endpoint{ endpoints: []Endpoint{
&BaseEndpointInfo{Endpoint: "10.0.0.0:80", IsLocal: true}, &BaseEndpointInfo{Endpoint: "10.0.0.0:80", Ready: true, IsLocal: true},
&BaseEndpointInfo{Endpoint: "10.0.0.1:80", IsLocal: false}, &BaseEndpointInfo{Endpoint: "10.0.0.1:80", Ready: true, IsLocal: false},
}, },
expected: sets.NewString("10.0.0.0:80"), expected: sets.NewString("10.0.0.0:80"),
}, },