Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Commit

Permalink
Route53 hosted zones implementation (#60)
Browse files Browse the repository at this point in the history
* Route53 implementation

Co-authored-by: Andrii Romanenko <arforgethedev@gmail.com>
Co-authored-by: Ron <38083777+roneli@users.noreply.github.com>
  • Loading branch information
3 people committed May 17, 2021
1 parent dd5f58f commit b79c426
Show file tree
Hide file tree
Showing 14 changed files with 1,372 additions and 13 deletions.
9 changes: 5 additions & 4 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,13 @@ import (
"fmt"
"time"

"github.com/hashicorp/go-hclog"

"github.com/aws/aws-sdk-go-v2/service/cloudfront"

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/retry"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials/stscreds"
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
"github.com/aws/aws-sdk-go-v2/service/autoscaling"
"github.com/aws/aws-sdk-go-v2/service/cloudfront"
"github.com/aws/aws-sdk-go-v2/service/cloudtrail"
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
"github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs"
Expand All @@ -34,10 +31,12 @@ import (
"github.com/aws/aws-sdk-go-v2/service/organizations"
"github.com/aws/aws-sdk-go-v2/service/rds"
"github.com/aws/aws-sdk-go-v2/service/redshift"
"github.com/aws/aws-sdk-go-v2/service/route53"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/aws/aws-sdk-go-v2/service/sns"
"github.com/aws/aws-sdk-go-v2/service/sts"
"github.com/cloudquery/cq-provider-sdk/provider/schema"
"github.com/hashicorp/go-hclog"
)

// Provider Client passed as meta to all table fetchers
Expand Down Expand Up @@ -88,6 +87,7 @@ type Services struct {
KMS KmsClient
Organizations OrganizationsClient
Redshift RedshiftClient
Route53 Route53Client
RDS RdsClient
S3 S3Client
S3Manager S3ManagerClient
Expand Down Expand Up @@ -274,6 +274,7 @@ func initServices(awsCfg aws.Config) Services {
Organizations: organizations.NewFromConfig(awsCfg),
RDS: rds.NewFromConfig(awsCfg),
Redshift: redshift.NewFromConfig(awsCfg),
Route53: route53.NewFromConfig(awsCfg),
S3Manager: newS3ManagerFromConfig(awsCfg),
}
}
Expand Down
153 changes: 150 additions & 3 deletions client/mocks/builders_test.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package mocks_test

import (
"fmt"
"testing"

"github.com/aws/aws-sdk-go-v2/service/cloudfront"
cloudfrontTypes "github.com/aws/aws-sdk-go-v2/service/cloudfront/types"

"github.com/aws/aws-sdk-go-v2/service/autoscaling"
autoscalingTypes "github.com/aws/aws-sdk-go-v2/service/autoscaling/types"
"github.com/aws/aws-sdk-go-v2/service/cloudfront"
cloudfrontTypes "github.com/aws/aws-sdk-go-v2/service/cloudfront/types"
"github.com/aws/aws-sdk-go-v2/service/cloudtrail"
cloudtrailTypes "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types"
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
Expand Down Expand Up @@ -41,6 +41,8 @@ import (
rdsTypes "github.com/aws/aws-sdk-go-v2/service/rds/types"
"github.com/aws/aws-sdk-go-v2/service/redshift"
redshiftTypes "github.com/aws/aws-sdk-go-v2/service/redshift/types"
"github.com/aws/aws-sdk-go-v2/service/route53"
route53Types "github.com/aws/aws-sdk-go-v2/service/route53/types"
"github.com/aws/aws-sdk-go-v2/service/s3"
s3Types "github.com/aws/aws-sdk-go-v2/service/s3/types"
"github.com/aws/aws-sdk-go-v2/service/sns"
Expand Down Expand Up @@ -260,6 +262,151 @@ func buildRedshiftSubnetGroupsMock(t *testing.T, ctrl *gomock.Controller) client
}
}

func buildRoute53HostedZonesMock(t *testing.T, ctrl *gomock.Controller) client.Services {
m := mocks.NewMockRoute53Client(ctrl)
h := route53Types.HostedZone{}
if err := faker.FakeData(&h); err != nil {
t.Fatal(err)
}
m.EXPECT().ListHostedZones(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListHostedZonesOutput{
HostedZones: []route53Types.HostedZone{h},
}, nil)
tag := route53Types.Tag{}
if err := faker.FakeData(&tag); err != nil {
t.Fatal(err)
}
//create id that is usually returned by aws
hzId := *h.Id
newId := fmt.Sprintf("/%s/%s", route53Types.TagResourceTypeHostedzone, *h.Id)
h.Id = &newId
m.EXPECT().ListTagsForResources(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListTagsForResourcesOutput{
ResourceTagSets: []route53Types.ResourceTagSet{
{
ResourceId: &hzId,
Tags: []route53Types.Tag{tag},
},
},
}, nil)
qlc := route53Types.QueryLoggingConfig{}
if err := faker.FakeData(&qlc); err != nil {
t.Fatal(err)
}
m.EXPECT().ListQueryLoggingConfigs(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListQueryLoggingConfigsOutput{
QueryLoggingConfigs: []route53Types.QueryLoggingConfig{qlc},
}, nil)
rrs := route53Types.ResourceRecordSet{}
if err := faker.FakeData(&rrs); err != nil {
t.Fatal(err)
}
m.EXPECT().ListResourceRecordSets(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListResourceRecordSetsOutput{
ResourceRecordSets: []route53Types.ResourceRecordSet{rrs},
}, nil)
tpi := route53Types.TrafficPolicyInstance{}
if err := faker.FakeData(&tpi); err != nil {
t.Fatal(err)
}
m.EXPECT().ListTrafficPolicyInstancesByHostedZone(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListTrafficPolicyInstancesByHostedZoneOutput{
TrafficPolicyInstances: []route53Types.TrafficPolicyInstance{tpi},
}, nil)
vpc := route53Types.VPC{}
if err := faker.FakeData(&vpc); err != nil {
t.Fatal(err)
}
ds := route53Types.DelegationSet{}
if err := faker.FakeData(&ds); err != nil {
t.Fatal(err)
}
m.EXPECT().GetHostedZone(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.GetHostedZoneOutput{
HostedZone: &h,
DelegationSet: &ds,
VPCs: []route53Types.VPC{vpc},
}, nil)
return client.Services{
Route53: m,
}
}

func buildRoute53TrafficPoliciesMock(t *testing.T, ctrl *gomock.Controller) client.Services {
m := mocks.NewMockRoute53Client(ctrl)
tps := route53Types.TrafficPolicySummary{}
if err := faker.FakeData(&tps); err != nil {
t.Fatal(err)
}
m.EXPECT().ListTrafficPolicies(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListTrafficPoliciesOutput{
TrafficPolicySummaries: []route53Types.TrafficPolicySummary{tps},
}, nil)
tp := route53Types.TrafficPolicy{}
if err := faker.FakeData(&tp); err != nil {
t.Fatal(err)
}
tp.Id = tps.Id
jsonStr := "{\"test\": \"test\"}"
tp.Document = &jsonStr
m.EXPECT().ListTrafficPolicyVersions(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListTrafficPolicyVersionsOutput{
TrafficPolicies: []route53Types.TrafficPolicy{tp},
}, nil)
return client.Services{
Route53: m,
}
}

func buildRoute53DelegationSetsMock(t *testing.T, ctrl *gomock.Controller) client.Services {
m := mocks.NewMockRoute53Client(ctrl)
ds := route53Types.DelegationSet{}
if err := faker.FakeData(&ds); err != nil {
t.Fatal(err)
}
m.EXPECT().ListReusableDelegationSets(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListReusableDelegationSetsOutput{
DelegationSets: []route53Types.DelegationSet{ds},
}, nil)
return client.Services{
Route53: m,
}
}

func buildRoute53HealthChecksMock(t *testing.T, ctrl *gomock.Controller) client.Services {
m := mocks.NewMockRoute53Client(ctrl)
hc := route53Types.HealthCheck{}
if err := faker.FakeData(&hc); err != nil {
t.Fatal(err)
}
m.EXPECT().ListHealthChecks(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListHealthChecksOutput{
HealthChecks: []route53Types.HealthCheck{hc},
}, nil)
tag := route53Types.Tag{}
if err := faker.FakeData(&tag); err != nil {
t.Fatal(err)
}
//m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any(), gomock.Any()).Return(
// &route53.ListTagsForResourceOutput{
// ResourceTagSet: &route53Types.ResourceTagSet{
// Tags: []route53Types.Tag{tag},
// },
// }, nil)
m.EXPECT().ListTagsForResources(gomock.Any(), gomock.Any(), gomock.Any()).Return(
&route53.ListTagsForResourcesOutput{
ResourceTagSets: []route53Types.ResourceTagSet{
{
ResourceId: hc.Id,
Tags: []route53Types.Tag{tag},
},
},
}, nil)
return client.Services{
Route53: m,
}
}

func buildCloudwatchLogsFiltersMock(t *testing.T, ctrl *gomock.Controller) client.Services {
m := mocks.NewMockCloudwatchLogsClient(ctrl)
l := cloudwatchlogsTypes.MetricFilter{}
Expand Down
27 changes: 23 additions & 4 deletions client/mocks/mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,9 @@ import (
)

type TestResource struct {
resource string
mockBuilder func(*testing.T, *gomock.Controller) client.Services
mainTable *schema.Table
verifyEmptyColumns bool
resource string
mockBuilder func(*testing.T, *gomock.Controller) client.Services
mainTable *schema.Table
}

func getEnv(key, fallback string) string {
Expand Down Expand Up @@ -316,6 +315,26 @@ func TestResources(t *testing.T) {
mainTable: resources.Ec2VpcEndpoints(),
mockBuilder: buildEc2VpcEndpoints,
},
{
resource: "route53.hosted_zones",
mainTable: resources.Route53HostedZones(),
mockBuilder: buildRoute53HostedZonesMock,
},
{
resource: "route53.traffic_policies",
mainTable: resources.Route53TrafficPolicies(),
mockBuilder: buildRoute53TrafficPoliciesMock,
},
{
resource: "route53.health_checks",
mainTable: resources.Route53HealthChecks(),
mockBuilder: buildRoute53HealthChecksMock,
},
{
resource: "route53.reusable_delegation_sets",
mainTable: resources.Route53ReusableDelegationSets(),
mockBuilder: buildRoute53DelegationSetsMock,
},
}
for _, tc := range testResourcesTable {
t.Run(tc.resource, func(t *testing.T) {
Expand Down
Loading

0 comments on commit b79c426

Please sign in to comment.