Documentation ¶
Overview ¶
Package testutils contains testing helpers.
Index ¶
- Constants
- Variables
- func IsRoundRobin(want []balancer.SubConn, f func() balancer.SubConn) error
- func LocalTCPListener() (net.Listener, error)
- func MarshalAny(m proto.Message) *anypb.Any
- func NewTestWRR() wrr.WRR
- func StatusErrEqual(err1, err2 error) bool
- type Channel
- func (c *Channel) Receive(ctx context.Context) (interface{}, error)
- func (c *Channel) ReceiveOrFail() (interface{}, bool)
- func (c *Channel) Replace(value interface{})
- func (c *Channel) Send(value interface{})
- func (c *Channel) SendContext(ctx context.Context, value interface{}) error
- func (c *Channel) SendOrFail(value interface{}) bool
- type FakeHTTPClient
- type PipeListener
- type RestartableListener
- type TestClientConn
- func (tcc *TestClientConn) NewSubConn(a []resolver.Address, o balancer.NewSubConnOptions) (balancer.SubConn, error)
- func (tcc *TestClientConn) RemoveSubConn(sc balancer.SubConn)
- func (tcc *TestClientConn) ResolveNow(o resolver.ResolveNowOptions)
- func (tcc *TestClientConn) Target() string
- func (tcc *TestClientConn) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address)
- func (tcc *TestClientConn) UpdateState(bs balancer.State)
- func (tcc *TestClientConn) WaitForErrPicker(ctx context.Context) error
- type TestConstPicker
- type TestSubConn
Constants ¶
const DefaultChanBufferSize = 1
DefaultChanBufferSize is the default buffer size of the underlying channel.
const DefaultHTTPRequestTimeout = 1 * time.Second
DefaultHTTPRequestTimeout is the default timeout value for the amount of time this client waits for a response to be pushed on RespChan before it fails the Do() call.
const TestSubConnsCount = 16
TestSubConnsCount is the number of TestSubConns initialized as part of package init.
Variables ¶
var ErrTestConstPicker = fmt.Errorf("const picker error")
ErrTestConstPicker is error returned by test const picker.
var TestSubConns []*TestSubConn
TestSubConns contains a list of SubConns to be used in tests.
Functions ¶
func IsRoundRobin ¶
IsRoundRobin checks whether f's return value is roundrobin of elements from want. But it doesn't check for the order. Note that want can contain duplicate items, which makes it weight-round-robin.
Step 1. the return values of f should form a permutation of all elements in want, but not necessary in the same order. E.g. if want is {a,a,b}, the check fails if f returns:
- {a,a,a}: third a is returned before b
- {a,b,b}: second b is returned before the second a
If error is found in this step, the returned error contains only the first iteration until where it goes wrong.
Step 2. the return values of f should be repetitions of the same permutation. E.g. if want is {a,a,b}, the check failes if f returns:
- {a,b,a,b,a,a}: though it satisfies step 1, the second iteration is not repeating the first iteration.
If error is found in this step, the returned error contains the first iteration + the second iteration until where it goes wrong.
func LocalTCPListener ¶
LocalTCPListener returns a net.Listener listening on local address and port.
func MarshalAny ¶
MarshalAny is a convenience function to marshal protobuf messages into any protos. It will panic if the marshaling fails.
func NewTestWRR ¶
NewTestWRR return a WRR for testing. It's deterministic instead of random.
func StatusErrEqual ¶
StatusErrEqual returns true iff both err1 and err2 wrap status.Status errors and their underlying status protos are equal.
Types ¶
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
Channel wraps a generic channel and provides a timed receive operation.
func NewChannelWithSize ¶
NewChannelWithSize returns a new Channel with a buffer of bufSize.
func (*Channel) Receive ¶
Receive returns the value received on the underlying channel, or the error returned by ctx if it is closed or cancelled.
func (*Channel) ReceiveOrFail ¶
ReceiveOrFail returns the value on the underlying channel and true, or nil and false if the channel was empty.
func (*Channel) Replace ¶
func (c *Channel) Replace(value interface{})
Replace clears the value on the underlying channel, and sends the new value.
It's expected to be used with a size-1 channel, to only keep the most up-to-date item. This method is inherently racy when invoked concurrently from multiple goroutines.
func (*Channel) Send ¶
func (c *Channel) Send(value interface{})
Send sends value on the underlying channel.
func (*Channel) SendContext ¶
SendContext sends value on the underlying channel, or returns an error if the context expires.
func (*Channel) SendOrFail ¶
SendOrFail attempts to send value on the underlying channel. Returns true if successful or false if the channel was full.
type FakeHTTPClient ¶
type FakeHTTPClient struct { // ReqChan exposes the HTTP.Request made by the code under test. ReqChan *Channel // RespChan is a channel on which this fake client accepts responses to be // sent to the code under test. RespChan *Channel // Err, if set, is returned by Do(). Err error // RecvTimeout is the amount of the time this client waits for a response to // be pushed on RespChan before it fails the Do() call. If this field is // left unspecified, DefaultHTTPRequestTimeout is used. RecvTimeout time.Duration }
FakeHTTPClient helps mock out HTTP calls made by the code under test. It makes HTTP requests made by the code under test available through a channel, and makes it possible to inject various responses.
type PipeListener ¶
type PipeListener struct {
// contains filtered or unexported fields
}
PipeListener is a listener with an unbuffered pipe. Each write will complete only once the other side reads. It should only be created using NewPipeListener.
func NewPipeListener ¶
func NewPipeListener() *PipeListener
NewPipeListener creates a new pipe listener.
type RestartableListener ¶
type RestartableListener struct {
// contains filtered or unexported fields
}
RestartableListener wraps a net.Listener and supports stopping and restarting the latter.
func NewRestartableListener ¶
func NewRestartableListener(l net.Listener) *RestartableListener
NewRestartableListener returns a new RestartableListener wrapping l.
func (*RestartableListener) Accept ¶
func (l *RestartableListener) Accept() (net.Conn, error)
Accept waits for and returns the next connection to the listener.
If the listener is currently not accepting new connections, because `Stop` was called on it, the connection is immediately closed after accepting without any bytes being sent on it.
func (*RestartableListener) Addr ¶
func (l *RestartableListener) Addr() net.Addr
Addr returns the listener's network address.
func (*RestartableListener) Close ¶
func (l *RestartableListener) Close() error
Close closes the listener.
func (*RestartableListener) Restart ¶
func (l *RestartableListener) Restart()
Restart gets a previously stopped listener to start accepting connections.
func (*RestartableListener) Stop ¶
func (l *RestartableListener) Stop()
Stop closes existing connections on the listener and prevents new connections from being accepted.
type TestClientConn ¶
type TestClientConn struct { NewSubConnAddrsCh chan []resolver.Address // the last 10 []Address to create subconn. NewSubConnCh chan balancer.SubConn // the last 10 subconn created. RemoveSubConnCh chan balancer.SubConn // the last 10 subconn removed. UpdateAddressesAddrsCh chan []resolver.Address // last updated address via UpdateAddresses(). NewPickerCh chan balancer.Picker // the last picker updated. NewStateCh chan connectivity.State // the last state. ResolveNowCh chan resolver.ResolveNowOptions // the last ResolveNow(). // contains filtered or unexported fields }
TestClientConn is a mock balancer.ClientConn used in tests.
func NewTestClientConn ¶
func NewTestClientConn(t *testing.T) *TestClientConn
NewTestClientConn creates a TestClientConn.
func (*TestClientConn) NewSubConn ¶
func (tcc *TestClientConn) NewSubConn(a []resolver.Address, o balancer.NewSubConnOptions) (balancer.SubConn, error)
NewSubConn creates a new SubConn.
func (*TestClientConn) RemoveSubConn ¶
func (tcc *TestClientConn) RemoveSubConn(sc balancer.SubConn)
RemoveSubConn removes the SubConn.
func (*TestClientConn) ResolveNow ¶
func (tcc *TestClientConn) ResolveNow(o resolver.ResolveNowOptions)
ResolveNow panics.
func (*TestClientConn) UpdateAddresses ¶
func (tcc *TestClientConn) UpdateAddresses(sc balancer.SubConn, addrs []resolver.Address)
UpdateAddresses updates the addresses on the SubConn.
func (*TestClientConn) UpdateState ¶
func (tcc *TestClientConn) UpdateState(bs balancer.State)
UpdateState updates connectivity state and picker.
func (*TestClientConn) WaitForErrPicker ¶
func (tcc *TestClientConn) WaitForErrPicker(ctx context.Context) error
WaitForErrPicker waits until an error picker is pushed to this ClientConn. Returns error if the provided context expires or a non-error picker is pushed to the ClientConn.
type TestConstPicker ¶
TestConstPicker is a const picker for tests.
func (*TestConstPicker) Pick ¶
func (tcp *TestConstPicker) Pick(info balancer.PickInfo) (balancer.PickResult, error)
Pick returns the const SubConn or the error.
type TestSubConn ¶
type TestSubConn struct { ConnectCh chan struct{} // contains filtered or unexported fields }
TestSubConn implements the SubConn interface, to be used in tests.
func (*TestSubConn) String ¶
func (tsc *TestSubConn) String() string
String implements stringer to print human friendly error message.
func (*TestSubConn) UpdateAddresses ¶
func (tsc *TestSubConn) UpdateAddresses([]resolver.Address)
UpdateAddresses is a no-op.