refactor(sessionresolver): adapt to changing network conditions (#238)
* feat(sessionresolver): try many and use what works * fix(sessionresolver): make sure we can use quic * fix: the config struct is unnecessary * fix: make kvstore optional * feat: write simple integration test * feat: start adding tests * feat: continue writing tests * fix(sessionresolver): add more unit tests * fix(sessionresolver): finish adding tests * refactor(sessionresolver): changes after code review
This commit is contained in:
parent
12e1164940
commit
034db78f94
19 changed files with 1260 additions and 66 deletions
124
internal/engine/internal/sessionresolver/resolvermaker_test.go
Normal file
124
internal/engine/internal/sessionresolver/resolvermaker_test.go
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
package sessionresolver
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/netx/bytecounter"
|
||||
)
|
||||
|
||||
func TestDefaultByteCounter(t *testing.T) {
|
||||
reso := &Resolver{}
|
||||
bc := reso.byteCounter()
|
||||
if bc == nil {
|
||||
t.Fatal("expected non-nil byte counter")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDefaultLogger(t *testing.T) {
|
||||
logger := &log.Logger{}
|
||||
reso := &Resolver{Logger: logger}
|
||||
lo := reso.logger()
|
||||
if lo != logger {
|
||||
t.Fatal("expected another logger here counter")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetResolverHTTPSStandard(t *testing.T) {
|
||||
bc := bytecounter.New()
|
||||
URL := "https://dns.google"
|
||||
re := &FakeResolver{}
|
||||
cmk := &fakeDNSClientMaker{reso: re}
|
||||
reso := &Resolver{dnsClientMaker: cmk, ByteCounter: bc}
|
||||
out, err := reso.getresolver(URL)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if out != re {
|
||||
t.Fatal("not the result we expected")
|
||||
}
|
||||
o2, err := reso.getresolver(URL)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if out != o2 {
|
||||
t.Fatal("not the result we expected")
|
||||
}
|
||||
reso.closeall()
|
||||
if re.Closed != true {
|
||||
t.Fatal("was not closed")
|
||||
}
|
||||
if cmk.savedURL != URL {
|
||||
t.Fatal("not the URL we expected")
|
||||
}
|
||||
if cmk.savedConfig.ByteCounter != bc {
|
||||
t.Fatal("unexpected ByteCounter")
|
||||
}
|
||||
if cmk.savedConfig.BogonIsError != true {
|
||||
t.Fatal("unexpected BogonIsError")
|
||||
}
|
||||
if cmk.savedConfig.HTTP3Enabled != false {
|
||||
t.Fatal("unexpected HTTP3Enabled")
|
||||
}
|
||||
if cmk.savedConfig.Logger != log.Log {
|
||||
t.Fatal("unexpected Log")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetResolverHTTP3(t *testing.T) {
|
||||
bc := bytecounter.New()
|
||||
URL := "http3://dns.google"
|
||||
re := &FakeResolver{}
|
||||
cmk := &fakeDNSClientMaker{reso: re}
|
||||
reso := &Resolver{dnsClientMaker: cmk, ByteCounter: bc}
|
||||
out, err := reso.getresolver(URL)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if out != re {
|
||||
t.Fatal("not the result we expected")
|
||||
}
|
||||
o2, err := reso.getresolver(URL)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if out != o2 {
|
||||
t.Fatal("not the result we expected")
|
||||
}
|
||||
reso.closeall()
|
||||
if re.Closed != true {
|
||||
t.Fatal("was not closed")
|
||||
}
|
||||
if cmk.savedURL != strings.Replace(URL, "http3://", "https://", 1) {
|
||||
t.Fatal("not the URL we expected")
|
||||
}
|
||||
if cmk.savedConfig.ByteCounter != bc {
|
||||
t.Fatal("unexpected ByteCounter")
|
||||
}
|
||||
if cmk.savedConfig.BogonIsError != true {
|
||||
t.Fatal("unexpected BogonIsError")
|
||||
}
|
||||
if cmk.savedConfig.HTTP3Enabled != true {
|
||||
t.Fatal("unexpected HTTP3Enabled")
|
||||
}
|
||||
if cmk.savedConfig.Logger != log.Log {
|
||||
t.Fatal("unexpected Log")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetResolverInvalidURL(t *testing.T) {
|
||||
bc := bytecounter.New()
|
||||
URL := "http3://dns.google"
|
||||
errMocked := errors.New("mocked error")
|
||||
cmk := &fakeDNSClientMaker{err: errMocked}
|
||||
reso := &Resolver{dnsClientMaker: cmk, ByteCounter: bc}
|
||||
out, err := reso.getresolver(URL)
|
||||
if !errors.Is(err, errMocked) {
|
||||
t.Fatal("not the error we expected", err)
|
||||
}
|
||||
if out != nil {
|
||||
t.Fatal("not the result we expected")
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue