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

@@ -215,21 +215,23 @@ func updateZoneFromRRS(rrs *types.ResourceRecordSet, z *file.Zone) error {
for _, rr := range rrs.ResourceRecords {
n, err := maybeUnescape(aws.ToString(rrs.Name))
if err != nil {
return fmt.Errorf("failed to unescape `%s' name: %v", aws.ToString(rrs.Name), err)
return fmt.Errorf("failed to unescape `%s' name: %w", aws.ToString(rrs.Name), err)
}
v, err := maybeUnescape(aws.ToString(rr.Value))
if err != nil {
return fmt.Errorf("failed to unescape `%s' value: %v", aws.ToString(rr.Value), err)
return fmt.Errorf("failed to unescape `%s' value: %w", aws.ToString(rr.Value), err)
}
// Assemble RFC 1035 conforming record to pass into dns scanner.
rfc1035 := fmt.Sprintf("%s %d IN %s %s", n, aws.ToInt64(rrs.TTL), rrs.Type, v)
r, err := dns.NewRR(rfc1035)
if err != nil {
return fmt.Errorf("failed to parse resource record: %v", err)
return fmt.Errorf("failed to parse resource record: %w", err)
}
z.Insert(r)
if err := z.Insert(r); err != nil {
return fmt.Errorf("failed to insert resource record: %w", err)
}
}
return nil
}
@@ -259,7 +261,7 @@ func (h *Route53) updateZones(ctx context.Context) error {
var out *route53.ListResourceRecordSetsOutput
for out, err = h.client.ListResourceRecordSets(ctx, in); !complete; out, err = h.client.ListResourceRecordSets(ctx, in) {
if err != nil {
err = fmt.Errorf("failed to list resource records for %v:%v from route53: %v", zName, hostedZone.id, err)
err = fmt.Errorf("failed to list resource records for %v:%v from route53: %w", zName, hostedZone.id, err)
return
}
for _, rrs := range out.ResourceRecordSets {

View File

@@ -225,7 +225,7 @@ func TestRoute53(t *testing.T) {
rec := dnstest.NewRecorder(&test.ResponseWriter{})
code, err := r.ServeDNS(ctx, rec, req)
if err != tc.expectedErr {
if !errors.Is(err, tc.expectedErr) {
t.Fatalf("Test %d: Expected error %v, but got %v", ti, tc.expectedErr, err)
}
if code != tc.wantRetCode {
@@ -285,7 +285,7 @@ func TestMaybeUnescape(t *testing.T) {
{escaped: `example.com\0`, wantErr: errors.New(`invalid escape sequence: '\0'`)},
} {
got, gotErr := maybeUnescape(tc.escaped)
if tc.wantErr != gotErr && !reflect.DeepEqual(tc.wantErr, gotErr) {
if !errors.Is(gotErr, tc.wantErr) && !reflect.DeepEqual(tc.wantErr, gotErr) {
t.Fatalf("Test %d: Expected error: `%v', but got: `%v'", ti, tc.wantErr, gotErr)
}
if tc.want != got {