feat(netxlite): introduce null dialers (#489)

See https://github.com/ooni/probe/issues/1591
This commit is contained in:
Simone Basso 2021-09-08 14:46:17 +02:00 committed by GitHub
parent f2e3e5cc08
commit 26360f5a29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 64 additions and 0 deletions

View File

@ -277,3 +277,23 @@ func (c *dialerErrWrapperConn) Close() error {
}
return nil
}
// ErrNoDialer indicates that no dialer is configured.
var ErrNoDialer = errors.New("no configured dialer")
// NewNullDialer returns a dialer that always fails.
func NewNullDialer() Dialer {
return &nullDialer{}
}
type nullDialer struct{}
var _ Dialer = &nullDialer{}
func (*nullDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
return nil, ErrNoDialer
}
func (*nullDialer) CloseIdleConnections() {
// nothing to do
}

View File

@ -462,3 +462,15 @@ func TestDialerErrWrapperConn(t *testing.T) {
})
})
}
func TestNewNullDialer(t *testing.T) {
dialer := NewNullDialer()
conn, err := dialer.DialContext(context.Background(), "", "")
if !errors.Is(err, ErrNoDialer) {
t.Fatal("unexpected err", err)
}
if conn != nil {
t.Fatal("expected nil conn")
}
dialer.CloseIdleConnections() // does not crash
}

View File

@ -342,3 +342,23 @@ func (h *tlsHandshakerErrWrapper) Handshake(
}
return tlsconn, state, nil
}
// ErrNoTLSDialer indicates that no TLS dialer is configured.
var ErrNoTLSDialer = errors.New("no configured TLS dialer")
// NewNullTLSDialer returns a TLS dialer that always fails.
func NewNullTLSDialer() TLSDialer {
return &nullTLSDialer{}
}
type nullTLSDialer struct{}
var _ TLSDialer = &nullTLSDialer{}
func (*nullTLSDialer) DialTLSContext(ctx context.Context, network, address string) (net.Conn, error) {
return nil, ErrNoTLSDialer
}
func (*nullTLSDialer) CloseIdleConnections() {
// nothing to do
}

View File

@ -536,3 +536,15 @@ func TestTLSHandshakerErrWrapper(t *testing.T) {
})
})
}
func TestNewNullTLSDialer(t *testing.T) {
dialer := NewNullTLSDialer()
conn, err := dialer.DialTLSContext(context.Background(), "", "")
if !errors.Is(err, ErrNoTLSDialer) {
t.Fatal("unexpected err", err)
}
if conn != nil {
t.Fatal("expected nil conn")
}
dialer.CloseIdleConnections() // does not crash
}