aghtest

package
v0.108.0-b.40 Latest Latest
Warning

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

Go to latest
Published: Jul 11, 2023 License: GPL-3.0 Imports: 17 Imported by: 0

Documentation

Overview

Package aghtest contains utilities for testing.

Index

Constants

View Source
const ErrUpstream errors.Error = "test upstream error"

ErrUpstream is the error returned from the *UpstreamMock created by NewErrorUpstream.

Variables

This section is empty.

Functions

func MatchedResponse added in v0.107.17

func MatchedResponse(req *dns.Msg, qt uint16, targ, answer string) (resp *dns.Msg)

MatchedResponse is a test helper that returns a response with answer if req has question type qt, and target targ. Otherwise, it returns nil.

req must not be nil and req.Question must have a length of 1. Answer is interpreted in the following ways:

  • For A and AAAA queries, answer must be an IP address of the corresponding protocol version.

  • For PTR queries, answer should be a domain name in the response.

If the answer does not correspond to the question type, MatchedResponse panics. Panics are used instead of testing.TB, because the helper is intended to use in [UpstreamMock.OnExchange] callbacks, which are usually called in a separate goroutine.

TODO(a.garipov): Consider adding version with DNS class as well.

func ReplaceLogLevel

func ReplaceLogLevel(t testing.TB, l log.Level)

ReplaceLogLevel sets logging level to l and uses Cleanup method of t to revert changes.

func ReplaceLogWriter

func ReplaceLogWriter(t testing.TB, w io.Writer)

ReplaceLogWriter moves logger output to w and uses Cleanup method of t to revert changes.

Types

type FS added in v0.107.0

type FS struct {
	OnOpen func(name string) (fs.File, error)
}

FS is a fake fs.FS implementation for tests.

func (*FS) Open added in v0.107.0

func (fsys *FS) Open(name string) (fs.File, error)

Open implements the fs.FS interface for *FS.

type FSWatcher added in v0.107.0

type FSWatcher struct {
	OnEvents func() (e <-chan struct{})
	OnAdd    func(name string) (err error)
	OnClose  func() (err error)
}

FSWatcher is a fake aghos.FSWatcher implementation for tests.

func (*FSWatcher) Add added in v0.107.0

func (w *FSWatcher) Add(name string) (err error)

Add implements the aghos.FSWatcher interface for *FSWatcher.

func (*FSWatcher) Close added in v0.107.0

func (w *FSWatcher) Close() (err error)

Close implements the aghos.FSWatcher interface for *FSWatcher.

func (*FSWatcher) Events added in v0.107.0

func (w *FSWatcher) Events() (e <-chan struct{})

Events implements the aghos.FSWatcher interface for *FSWatcher.

type GlobFS added in v0.107.0

type GlobFS struct {
	// FS is embedded here to avoid implementing all it's methods.
	FS
	OnGlob func(pattern string) ([]string, error)
}

GlobFS is a fake fs.GlobFS implementation for tests.

func (*GlobFS) Glob added in v0.107.0

func (fsys *GlobFS) Glob(pattern string) ([]string, error)

Glob implements the fs.GlobFS interface for *GlobFS.

type ServiceWithConfig added in v0.107.34

type ServiceWithConfig[ConfigType any] struct {
	OnStart    func() (err error)
	OnShutdown func(ctx context.Context) (err error)
	OnConfig   func() (c ConfigType)
}

ServiceWithConfig is a fake agh.ServiceWithConfig implementation for tests.

func (*ServiceWithConfig[ConfigType]) Config added in v0.107.34

func (s *ServiceWithConfig[ConfigType]) Config() (c ConfigType)

Config implements the agh.ServiceWithConfig interface for *ServiceWithConfig.

func (*ServiceWithConfig[_]) Shutdown added in v0.107.34

func (s *ServiceWithConfig[_]) Shutdown(ctx context.Context) (err error)

Shutdown implements the agh.ServiceWithConfig interface for *ServiceWithConfig.

func (*ServiceWithConfig[_]) Start added in v0.107.34

func (s *ServiceWithConfig[_]) Start() (err error)

Start implements the agh.ServiceWithConfig interface for *ServiceWithConfig.

type StatFS added in v0.107.0

type StatFS struct {
	// FS is embedded here to avoid implementing all it's methods.
	FS
	OnStat func(name string) (fs.FileInfo, error)
}

StatFS is a fake fs.StatFS implementation for tests.

func (*StatFS) Stat added in v0.107.0

func (fsys *StatFS) Stat(name string) (fs.FileInfo, error)

Stat implements the fs.StatFS interface for *StatFS.

type TestResolver

type TestResolver struct {
	// contains filtered or unexported fields
}

TestResolver is a Resolver for tests.

func (*TestResolver) Counter

func (r *TestResolver) Counter() int

Counter returns the number of requests handled.

func (*TestResolver) HostToIPs

func (r *TestResolver) HostToIPs(host string) (ipv4, ipv6 net.IP)

HostToIPs generates IPv4 and IPv6 from host.

func (*TestResolver) LookupHost

func (r *TestResolver) LookupHost(host string) (addrs []string, err error)

LookupHost implements Resolver interface for *testResolver. It returns the slice of IPv4 and IPv6 instances converted to strings.

func (*TestResolver) LookupIP added in v0.106.0

func (r *TestResolver) LookupIP(_ context.Context, _, host string) (ips []net.IP, err error)

LookupIP implements Resolver interface for *testResolver. It returns the slice of net.IP with IPv4 and IPv6 instances.

type Upstream added in v0.107.7

type Upstream struct {
	// CName is a map of hostname to canonical name.
	CName map[string][]string
	// IPv4 is a map of hostname to IPv4.
	IPv4 map[string][]net.IP
	// IPv6 is a map of hostname to IPv6.
	IPv6 map[string][]net.IP
}

Upstream is a mock implementation of upstream.Upstream.

TODO(a.garipov): Replace with UpstreamMock and rename it to just Upstream.

func (*Upstream) Address added in v0.107.7

func (u *Upstream) Address() string

Address implements upstream.Upstream interface for *Upstream.

func (*Upstream) Close added in v0.107.17

func (u *Upstream) Close() (err error)

Close implements upstream.Upstream interface for *Upstream.

func (*Upstream) Exchange added in v0.107.7

func (u *Upstream) Exchange(m *dns.Msg) (resp *dns.Msg, err error)

Exchange implements the upstream.Upstream interface for *Upstream.

TODO(a.garipov): Split further into handlers.

type UpstreamMock added in v0.107.10

type UpstreamMock struct {
	OnAddress  func() (addr string)
	OnExchange func(req *dns.Msg) (resp *dns.Msg, err error)
	OnClose    func() (err error)
}

UpstreamMock is a fake upstream.Upstream implementation for tests.

TODO(a.garipov): Replace with all uses of Upstream with UpstreamMock and rename it to just Upstream.

func NewBlockUpstream added in v0.107.10

func NewBlockUpstream(hostname string, shouldBlock bool) (u *UpstreamMock)

NewBlockUpstream returns an *UpstreamMock that works like an upstream that supports hash-based safe-browsing/adult-blocking feature. If shouldBlock is true, hostname's actual hash is returned, blocking it. Otherwise, it returns a different hash.

func NewErrorUpstream added in v0.107.10

func NewErrorUpstream() (u *UpstreamMock)

NewErrorUpstream returns an *UpstreamMock that returns ErrUpstream from its Exchange method.

func NewUpstreamMock added in v0.107.17

func NewUpstreamMock(onExc func(req *dns.Msg) (resp *dns.Msg, err error)) (u *UpstreamMock)

NewUpstreamMock returns an *UpstreamMock, fields OnAddress and OnClose of which are set to stubs that return "upstream.example" and nil respectively. The field OnExchange is set to onExc.

func (*UpstreamMock) Address added in v0.107.10

func (u *UpstreamMock) Address() (addr string)

Address implements the upstream.Upstream interface for *UpstreamMock.

func (*UpstreamMock) Close added in v0.107.17

func (u *UpstreamMock) Close() (err error)

Close implements the upstream.Upstream interface for *UpstreamMock.

func (*UpstreamMock) Exchange added in v0.107.10

func (u *UpstreamMock) Exchange(req *dns.Msg) (resp *dns.Msg, err error)

Exchange implements the upstream.Upstream interface for *UpstreamMock.

type Writer added in v0.107.34

type Writer struct {
	OnWrite func(b []byte) (n int, err error)
}

Writer is a fake io.Writer implementation for tests.

func (*Writer) Write added in v0.107.34

func (w *Writer) Write(b []byte) (n int, err error)

Write implements the io.Writer interface for *Writer.

Jump to

Keyboard shortcuts

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