Normalize empty DNS action arrays
This commit is contained in:
parent
51203ccc31
commit
6d64cbc203
2 changed files with 47 additions and 5 deletions
17
service.go
17
service.go
|
|
@ -423,7 +423,7 @@ func (service *Service) ResolveTXTRecords(name string) (ResolveTXTResult, bool)
|
|||
return ResolveTXTResult{}, false
|
||||
}
|
||||
return ResolveTXTResult{
|
||||
TXT: append([]string(nil), record.TXT...),
|
||||
TXT: cloneStrings(record.TXT),
|
||||
}, true
|
||||
}
|
||||
|
||||
|
|
@ -573,10 +573,10 @@ func (service *Service) findRecord(name string) (NameRecords, bool) {
|
|||
|
||||
func resolveResult(record NameRecords) ResolveAllResult {
|
||||
return ResolveAllResult{
|
||||
A: append([]string(nil), record.A...),
|
||||
AAAA: append([]string(nil), record.AAAA...),
|
||||
TXT: append([]string(nil), record.TXT...),
|
||||
NS: append([]string(nil), record.NS...),
|
||||
A: cloneStrings(record.A),
|
||||
AAAA: cloneStrings(record.AAAA),
|
||||
TXT: cloneStrings(record.TXT),
|
||||
NS: cloneStrings(record.NS),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -699,6 +699,13 @@ func serializeRecordValues(values []string) string {
|
|||
return strings.Join(copied, ",")
|
||||
}
|
||||
|
||||
func cloneStrings(values []string) []string {
|
||||
if len(values) == 0 {
|
||||
return []string{}
|
||||
}
|
||||
return append([]string(nil), values...)
|
||||
}
|
||||
|
||||
func findWildcardMatch(name string, records map[string]NameRecords) (NameRecords, bool) {
|
||||
bestMatch := ""
|
||||
for candidate := range records {
|
||||
|
|
|
|||
|
|
@ -1229,6 +1229,41 @@ func TestServiceResolveAllSynthesizesNSForDerivedZoneApex(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestServiceResolveAllReturnsEmptyArraysForMissingRecordValues(t *testing.T) {
|
||||
service := NewService(ServiceOptions{
|
||||
Records: map[string]NameRecords{
|
||||
"gateway.charon.lthn": {
|
||||
A: []string{"10.10.10.10"},
|
||||
},
|
||||
"node.charon.lthn": {
|
||||
AAAA: []string{"2600:1f1c:7f0:4f01::2"},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
result, ok := service.ResolveAll("gateway.charon.lthn")
|
||||
if !ok {
|
||||
t.Fatal("expected record to resolve")
|
||||
}
|
||||
if result.AAAA == nil || len(result.AAAA) != 0 {
|
||||
t.Fatalf("expected empty AAAA slice, got %#v", result.AAAA)
|
||||
}
|
||||
if result.TXT == nil || len(result.TXT) != 0 {
|
||||
t.Fatalf("expected empty TXT slice, got %#v", result.TXT)
|
||||
}
|
||||
if result.NS == nil || len(result.NS) != 0 {
|
||||
t.Fatalf("expected empty NS slice, got %#v", result.NS)
|
||||
}
|
||||
|
||||
raw, err := json.Marshal(result)
|
||||
if err != nil {
|
||||
t.Fatalf("expected result to marshal: %v", err)
|
||||
}
|
||||
if string(raw) != `{"a":["10.10.10.10"],"aaaa":[],"txt":[],"ns":[]}` {
|
||||
t.Fatalf("expected empty arrays in JSON, got %s", raw)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceServeReturnsNXDOMAINWhenMissing(t *testing.T) {
|
||||
service := NewService(ServiceOptions{})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue