acef18a955
The BogonResolver relied on its wrapper resolver to pass along the list of addresses _and_ the error. But the idiomatic thing to do is often to return `nil` when there is an error. I broke this very fragile assumption in https://github.com/ooni/probe-cli/pull/399. I could of course fix it, but this assumption is clearly wrong and we should not allow such fragile code in the tree. We are not using BogonIsError much in the tree. The only place in which we're using it for measuring seems to be dnscheck. It may be that this surprising behavior was what caused the issue at https://github.com/ooni/probe/issues/1510 in the first place. Regardless, let's remove fragile code and adjust the test that was failing. Also that test is quick so it can run in `-short` mode. Spotted while working on https://github.com/ooni/probe/issues/1505.
91 lines
2.3 KiB
Go
91 lines
2.3 KiB
Go
package netx_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/apex/log"
|
|
"github.com/ooni/probe-cli/v3/internal/bytecounter"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx/errorx"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
|
|
"github.com/ooni/probe-cli/v3/internal/iox"
|
|
)
|
|
|
|
func TestSuccess(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("skip test in short mode")
|
|
}
|
|
log.SetLevel(log.DebugLevel)
|
|
counter := bytecounter.New()
|
|
config := netx.Config{
|
|
BogonIsError: true,
|
|
ByteCounter: counter,
|
|
CacheResolutions: true,
|
|
ContextByteCounting: true,
|
|
DialSaver: &trace.Saver{},
|
|
HTTPSaver: &trace.Saver{},
|
|
Logger: log.Log,
|
|
ReadWriteSaver: &trace.Saver{},
|
|
ResolveSaver: &trace.Saver{},
|
|
TLSSaver: &trace.Saver{},
|
|
}
|
|
txp := netx.NewHTTPTransport(config)
|
|
client := &http.Client{Transport: txp}
|
|
resp, err := client.Get("https://www.google.com")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err = iox.ReadAllContext(context.Background(), resp.Body); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err = resp.Body.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if counter.Sent.Load() <= 0 {
|
|
t.Fatal("no bytes sent?!")
|
|
}
|
|
if counter.Received.Load() <= 0 {
|
|
t.Fatal("no bytes received?!")
|
|
}
|
|
if ev := config.DialSaver.Read(); len(ev) <= 0 {
|
|
t.Fatal("no dial events?!")
|
|
}
|
|
if ev := config.HTTPSaver.Read(); len(ev) <= 0 {
|
|
t.Fatal("no HTTP events?!")
|
|
}
|
|
if ev := config.ReadWriteSaver.Read(); len(ev) <= 0 {
|
|
t.Fatal("no R/W events?!")
|
|
}
|
|
if ev := config.ResolveSaver.Read(); len(ev) <= 0 {
|
|
t.Fatal("no resolver events?!")
|
|
}
|
|
if ev := config.TLSSaver.Read(); len(ev) <= 0 {
|
|
t.Fatal("no TLS events?!")
|
|
}
|
|
}
|
|
|
|
func TestBogonResolutionNotBroken(t *testing.T) {
|
|
saver := new(trace.Saver)
|
|
r := netx.NewResolver(netx.Config{
|
|
BogonIsError: true,
|
|
DNSCache: map[string][]string{
|
|
"www.google.com": {"127.0.0.1"},
|
|
},
|
|
ResolveSaver: saver,
|
|
Logger: log.Log,
|
|
})
|
|
addrs, err := r.LookupHost(context.Background(), "www.google.com")
|
|
if !errors.Is(err, errorx.ErrDNSBogon) {
|
|
t.Fatal("not the error we expected")
|
|
}
|
|
if err.Error() != errorx.FailureDNSBogonError {
|
|
t.Fatal("error not correctly wrapped")
|
|
}
|
|
if len(addrs) > 0 {
|
|
t.Fatal("expected no addresses here")
|
|
}
|
|
}
|