feat(netxmocks): implement mocks for netxlite.Resolver (#398)
While there, make sure we require using &netxmocks.Dialer. Still part of https://github.com/ooni/probe/issues/1505
This commit is contained in:
parent
16aa8e5538
commit
c5dd9a68f1
|
@ -20,7 +20,7 @@ func TestEmitterFailure(t *testing.T) {
|
||||||
Beginning: time.Now(),
|
Beginning: time.Now(),
|
||||||
Handler: saver,
|
Handler: saver,
|
||||||
})
|
})
|
||||||
d := EmitterDialer{Dialer: netxmocks.Dialer{
|
d := EmitterDialer{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
@ -69,7 +69,7 @@ func TestEmitterSuccess(t *testing.T) {
|
||||||
Beginning: time.Now(),
|
Beginning: time.Now(),
|
||||||
Handler: saver,
|
Handler: saver,
|
||||||
})
|
})
|
||||||
d := EmitterDialer{Dialer: netxmocks.Dialer{
|
d := EmitterDialer{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return &netxmocks.Conn{
|
return &netxmocks.Conn{
|
||||||
MockRead: func(b []byte) (int, error) {
|
MockRead: func(b []byte) (int, error) {
|
||||||
|
|
|
@ -76,7 +76,7 @@ func TestByteCounterNoHandlers(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestByteCounterConnectFailure(t *testing.T) {
|
func TestByteCounterConnectFailure(t *testing.T) {
|
||||||
dialer := &byteCounterDialer{Dialer: netxmocks.Dialer{
|
dialer := &byteCounterDialer{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
func TestErrorWrapperFailure(t *testing.T) {
|
func TestErrorWrapperFailure(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
d := &errorWrapperDialer{Dialer: netxmocks.Dialer{
|
d := &errorWrapperDialer{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
@ -43,7 +43,7 @@ func errorWrapperCheckErr(t *testing.T, err error, op string) {
|
||||||
|
|
||||||
func TestErrorWrapperSuccess(t *testing.T) {
|
func TestErrorWrapperSuccess(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
d := &errorWrapperDialer{Dialer: netxmocks.Dialer{
|
d := &errorWrapperDialer{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return &netxmocks.Conn{
|
return &netxmocks.Conn{
|
||||||
MockRead: func(b []byte) (int, error) {
|
MockRead: func(b []byte) (int, error) {
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
func TestProxyDialerDialContextNoProxyURL(t *testing.T) {
|
func TestProxyDialerDialContextNoProxyURL(t *testing.T) {
|
||||||
expected := errors.New("mocked error")
|
expected := errors.New("mocked error")
|
||||||
d := &proxyDialer{
|
d := &proxyDialer{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, expected
|
return nil, expected
|
||||||
},
|
},
|
||||||
|
@ -45,7 +45,7 @@ func TestProxyDialerDialContextInvalidScheme(t *testing.T) {
|
||||||
func TestProxyDialerDialContextWithEOF(t *testing.T) {
|
func TestProxyDialerDialContextWithEOF(t *testing.T) {
|
||||||
const expect = "10.0.0.1:9050"
|
const expect = "10.0.0.1:9050"
|
||||||
d := &proxyDialer{
|
d := &proxyDialer{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
if address != expect {
|
if address != expect {
|
||||||
return nil, errors.New("unexpected address")
|
return nil, errors.New("unexpected address")
|
||||||
|
|
|
@ -17,7 +17,7 @@ func TestSaverDialerFailure(t *testing.T) {
|
||||||
expected := errors.New("mocked error")
|
expected := errors.New("mocked error")
|
||||||
saver := &trace.Saver{}
|
saver := &trace.Saver{}
|
||||||
dlr := &saverDialer{
|
dlr := &saverDialer{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, expected
|
return nil, expected
|
||||||
},
|
},
|
||||||
|
@ -59,7 +59,7 @@ func TestSaverConnDialerFailure(t *testing.T) {
|
||||||
expected := errors.New("mocked error")
|
expected := errors.New("mocked error")
|
||||||
saver := &trace.Saver{}
|
saver := &trace.Saver{}
|
||||||
dlr := &saverConnDialer{
|
dlr := &saverConnDialer{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, expected
|
return nil, expected
|
||||||
},
|
},
|
||||||
|
@ -79,7 +79,7 @@ func TestSaverConnDialerSuccess(t *testing.T) {
|
||||||
saver := &trace.Saver{}
|
saver := &trace.Saver{}
|
||||||
dlr := &saverConnDialer{
|
dlr := &saverConnDialer{
|
||||||
Dialer: &saverDialer{
|
Dialer: &saverDialer{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return &netxmocks.Conn{
|
return &netxmocks.Conn{
|
||||||
MockRead: func(b []byte) (int, error) {
|
MockRead: func(b []byte) (int, error) {
|
||||||
|
|
|
@ -69,7 +69,7 @@ func (r MockableResolver) Address() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDialerResolverDialForSingleIPFails(t *testing.T) {
|
func TestDialerResolverDialForSingleIPFails(t *testing.T) {
|
||||||
dialer := &DialerResolver{Dialer: netxmocks.Dialer{
|
dialer := &DialerResolver{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
@ -85,7 +85,7 @@ func TestDialerResolverDialForSingleIPFails(t *testing.T) {
|
||||||
|
|
||||||
func TestDialerResolverDialForManyIPFails(t *testing.T) {
|
func TestDialerResolverDialForManyIPFails(t *testing.T) {
|
||||||
dialer := &DialerResolver{
|
dialer := &DialerResolver{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
@ -102,7 +102,7 @@ func TestDialerResolverDialForManyIPFails(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDialerResolverDialForManyIPSuccess(t *testing.T) {
|
func TestDialerResolverDialForManyIPSuccess(t *testing.T) {
|
||||||
dialer := &DialerResolver{Dialer: netxmocks.Dialer{
|
dialer := &DialerResolver{Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return &netxmocks.Conn{
|
return &netxmocks.Conn{
|
||||||
MockClose: func() error {
|
MockClose: func() error {
|
||||||
|
@ -125,7 +125,7 @@ func TestDialerResolverDialForManyIPSuccess(t *testing.T) {
|
||||||
|
|
||||||
func TestDialerLoggerFailure(t *testing.T) {
|
func TestDialerLoggerFailure(t *testing.T) {
|
||||||
d := &DialerLogger{
|
d := &DialerLogger{
|
||||||
Dialer: netxmocks.Dialer{
|
Dialer: &netxmocks.Dialer{
|
||||||
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
MockDialContext: func(ctx context.Context, network string, address string) (net.Conn, error) {
|
||||||
return nil, io.EOF
|
return nil, io.EOF
|
||||||
},
|
},
|
||||||
|
|
|
@ -16,8 +16,8 @@ type Dialer struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// DialContext implements Dialer.DialContext.
|
// DialContext implements Dialer.DialContext.
|
||||||
func (d Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
func (d *Dialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
||||||
return d.MockDialContext(ctx, network, address)
|
return d.MockDialContext(ctx, network, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ dialer = Dialer{}
|
var _ dialer = &Dialer{}
|
||||||
|
|
34
internal/netxmocks/resolver.go
Normal file
34
internal/netxmocks/resolver.go
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package netxmocks
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
// resolver is the interface we expect from a resolver
|
||||||
|
type resolver interface {
|
||||||
|
LookupHost(ctx context.Context, domain string) ([]string, error)
|
||||||
|
Network() string
|
||||||
|
Address() string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolver is a mockable Resolver.
|
||||||
|
type Resolver struct {
|
||||||
|
MockLookupHost func(ctx context.Context, domain string) ([]string, error)
|
||||||
|
MockNetwork func() string
|
||||||
|
MockAddress func() string
|
||||||
|
}
|
||||||
|
|
||||||
|
// LookupHost implements Resolver.LookupHost.
|
||||||
|
func (r *Resolver) LookupHost(ctx context.Context, domain string) ([]string, error) {
|
||||||
|
return r.MockLookupHost(ctx, domain)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Address implements Resolver.Address.
|
||||||
|
func (r *Resolver) Address() string {
|
||||||
|
return r.MockAddress()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Network implements Resolver.Network.
|
||||||
|
func (r *Resolver) Network() string {
|
||||||
|
return r.MockNetwork()
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ resolver = &Resolver{}
|
46
internal/netxmocks/resolver_test.go
Normal file
46
internal/netxmocks/resolver_test.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package netxmocks
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestResolverLookupHost(t *testing.T) {
|
||||||
|
expected := errors.New("mocked error")
|
||||||
|
r := &Resolver{
|
||||||
|
MockLookupHost: func(ctx context.Context, domain string) ([]string, error) {
|
||||||
|
return nil, expected
|
||||||
|
},
|
||||||
|
}
|
||||||
|
ctx := context.Background()
|
||||||
|
addrs, err := r.LookupHost(ctx, "dns.google")
|
||||||
|
if !errors.Is(err, expected) {
|
||||||
|
t.Fatal("unexpected error", err)
|
||||||
|
}
|
||||||
|
if addrs != nil {
|
||||||
|
t.Fatal("expected nil addr")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestResolverNetwork(t *testing.T) {
|
||||||
|
r := &Resolver{
|
||||||
|
MockNetwork: func() string {
|
||||||
|
return "antani"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if v := r.Network(); v != "antani" {
|
||||||
|
t.Fatal("unexpected network", v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestResolverAddress(t *testing.T) {
|
||||||
|
r := &Resolver{
|
||||||
|
MockAddress: func() string {
|
||||||
|
return "1.1.1.1"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if v := r.Address(); v != "1.1.1.1" {
|
||||||
|
t.Fatal("unexpected address", v)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user