From 8445ead47348d28a6fe8d96dd23ed0126cf6e9fb Mon Sep 17 00:00:00 2001 From: Pascal Bachor Date: Mon, 1 Sep 2025 17:32:57 +0200 Subject: [PATCH 1/3] fix: debug message of FilterEndpointsByOwnerID in case owner label is missing --- endpoint/endpoint.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/endpoint/endpoint.go b/endpoint/endpoint.go index dbeabcef88..bd6a351a76 100644 --- a/endpoint/endpoint.go +++ b/endpoint/endpoint.go @@ -393,7 +393,10 @@ func (e *Endpoint) UniqueOrderedTargets() { func FilterEndpointsByOwnerID(ownerID string, eps []*Endpoint) []*Endpoint { filtered := []*Endpoint{} for _, ep := range eps { - if endpointOwner, ok := ep.Labels[OwnerLabelKey]; !ok || endpointOwner != ownerID { + endpointOwner, ok := ep.Labels[OwnerLabelKey] + if !ok { + log.Debugf(`Skipping endpoint %v because of missing owner label (required: "%s")`, ep, ownerID) + } else if endpointOwner != ownerID { log.Debugf(`Skipping endpoint %v because owner id does not match, found: "%s", required: "%s"`, ep, endpointOwner, ownerID) } else { filtered = append(filtered, ep) From 3696777b66a6dd4e292f4997757fa599cb8de08f Mon Sep 17 00:00:00 2001 From: Pascal Bachor Date: Tue, 2 Sep 2025 18:12:19 +0200 Subject: [PATCH 2/3] more consistent messages --- endpoint/endpoint.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/endpoint/endpoint.go b/endpoint/endpoint.go index bd6a351a76..bef398722c 100644 --- a/endpoint/endpoint.go +++ b/endpoint/endpoint.go @@ -397,7 +397,7 @@ func FilterEndpointsByOwnerID(ownerID string, eps []*Endpoint) []*Endpoint { if !ok { log.Debugf(`Skipping endpoint %v because of missing owner label (required: "%s")`, ep, ownerID) } else if endpointOwner != ownerID { - log.Debugf(`Skipping endpoint %v because owner id does not match, found: "%s", required: "%s"`, ep, endpointOwner, ownerID) + log.Debugf(`Skipping endpoint %v because owner id does not match (found: "%s", required: "%s")`, ep, endpointOwner, ownerID) } else { filtered = append(filtered, ep) } From 07074c3103d00c0c095ad1e1e3b87e2355323514 Mon Sep 17 00:00:00 2001 From: Pascal Bachor Date: Fri, 5 Sep 2025 17:05:51 +0200 Subject: [PATCH 3/3] add unit test for changed debug message --- internal/testutils/endpoint_test.go | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/internal/testutils/endpoint_test.go b/internal/testutils/endpoint_test.go index 6f109def0e..8daff40423 100644 --- a/internal/testutils/endpoint_test.go +++ b/internal/testutils/endpoint_test.go @@ -23,6 +23,8 @@ import ( "sort" "testing" + log "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" "sigs.k8s.io/external-dns/endpoint" ) @@ -489,3 +491,63 @@ func TestWithLabel(t *testing.T) { assert.Equal(t, "orig", e.Labels["existing"]) assert.Equal(t, "val", e.Labels["new"]) } + +func TestFilterEndpointsByOwnerIDLogging(t *testing.T) { + noOwner := &endpoint.Endpoint{} + ownedByFoo := &endpoint.Endpoint{ + Labels: endpoint.Labels{ + endpoint.OwnerLabelKey: "foo", + }, + } + ownedByBar := &endpoint.Endpoint{ + Labels: endpoint.Labels{ + endpoint.OwnerLabelKey: "bar", + }, + } + tests := []struct { + name string + ownerID string + endpoints []*endpoint.Endpoint + messages []string + messages_not []string + result []*endpoint.Endpoint + }{ + { + name: "one_matches", + ownerID: "foo", + endpoints: []*endpoint.Endpoint{ownedByFoo}, + messages: []string{}, + messages_not: []string{""}, + result: []*endpoint.Endpoint{ownedByFoo}, + }, + { + name: "wrong_owner", + ownerID: "foo", + endpoints: []*endpoint.Endpoint{ownedByFoo, ownedByBar}, + messages: []string{"because owner id does not match"}, + messages_not: []string{}, + result: []*endpoint.Endpoint{ownedByFoo}, + }, + { + name: "no_owner", + ownerID: "bar", + endpoints: []*endpoint.Endpoint{noOwner, ownedByBar}, + messages: []string{"because of missing owner label"}, + messages_not: []string{"because owner id does not match"}, + result: []*endpoint.Endpoint{ownedByBar}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + hook := LogsUnderTestWithLogLevel(log.DebugLevel, t) + endpoint.FilterEndpointsByOwnerID(tt.ownerID, tt.endpoints) + for _, m := range tt.messages { + TestHelperLogContains(m, hook, t) + } + for _, m := range tt.messages_not { + TestHelperLogNotContains(m, hook, t) + } + }) + } +}