refactor(netxlite): expose useful HTTPTransport/DNSTransport factories (#813)
These factories will soon be useful to finish with https://github.com/ooni/probe/issues/2135.
This commit is contained in:
parent
1a706e47bc
commit
1685ef75b5
9 changed files with 224 additions and 30 deletions
|
|
@ -6,8 +6,8 @@ import (
|
|||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/lucas-clemente/quic-go/http3"
|
||||
"github.com/ooni/probe-cli/v3/internal/model"
|
||||
"github.com/ooni/probe-cli/v3/internal/model/mocks"
|
||||
nlmocks "github.com/ooni/probe-cli/v3/internal/netxlite/mocks"
|
||||
)
|
||||
|
|
@ -63,29 +63,78 @@ func TestHTTP3Transport(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
// verifyTypeChainForHTTP3 helps to verify type chains for HTTP3.
|
||||
//
|
||||
// Arguments:
|
||||
//
|
||||
// - t is the MANDATORY testing ref;
|
||||
//
|
||||
// - txp is the MANDATORY HTTP transport to verify;
|
||||
//
|
||||
// - underlyingLogger is the MANDATORY logger we expect to find;
|
||||
//
|
||||
// - qd is the OPTIONAL QUIC dialer: if not nil, we expect to
|
||||
// see this value as the QUIC dialer, otherwise we will check the
|
||||
// type chain of the real dialer;
|
||||
//
|
||||
// - config is the MANDATORY TLS config: we'll always check
|
||||
// whether the TLSClientConfig is equal to this value: passing
|
||||
// nil here means we expect to see nil in the object;
|
||||
//
|
||||
// - reso is the OPTIONAL resolver: if present and the qd is
|
||||
// nil, we'll unwrap the QUIC dialer and check whether we have
|
||||
// this resolver as the underlying resolver.
|
||||
func verifyTypeChainForHTTP3(t *testing.T, txp model.HTTPTransport,
|
||||
underlyingLogger model.DebugLogger, qd model.QUICDialer,
|
||||
config *tls.Config, reso model.Resolver) {
|
||||
logger := txp.(*httpTransportLogger)
|
||||
if logger.Logger != underlyingLogger {
|
||||
t.Fatal("invalid logger")
|
||||
}
|
||||
ew := logger.HTTPTransport.(*httpTransportErrWrapper)
|
||||
h3txp := ew.HTTPTransport.(*http3Transport)
|
||||
if qd != nil && h3txp.dialer != qd {
|
||||
t.Fatal("invalid dialer")
|
||||
}
|
||||
if qd == nil {
|
||||
qdlog := h3txp.dialer.(*quicDialerLogger)
|
||||
qdr := qdlog.Dialer.(*quicDialerResolver)
|
||||
if reso != nil && qdr.Resolver != reso {
|
||||
t.Fatal("invalid resolver")
|
||||
}
|
||||
}
|
||||
h3 := h3txp.child.(*http3.RoundTripper)
|
||||
if h3.Dial == nil {
|
||||
t.Fatal("invalid Dial")
|
||||
}
|
||||
if !h3.DisableCompression {
|
||||
t.Fatal("invalid DisableCompression")
|
||||
}
|
||||
if h3.TLSClientConfig != config {
|
||||
t.Fatal("invalid TLSClientConfig")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewHTTP3Transport(t *testing.T) {
|
||||
t.Run("creates the correct type chain", func(t *testing.T) {
|
||||
qd := &mocks.QUICDialer{}
|
||||
config := &tls.Config{}
|
||||
txp := NewHTTP3Transport(log.Log, qd, config)
|
||||
logger := txp.(*httpTransportLogger)
|
||||
if logger.Logger != log.Log {
|
||||
t.Fatal("invalid logger")
|
||||
}
|
||||
ew := logger.HTTPTransport.(*httpTransportErrWrapper)
|
||||
h3txp := ew.HTTPTransport.(*http3Transport)
|
||||
if h3txp.dialer != qd {
|
||||
t.Fatal("invalid dialer")
|
||||
}
|
||||
h3 := h3txp.child.(*http3.RoundTripper)
|
||||
if h3.Dial == nil {
|
||||
t.Fatal("invalid Dial")
|
||||
}
|
||||
if !h3.DisableCompression {
|
||||
t.Fatal("invalid DisableCompression")
|
||||
}
|
||||
if h3.TLSClientConfig != config {
|
||||
t.Fatal("invalid TLSClientConfig")
|
||||
}
|
||||
txp := NewHTTP3Transport(model.DiscardLogger, qd, config)
|
||||
verifyTypeChainForHTTP3(t, txp, model.DiscardLogger, qd, config, nil)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNewHTTP3TransportStdlib(t *testing.T) {
|
||||
t.Run("creates the correct type chain", func(t *testing.T) {
|
||||
txp := NewHTTP3TransportStdlib(model.DiscardLogger)
|
||||
verifyTypeChainForHTTP3(t, txp, model.DiscardLogger, nil, nil, nil)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNewHTTP3TransportWithResolver(t *testing.T) {
|
||||
t.Run("creates the correct type chain", func(t *testing.T) {
|
||||
reso := &mocks.Resolver{}
|
||||
txp := NewHTTP3TransportWithResolver(model.DiscardLogger, reso)
|
||||
verifyTypeChainForHTTP3(t, txp, model.DiscardLogger, nil, nil, reso)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue