func()

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
}