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:
Simone Basso 2022-06-09 00:30:18 +02:00 committed by GitHub
commit 1685ef75b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 224 additions and 30 deletions

View file

@ -6,6 +6,7 @@ import (
"io"
"net"
"net/http"
"net/url"
"strings"
"testing"
"time"
@ -16,6 +17,48 @@ import (
"github.com/ooni/probe-cli/v3/internal/model/mocks"
)
func TestNewHTTPTransportWithLoggerResolverAndOptionalProxyURL(t *testing.T) {
t.Run("without proxy URL", func(t *testing.T) {
logger := &mocks.Logger{}
resolver := &mocks.Resolver{}
txp := NewHTTPTransportWithLoggerResolverAndOptionalProxyURL(logger, resolver, nil)
txpLogger := txp.(*httpTransportLogger)
if txpLogger.Logger != logger {
t.Fatal("unexpected logger")
}
txpErrWrapper := txpLogger.HTTPTransport.(*httpTransportErrWrapper)
txpCc := txpErrWrapper.HTTPTransport.(*httpTransportConnectionsCloser)
dialer := txpCc.Dialer
dialerWithReadTimeout := dialer.(*httpDialerWithReadTimeout)
dialerLog := dialerWithReadTimeout.Dialer.(*dialerLogger)
dialerReso := dialerLog.Dialer.(*dialerResolver)
if dialerReso.Resolver != resolver {
t.Fatal("invalid resolver")
}
})
t.Run("with proxy URL", func(t *testing.T) {
URL := &url.URL{}
logger := &mocks.Logger{}
resolver := &mocks.Resolver{}
txp := NewHTTPTransportWithLoggerResolverAndOptionalProxyURL(logger, resolver, URL)
txpLogger := txp.(*httpTransportLogger)
if txpLogger.Logger != logger {
t.Fatal("unexpected logger")
}
txpErrWrapper := txpLogger.HTTPTransport.(*httpTransportErrWrapper)
txpCc := txpErrWrapper.HTTPTransport.(*httpTransportConnectionsCloser)
dialer := txpCc.Dialer
dialerWithReadTimeout := dialer.(*httpDialerWithReadTimeout)
dialerProxy := dialerWithReadTimeout.Dialer.(*proxyDialer)
dialerLog := dialerProxy.Dialer.(*dialerLogger)
dialerReso := dialerLog.Dialer.(*dialerResolver)
if dialerReso.Resolver != resolver {
t.Fatal("invalid resolver")
}
})
}
func TestNewHTTPTransportWithResolver(t *testing.T) {
expected := errors.New("mocked error")
reso := &mocks.Resolver{
@ -553,6 +596,28 @@ func TestNewHTTPClientStdlib(t *testing.T) {
}
}
func TestNewHTTPClientWithResolver(t *testing.T) {
reso := &mocks.Resolver{}
clnt := NewHTTPClientWithResolver(model.DiscardLogger, reso)
ewc, ok := clnt.(*httpClientErrWrapper)
if !ok {
t.Fatal("expected *httpClientErrWrapper")
}
httpClnt, ok := ewc.HTTPClient.(*http.Client)
if !ok {
t.Fatal("expected *http.Client")
}
txp := httpClnt.Transport.(*httpTransportLogger)
txpEwrap := txp.HTTPTransport.(*httpTransportErrWrapper)
txpCc := txpEwrap.HTTPTransport.(*httpTransportConnectionsCloser)
dialer := txpCc.Dialer.(*httpDialerWithReadTimeout)
dialerLogger := dialer.Dialer.(*dialerLogger)
dialerReso := dialerLogger.Dialer.(*dialerResolver)
if dialerReso.Resolver != reso {
t.Fatal("invalid resolver")
}
}
func TestWrapHTTPClient(t *testing.T) {
origClient := &http.Client{}
wrapped := WrapHTTPClient(origClient)