From 74fa6f99cdc6fabeb995beae006c17c3eb518b22 Mon Sep 17 00:00:00 2001 From: blanchardma <119054558+blanchardma@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:58:52 +0200 Subject: [PATCH 1/2] fix(aws): add soft error --- provider/aws/aws.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provider/aws/aws.go b/provider/aws/aws.go index 0e2926bf4..f3202f99b 100644 --- a/provider/aws/aws.go +++ b/provider/aws/aws.go @@ -422,7 +422,7 @@ func (p *AWSProvider) records(ctx context.Context, zones map[string]*profiledZon for paginator.HasMorePages() { resp, err := paginator.NextPage(ctx) if err != nil { - return nil, fmt.Errorf("failed to list resource records sets for zone %s using aws profile %q: %w", *z.zone.Id, z.profile, err) + return nil, provider.NewSoftError(fmt.Errorf("failed to list resource records sets for zone %s using aws profile %q: %w", *z.zone.Id, z.profile, err)) } for _, r := range resp.ResourceRecordSets { From cd8cc00d9ed207c885400647084743df99e614b1 Mon Sep 17 00:00:00 2001 From: Vinh Nguyen Date: Tue, 19 Nov 2024 22:12:27 +0800 Subject: [PATCH 2/2] test: add soft error spec --- provider/aws/aws_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/provider/aws/aws_test.go b/provider/aws/aws_test.go index 806ed1d5c..30bbe2ca0 100644 --- a/provider/aws/aws_test.go +++ b/provider/aws/aws_test.go @@ -81,6 +81,10 @@ func NewRoute53APIStub(t *testing.T) *Route53APIStub { } func (r *Route53APIStub) ListResourceRecordSets(ctx context.Context, input *route53.ListResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ListResourceRecordSetsOutput, error) { + if r.m.isMocked("ListResourceRecordSets", input) { + return r.m.ListResourceRecordSets(ctx, input, optFns...) + } + output := &route53.ListResourceRecordSetsOutput{} // TODO: Support optional input args. require.NotNil(r.t, input.MaxItems) assert.EqualValues(r.t, route53PageSize, *input.MaxItems) @@ -240,6 +244,14 @@ type dynamicMock struct { mock.Mock } +func (m *dynamicMock) ListResourceRecordSets(ctx context.Context, input *route53.ListResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ListResourceRecordSetsOutput, error) { + args := m.Called(input) + if args.Get(0) != nil { + return args.Get(0).(*route53.ListResourceRecordSetsOutput), args.Error(1) + } + return nil, args.Error(1) +} + func (m *dynamicMock) ChangeResourceRecordSets(input *route53.ChangeResourceRecordSetsInput) (*route53.ChangeResourceRecordSetsOutput, error) { args := m.Called(input) if args.Get(0) != nil { @@ -518,6 +530,22 @@ func TestAWSRecords(t *testing.T) { }) } +func TestAWSRecordsSoftError(t *testing.T) { + pvd, subClient := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), false, false, []route53types.ResourceRecordSet{ + { + Name: aws.String("list-test.zone-1.ext-dns-test-2.teapot.zalan.do."), + Type: route53types.RRTypeA, + TTL: aws.Int64(recordTTL), + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + }, + }) + + subClient.MockMethod("ListResourceRecordSets", mock.Anything).Return(nil, fmt.Errorf("Mock route53 failure")) + _, err := pvd.Records(context.Background()) + require.Error(t, err) + require.ErrorIs(t, err, provider.SoftError) +} + func TestAWSAdjustEndpoints(t *testing.T) { provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, nil)