test

package
v0.0.0-...-a012604 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2019 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Overview

Package dnstest allows for easy testing of DNS client against a test server.

Index

Constants

View Source
const (
	// Answer is the answer section in an Msg.
	Answer sect = iota
	// Ns is the authoritative section in an Msg.
	Ns
	// Extra is the additional section in an Msg.
	Extra
)

Variables

This section is empty.

Functions

func A

func A(rr string) *dns.A

A returns an A record from rr. It panics on errors.

func AAAA

func AAAA(rr string) *dns.AAAA

AAAA returns an AAAA record from rr. It panics on errors.

func CAA

func CAA(rr string) *dns.CAA

CAA returns a CAA record from rr. It panics on errors.

func CNAME

func CNAME(rr string) *dns.CNAME

CNAME returns a CNAME record from rr. It panics on errors.

func CNAMEOrder

func CNAMEOrder(res *dns.Msg) error

CNAMEOrder makes sure that CNAMES do not appear after their target records

func DNAME

func DNAME(rr string) *dns.DNAME

DNAME returns a DNAME record from rr. It panics on errors.

func DNSKEY

func DNSKEY(rr string) *dns.DNSKEY

DNSKEY returns a DNSKEY record from rr. It panics on errors.

func DS

func DS(rr string) *dns.DS

DS returns a DS record from rr. It panics on errors.

func HINFO

func HINFO(rr string) *dns.HINFO

HINFO returns a HINFO record from rr. It panics on errors.

func Header(tc Case, resp *dns.Msg) error

Header test if the header in resp matches the header as defined in tc.

func MX

func MX(rr string) *dns.MX

MX returns an MX record from rr. It panics on errors.

func NS

func NS(rr string) *dns.NS

NS returns an NS record from rr. It panics on errors.

func NSEC

func NSEC(rr string) *dns.NSEC

NSEC returns an NSEC record from rr. It panics on errors.

func OPT

func OPT(bufsize int, do bool) *dns.OPT

OPT returns an OPT record with UDP buffer size set to bufsize and the DO bit set to do.

func PTR

func PTR(rr string) *dns.PTR

PTR returns a PTR record from rr. It panics on errors.

func RRSIG

func RRSIG(rr string) *dns.RRSIG

RRSIG returns an RRSIG record from rr. It panics on errors.

func SOA

func SOA(rr string) *dns.SOA

SOA returns a SOA record from rr. It panics on errors.

func SRV

func SRV(rr string) *dns.SRV

SRV returns a SRV record from rr. It panics on errors.

func Section

func Section(tc Case, sec sect, rr []dns.RR) error

Section tests if the section in tc matches rr.

func SortAndCheck

func SortAndCheck(resp *dns.Msg, tc Case) error

SortAndCheck sorts resp and the checks the header and three sections against the testcase in tc.

func TLSA

func TLSA(rr string) *dns.TLSA

TLSA returns a TLSA record from rr. It panics on errors.

func TXT

func TXT(rr string) *dns.TXT

TXT returns a TXT record from rr. It panics on errors.

Types

type Case

type Case struct {
	Qname  string
	Qtype  uint16
	Rcode  int
	Do     bool
	Answer []dns.RR
	Ns     []dns.RR
	Extra  []dns.RR
	Error  error
}

Case represents a test case that encapsulates various data from a query and response. Note that is the TTL of a record is 303 we don't compare it with the TTL.

func (Case) Msg

func (c Case) Msg() *dns.Msg

Msg returns a *dns.Msg embedded in c.

type Handler

type Handler interface {
	ServeDNS(context.Context, dns.ResponseWriter, *dns.Msg) (int, error)
	Name() string
}

Handler interface defines a plugin.

func ErrorHandler

func ErrorHandler() Handler

ErrorHandler returns a Handler that returns ServerFailure error when called.

func NextHandler

func NextHandler(rcode int, err error) Handler

NextHandler returns a Handler that returns rcode and err.

type HandlerFunc

type HandlerFunc func(context.Context, dns.ResponseWriter, *dns.Msg) (int, error)

HandlerFunc is a convenience type like dns.HandlerFunc, except ServeDNS returns an rcode and an error.

func (HandlerFunc) Name

func (f HandlerFunc) Name() string

Name implements the Handler interface.

func (HandlerFunc) ServeDNS

func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error)

ServeDNS implements the Handler interface.

type RRSet

type RRSet []dns.RR

RRSet represents a list of RRs.

func (RRSet) Len

func (p RRSet) Len() int

func (RRSet) Less

func (p RRSet) Less(i, j int) bool

func (RRSet) Swap

func (p RRSet) Swap(i, j int)

type Recorder

type Recorder struct {
	dns.ResponseWriter
	Rcode int
	Len   int
	Msg   *dns.Msg
	Start time.Time
}

Recorder is a type of ResponseWriter that captures the rcode code written to it and also the size of the message written in the response. A rcode code does not have to be written, however, in which case 0 must be assumed. It is best to have the constructor initialize this type with that default status code.

func NewRecorder

func NewRecorder(w dns.ResponseWriter) *Recorder

NewRecorder makes and returns a new Recorder, which captures the DNS rcode from the ResponseWriter and also the length of the response message written through it.

func (*Recorder) Write

func (r *Recorder) Write(buf []byte) (int, error)

Write is a wrapper that records the length of the message that gets written.

func (*Recorder) WriteMsg

func (r *Recorder) WriteMsg(res *dns.Msg) error

WriteMsg records the status code and calls the underlying ResponseWriter's WriteMsg method.

type ResponseWriter

type ResponseWriter struct {
	TCP bool // if TCP is true we return an TCP connection instead of an UDP one.
}

ResponseWriter is useful for writing tests. It uses some fixed values for the client. The remote will always be 10.240.0.1 and port 40212. The local address is always 127.0.0.1 and port 53.

func (*ResponseWriter) Close

func (t *ResponseWriter) Close() error

Close implement dns.ResponseWriter interface.

func (*ResponseWriter) Hijack

func (t *ResponseWriter) Hijack()

Hijack implement dns.ResponseWriter interface.

func (*ResponseWriter) LocalAddr

func (t *ResponseWriter) LocalAddr() net.Addr

LocalAddr returns the local address, 127.0.0.1:53 (UDP, TCP if t.TCP is true).

func (*ResponseWriter) RemoteAddr

func (t *ResponseWriter) RemoteAddr() net.Addr

RemoteAddr returns the remote address, always 10.240.0.1:40212 (UDP, TCP is t.TCP is true).

func (*ResponseWriter) TsigStatus

func (t *ResponseWriter) TsigStatus() error

TsigStatus implement dns.ResponseWriter interface.

func (*ResponseWriter) TsigTimersOnly

func (t *ResponseWriter) TsigTimersOnly(bool)

TsigTimersOnly implement dns.ResponseWriter interface.

func (*ResponseWriter) Write

func (t *ResponseWriter) Write(buf []byte) (int, error)

Write implement dns.ResponseWriter interface.

func (*ResponseWriter) WriteMsg

func (t *ResponseWriter) WriteMsg(m *dns.Msg) error

WriteMsg implement dns.ResponseWriter interface.

type ResponseWriter6

type ResponseWriter6 struct {
	ResponseWriter
}

ResponseWriter6 returns fixed client and remote address in IPv6. The remote address is always fe80::42:ff:feca:4c65 and port 40212. The local address is always ::1 and port 53.

func (*ResponseWriter6) LocalAddr

func (t *ResponseWriter6) LocalAddr() net.Addr

LocalAddr returns the local address, always ::1, port 53 (UDP, TCP is t.TCP is true).

func (*ResponseWriter6) RemoteAddr

func (t *ResponseWriter6) RemoteAddr() net.Addr

RemoteAddr returns the remote address, always fe80::42:ff:feca:4c65 port 40212 (UDP, TCP is t.TCP is true).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL