lint(errorlint): handle wrapped errors

Enable errorlint and preserve wrapped error chains so runtime checks
and tests classify failures correctly. This also makes Route53
surface insert failures instead of silently dropping them.

Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
This commit is contained in:
Ville Vesilehto
2026-04-25 11:51:45 +03:00
parent a669d74088
commit 3080ec0448
53 changed files with 122 additions and 89 deletions

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/pkg/dnstest"
@@ -60,7 +61,7 @@ func TestPreserveCase(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/pkg/dnstest"
@@ -42,7 +43,7 @@ func TestServeDNSEmptyService(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/pkg/dnstest"
@@ -40,7 +41,7 @@ func TestServeDNSModeDisabled(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d got unexpected error %v", i, err)
return
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/pkg/dnstest"
@@ -75,7 +76,7 @@ func TestServeDNSModeInsecure(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/pkg/dnstest"
@@ -61,7 +62,7 @@ func TestServeDNSModeVerified(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"fmt"
"testing"
@@ -436,7 +437,7 @@ func TestServeDNS(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}
@@ -568,7 +569,7 @@ func TestMultiClusterServeDNS(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}
@@ -629,7 +630,7 @@ func TestServeNamespaceDNS(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}
@@ -675,7 +676,7 @@ func TestNotSyncedServeDNS(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d expected no error, got %v", i, err)
return
}

View File

@@ -181,7 +181,7 @@ func (k *Kubernetes) Lookup(ctx context.Context, state request.Request, name str
// IsNameError implements the ServiceBackend interface.
func (k *Kubernetes) IsNameError(err error) bool {
return err == errNoItems || err == errNsNotExposed || err == errInvalidRequest
return errors.Is(err, errNoItems) || errors.Is(err, errNsNotExposed) || errors.Is(err, errInvalidRequest)
}
func (k *Kubernetes) getClientConfig() (*rest.Config, error) {
@@ -240,14 +240,14 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (onStart func() error, o
kubeClient, err := kubernetes.NewForConfig(config)
if err != nil {
return nil, nil, fmt.Errorf("failed to create kubernetes notification controller: %q", err)
return nil, nil, fmt.Errorf("failed to create kubernetes notification controller: %w", err)
}
var mcsClient mcsClientset.MulticlusterV1alpha1Interface
if len(k.opts.multiclusterZones) > 0 {
mcsClient, err = mcsClientset.NewForConfig(config)
if err != nil {
return nil, nil, fmt.Errorf("failed to create kubernetes multicluster notification controller: %q", err)
return nil, nil, fmt.Errorf("failed to create kubernetes multicluster notification controller: %w", err)
}
}
@@ -255,7 +255,7 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (onStart func() error, o
var selector labels.Selector
selector, err = meta.LabelSelectorAsSelector(k.opts.labelSelector)
if err != nil {
return nil, nil, fmt.Errorf("unable to create Selector for LabelSelector '%s': %q", k.opts.labelSelector, err)
return nil, nil, fmt.Errorf("unable to create Selector for LabelSelector %q: %w", k.opts.labelSelector, err)
}
k.opts.selector = selector
}
@@ -264,7 +264,7 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (onStart func() error, o
var selector labels.Selector
selector, err = meta.LabelSelectorAsSelector(k.opts.namespaceLabelSelector)
if err != nil {
return nil, nil, fmt.Errorf("unable to create Selector for LabelSelector '%s': %q", k.opts.namespaceLabelSelector, err)
return nil, nil, fmt.Errorf("unable to create Selector for LabelSelector %q: %w", k.opts.namespaceLabelSelector, err)
}
k.opts.namespaceSelector = selector
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"net"
"testing"
@@ -72,7 +73,7 @@ func TestServeDNSApex(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d, expected no error, got %v", i, err)
return
}

View File

@@ -1,6 +1,7 @@
package object
import (
"errors"
"fmt"
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -39,7 +40,7 @@ func DefaultProcessor(convert ToFunc, recordLatency *EndpointLatencyRecorder) Pr
case cache.Sync, cache.Added, cache.Updated:
obj, err := convert(d.Object.(meta.Object))
if err != nil {
if err == errPodTerminating {
if errors.Is(err, errPodTerminating) {
continue
}
return err
@@ -68,7 +69,7 @@ func DefaultProcessor(convert ToFunc, recordLatency *EndpointLatencyRecorder) Pr
return fmt.Errorf("unexpected object %v", d.Object)
}
obj, err = convert(metaObj)
if err != nil && err != errPodTerminating {
if err != nil && !errors.Is(err, errPodTerminating) {
return err
}
}

View File

@@ -2,6 +2,7 @@ package kubernetes
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin/kubernetes/object"
@@ -243,7 +244,7 @@ func TestReverse(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{})
_, err := k.ServeDNS(ctx, w, r)
if err != tc.Error {
if !errors.Is(err, tc.Error) {
t.Errorf("Test %d: expected no error, got %v", i, err)
return
}

View File

@@ -169,7 +169,7 @@ func ParseStanza(c *caddy.Controller) (*Kubernetes, error) {
labelSelectorString := strings.Join(args, " ")
ls, err := meta.ParseToLabelSelector(labelSelectorString)
if err != nil {
return nil, fmt.Errorf("unable to parse label selector value: '%v': %v", labelSelectorString, err)
return nil, fmt.Errorf("unable to parse label selector value %q: %w", labelSelectorString, err)
}
k8s.opts.labelSelector = ls
continue
@@ -181,7 +181,7 @@ func ParseStanza(c *caddy.Controller) (*Kubernetes, error) {
namespaceLabelSelectorString := strings.Join(args, " ")
nls, err := meta.ParseToLabelSelector(namespaceLabelSelectorString)
if err != nil {
return nil, fmt.Errorf("unable to parse namespace_label selector value: '%v': %v", namespaceLabelSelectorString, err)
return nil, fmt.Errorf("unable to parse namespace_label selector value %q: %w", namespaceLabelSelectorString, err)
}
k8s.opts.namespaceLabelSelector = nls
continue
@@ -241,7 +241,7 @@ func ParseStanza(c *caddy.Controller) (*Kubernetes, error) {
var err error
k8s.startupTimeout, err = time.ParseDuration(args[0])
if err != nil {
return nil, fmt.Errorf("failed to parse startup_timeout: %v, %s", args[0], err)
return nil, fmt.Errorf("failed to parse startup_timeout %q: %w", args[0], err)
}
case "apiserver_qps":
args := c.RemainingArgs()

View File

@@ -1,6 +1,7 @@
package kubernetes
import (
"errors"
"net"
"strings"
"testing"
@@ -20,7 +21,7 @@ func TestKubernetesTransferNonAuthZone(t *testing.T) {
dnsmsg.SetAxfr("example.com")
_, err := k.Transfer("example.com", 0)
if err != transfer.ErrNotAuthoritative {
if !errors.Is(err, transfer.ErrNotAuthoritative) {
t.Error(err)
}
}