-
Notifications
You must be signed in to change notification settings - Fork 0
/
resolver.go
59 lines (49 loc) · 1.15 KB
/
resolver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package resolver
import (
"github.com/miekg/dns"
"github.com/shawnburke/dnsmock/config"
"github.com/shawnburke/dnsmock/spec"
"go.uber.org/zap"
)
type Resolver interface {
Resolve(msg *dns.Msg) (*dns.Msg, error)
}
const DownstreamLocalhost = "localhost"
const DownstreamNone = "none"
func Build(cfg config.Parameters, s *spec.Responses, logger *zap.Logger) Resolver {
resolvers := []Resolver{}
// if we are replaying, add the replay resolver
if s != nil && s.Count() > 0 {
resolvers = append(resolvers, NewReplay(s, logger))
}
// if we have downstreams,
ds := cfg.Downstreams()
if len(ds) > 0 {
for _, d := range ds {
var r Resolver
switch d {
case DownstreamNone:
continue
case DownstreamLocalhost:
r = NewLocal("", logger)
default:
resolvers = append(resolvers, NewDns(d, logger))
}
if r != nil {
resolvers = append(resolvers, r)
}
}
}
all := NewMulti(resolvers...)
if cfg.Record {
all = NewRecorder(all, s, logger)
}
return all
}
func AnswerStrings(response *dns.Msg) []string {
answers := []string{}
for _, a := range response.Answer {
answers = append(answers, a.String())
}
return answers
}