Peter Kurfer
d70ba748f5
- merge packages to get a more concise layout because plugins are no more and therefore there's not a lot to be exported - fix test logger - rework config parsing to be easier and more transparent - remove unnecessary APIs because dynamic endpoint handling is rather a won't implement
57 lines
968 B
Go
57 lines
968 B
Go
package mock
|
|
|
|
import (
|
|
"net"
|
|
"regexp"
|
|
|
|
"gitlab.com/inetmock/inetmock/internal/endpoint"
|
|
)
|
|
|
|
type resolverRule struct {
|
|
pattern *regexp.Regexp
|
|
response net.IP
|
|
}
|
|
|
|
type dnsOptions struct {
|
|
Rules []resolverRule
|
|
Fallback ResolverFallback
|
|
}
|
|
|
|
func loadFromConfig(lifecycle endpoint.Lifecycle) (options dnsOptions, err error) {
|
|
type rule struct {
|
|
Pattern string
|
|
Response string
|
|
}
|
|
|
|
type fallback struct {
|
|
Strategy string
|
|
Args map[string]interface{}
|
|
}
|
|
|
|
opts := struct {
|
|
Rules []rule
|
|
Fallback fallback
|
|
}{}
|
|
|
|
err = lifecycle.UnmarshalOptions(&opts)
|
|
|
|
for _, rule := range opts.Rules {
|
|
var err error
|
|
var rr resolverRule
|
|
if rr.pattern, err = regexp.Compile(rule.Pattern); err != nil {
|
|
continue
|
|
}
|
|
|
|
if rr.response = net.ParseIP(rule.Response); rr.response == nil {
|
|
continue
|
|
}
|
|
options.Rules = append(options.Rules, rr)
|
|
}
|
|
|
|
options.Fallback = CreateResolverFallback(
|
|
opts.Fallback.Strategy,
|
|
opts.Fallback.Args,
|
|
)
|
|
|
|
return
|
|
}
|