in tester/dns/tester.go [74:101]
func (t *Tester) RequestExecutor(options interface{}) (bender.RequestExecutor, error) {
innerExecutor := protocol.CreateExecutor(t.client, validator, t.Target)
return func(n int64, request interface{}) (interface{}, error) {
asExtended, ok := request.(*ExtendedMsg)
if !ok {
return nil, fmt.Errorf("%w: invalid type, want: *ExtendedMsg, got: %T", ErrInvalidRequest, request)
}
resp, err := innerExecutor(n, &asExtended.Msg)
if err != nil {
return resp, err
}
asMsg, ok := resp.(*dns.Msg)
if !ok {
return nil, fmt.Errorf("%w: invalid type, want: *dns.Msg, got: %T", ErrInvalidResponse, resp)
}
if asExtended.Rcode != -1 && asExtended.Rcode != asMsg.Rcode {
return resp, fmt.Errorf(
"%w: invalid rcode want: %q, got: %q", ErrInvalidResponse,
dns.RcodeToString[asExtended.Rcode], dns.RcodeToString[asMsg.Rcode])
}
return resp, nil
}, nil
}