| package libnetwork |
| |
| import ( |
| "net/netip" |
| "slices" |
| "testing" |
| |
| "gotest.tools/v3/assert" |
| ) |
| |
| func TestEndpointEvent_EquivalentTo(t *testing.T) { |
| assert.Check(t, (&endpointEvent{}).EquivalentTo(&endpointEvent{})) |
| |
| a := endpointEvent{ |
| EndpointRecord: EndpointRecord{ |
| Name: "foo", |
| ServiceName: "bar", |
| ServiceID: "baz", |
| IngressPorts: []*PortConfig{ |
| { |
| Protocol: ProtocolTCP, |
| TargetPort: 80, |
| }, |
| { |
| Name: "dns", |
| Protocol: ProtocolUDP, |
| TargetPort: 5353, |
| PublishedPort: 53, |
| }, |
| }, |
| }, |
| VirtualIP: netip.MustParseAddr("10.0.0.42"), |
| EndpointIP: netip.MustParseAddr("192.168.69.42"), |
| } |
| assert.Check(t, a.EquivalentTo(&a)) |
| |
| reflexiveEquiv := func(a, b *endpointEvent) bool { |
| t.Helper() |
| assert.Check(t, a.EquivalentTo(b) == b.EquivalentTo(a), "reflexive equivalence") |
| return a.EquivalentTo(b) |
| } |
| |
| b := a |
| b.ServiceDisabled = true |
| assert.Check(t, !reflexiveEquiv(&a, &b), "differing by ServiceDisabled") |
| |
| c := a |
| c.IngressPorts = slices.Clone(a.IngressPorts) |
| slices.Reverse(c.IngressPorts) |
| assert.Check(t, reflexiveEquiv(&a, &c), "IngressPorts order should not matter") |
| |
| d := a |
| d.IngressPorts = append(d.IngressPorts, a.IngressPorts[0]) |
| assert.Check(t, !reflexiveEquiv(&a, &d), "Differing number of copies of IngressPort entries should not be equivalent") |
| d.IngressPorts = a.IngressPorts[:1] |
| assert.Check(t, !reflexiveEquiv(&a, &d), "Removing an IngressPort entry should not be equivalent") |
| |
| e := a |
| e.Aliases = []string{"alias1", "alias2"} |
| assert.Check(t, !reflexiveEquiv(&a, &e), "Differing Aliases should not be equivalent") |
| |
| f := a |
| f.TaskAliases = []string{"taskalias1", "taskalias2"} |
| assert.Check(t, !reflexiveEquiv(&a, &f), "Adding TaskAliases should not be equivalent") |
| g := a |
| g.TaskAliases = []string{"taskalias2", "taskalias1"} |
| assert.Check(t, reflexiveEquiv(&f, &g), "TaskAliases order should not matter") |
| g.TaskAliases = g.TaskAliases[:1] |
| assert.Check(t, !reflexiveEquiv(&f, &g), "Differing number of TaskAliases should not be equivalent") |
| |
| h := a |
| h.EndpointIP = netip.MustParseAddr("192.168.69.43") |
| assert.Check(t, !reflexiveEquiv(&a, &h), "Differing EndpointIP should not be equivalent") |
| |
| i := a |
| i.VirtualIP = netip.MustParseAddr("10.0.0.69") |
| assert.Check(t, !reflexiveEquiv(&a, &i), "Differing VirtualIP should not be equivalent") |
| |
| j := a |
| j.ServiceID = "qux" |
| assert.Check(t, !reflexiveEquiv(&a, &j), "Differing ServiceID should not be equivalent") |
| |
| k := a |
| k.ServiceName = "quux" |
| assert.Check(t, !reflexiveEquiv(&a, &k), "Differing ServiceName should not be equivalent") |
| |
| l := a |
| l.Name = "aaaaa" |
| assert.Check(t, !reflexiveEquiv(&a, &l), "Differing Name should not be equivalent") |
| } |