From 6d557f0a4ddd4cf007e293f6ce09a778cd0fac3a Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Tue, 7 Nov 2023 14:01:44 +0000 Subject: [PATCH 1/3] Tests for buildTaskInfoToRrsets --- clouddns_test.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/clouddns_test.go b/clouddns_test.go index 086d68f..2dd5616 100644 --- a/clouddns_test.go +++ b/clouddns_test.go @@ -408,3 +408,66 @@ func Test_mergeZoneEntryIntoRrsets(t *testing.T) { }) } } + +func Test_buildTaskInfoToRrsets(t *testing.T) { + test_default_ttl := 60 + type args struct { + tasks []TaskInfo + default_ttl *int + } + tests := []struct { + name string + args args + want []*dns.ResourceRecordSet + wantErr bool + }{ + // TODO: Add test cases. + { + name: "EmptyTaskInfo", + args: args{ + tasks: []TaskInfo{}, + }, + want: []*dns.ResourceRecordSet{}, + wantErr: false, + }, + { + name: "SimpleTaskInfo", + args: args{ + tasks: []TaskInfo{ + { + jobid: "doot", + ip: "1.2.3.4", + }, + }, + default_ttl: &test_default_ttl, + }, + want: []*dns.ResourceRecordSet{ + { + Name: "doot", + Type: "A", + Ttl: int64(test_default_ttl), + Rrdatas: []string{"1.2.3.4"}, + }, + }, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := buildTaskInfoToRrsets(tt.args.tasks, tt.args.default_ttl) + if (err != nil) != tt.wantErr { + t.Errorf("buildTaskInfoToRrsets() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !rrsetListEquals(got, tt.want) { + for _, rr := range tt.want { + t.Logf("Want: %s", describeRrset(rr)) + } + for _, rr := range got { + t.Logf("Got : %s", describeRrset(rr)) + } + t.Errorf("buildTaskInfoToRrsets() = %v, want %v", got, tt.want) + } + }) + } +} From f9da18a7caf68a829f08b743312513ad25595388 Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Tue, 7 Nov 2023 20:56:43 +0000 Subject: [PATCH 2/3] Add tests for buildDNSChange --- clouddns.go | 8 ++++---- clouddns_test.go | 31 ++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/clouddns.go b/clouddns.go index 8520a78..6825997 100644 --- a/clouddns.go +++ b/clouddns.go @@ -175,7 +175,7 @@ func buildNomadDnsChange(dnsSpec *CloudDNSSpec, tasks []TaskInfo, pruneMissing b return nil, err } - ret := buildDnsChange(cloud_rrs, nomad_rrs, &pruneMissing) + ret := buildDnsChange(cloud_rrs, nomad_rrs, pruneMissing) return ret, nil } @@ -322,12 +322,12 @@ func uploadZonefile(dnsSpec *CloudDNSSpec, zoneFilename *string, dryRun *bool, p log.Fatal("Getting RRs for zone:", dnsSpec.zone) } - change := buildDnsChange(cloud_rrs, zone_rrs, pruneMissing) + change := buildDnsChange(cloud_rrs, zone_rrs, *pruneMissing) return processCloudDnsChange(dnsSpec, change) } -func buildDnsChange(cloud_rrs, zone_rrs []*dns.ResourceRecordSet, prune_missing *bool) *dns.Change { +func buildDnsChange(cloud_rrs, zone_rrs []*dns.ResourceRecordSet, prune_missing bool) *dns.Change { ret := dns.Change{} @@ -350,7 +350,7 @@ func buildDnsChange(cloud_rrs, zone_rrs []*dns.ResourceRecordSet, prune_missing ret.Additions = append(ret.Additions, z) } } - if *prune_missing { + if prune_missing { for _, c := range cloud_rrs { found := false if c.Type == "SOA" || c.Type == "NS" { diff --git a/clouddns_test.go b/clouddns_test.go index 2dd5616..78edea2 100644 --- a/clouddns_test.go +++ b/clouddns_test.go @@ -421,7 +421,6 @@ func Test_buildTaskInfoToRrsets(t *testing.T) { want []*dns.ResourceRecordSet wantErr bool }{ - // TODO: Add test cases. { name: "EmptyTaskInfo", args: args{ @@ -471,3 +470,33 @@ func Test_buildTaskInfoToRrsets(t *testing.T) { }) } } + +func Test_buildDnsChange(t *testing.T) { + type args struct { + cloud_rrs []*dns.ResourceRecordSet + zone_rrs []*dns.ResourceRecordSet + prune_missing bool + } + tests := []struct { + name string + args args + want *dns.Change + }{ + { + name: "BothEmpty", + args: args{ + cloud_rrs: []*dns.ResourceRecordSet{}, + zone_rrs: []*dns.ResourceRecordSet{}, + prune_missing: false, + }, + want: &dns.Change{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := buildDnsChange(tt.args.cloud_rrs, tt.args.zone_rrs, tt.args.prune_missing); !reflect.DeepEqual(got, tt.want) { + t.Errorf("buildDnsChange() = %v, want %v", got, tt.want) + } + }) + } +} From 7952fabb05ea6e27a92cb8b6192ece791b934525 Mon Sep 17 00:00:00 2001 From: Dave O'Connor Date: Tue, 7 Nov 2023 21:11:08 +0000 Subject: [PATCH 3/3] Last of boilerplate tests for clouddns.go --- clouddns_test.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/clouddns_test.go b/clouddns_test.go index 78edea2..55b49c5 100644 --- a/clouddns_test.go +++ b/clouddns_test.go @@ -472,6 +472,22 @@ func Test_buildTaskInfoToRrsets(t *testing.T) { } func Test_buildDnsChange(t *testing.T) { + simpleARecord := &dns.ResourceRecordSet{ + Name: "doot.doot.", + Type: "A", + Rrdatas: []string{"1.2.3.4"}, + } + otherARecord := &dns.ResourceRecordSet{ + Name: "doot.doot.", + Type: "A", + Rrdatas: []string{"5.6.7.8"}, + } + simpleCnameRecord := &dns.ResourceRecordSet{ + Name: "otherdoot.doot.", + Type: "CNAME", + Rrdatas: []string{"doot.doot."}, + } + type args struct { cloud_rrs []*dns.ResourceRecordSet zone_rrs []*dns.ResourceRecordSet @@ -491,6 +507,51 @@ func Test_buildDnsChange(t *testing.T) { }, want: &dns.Change{}, }, + { + name: "SingleRecordIntoEmptyCloud", + args: args{ + cloud_rrs: []*dns.ResourceRecordSet{}, + zone_rrs: []*dns.ResourceRecordSet{simpleARecord}, + prune_missing: false, + }, + want: &dns.Change{ + Additions: []*dns.ResourceRecordSet{simpleARecord}, + }, + }, + { + name: "AdditionalRecordIntoNonEmptyCloud", + args: args{ + cloud_rrs: []*dns.ResourceRecordSet{simpleCnameRecord}, + zone_rrs: []*dns.ResourceRecordSet{simpleCnameRecord, simpleARecord}, + prune_missing: false, + }, + want: &dns.Change{ + Additions: []*dns.ResourceRecordSet{simpleARecord}, + }, + }, + { + name: "PruneMissing", + args: args{ + cloud_rrs: []*dns.ResourceRecordSet{simpleCnameRecord, simpleARecord}, + zone_rrs: []*dns.ResourceRecordSet{simpleCnameRecord}, + prune_missing: true, + }, + want: &dns.Change{ + Deletions: []*dns.ResourceRecordSet{simpleARecord}, + }, + }, + { + name: "ReplaceExistingRecord", + args: args{ + cloud_rrs: []*dns.ResourceRecordSet{simpleARecord}, + zone_rrs: []*dns.ResourceRecordSet{otherARecord}, + prune_missing: true, + }, + want: &dns.Change{ + Deletions: []*dns.ResourceRecordSet{simpleARecord}, + Additions: []*dns.ResourceRecordSet{otherARecord}, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {