cleanup: remove unnecessary legacy interfaces (#656)

This diff addresses another point of https://github.com/ooni/probe/issues/1956:

> - [ ] observe that we're still using a bunch of private interfaces for common interfaces such as the `Dialer`, so we can get rid of these private interfaces and always use the ones in `model`, which allows us to remove a bunch of legacy wrappers

Additional cleanups may still be possible. The more I cleanup, the more I see
there's extra legacy code we can dispose of (which seems good?).
This commit is contained in:
Simone Basso
2022-01-07 18:33:37 +01:00
committed by GitHub
parent 1c057d322d
commit 566c6b246a
76 changed files with 328 additions and 736 deletions
-9
View File
@@ -1,9 +0,0 @@
package resolver
import (
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
// AddressResolver is a resolver that knows how to correctly
// resolve IP addresses to themselves.
type AddressResolver = netxlite.AddressResolver
+3 -2
View File
@@ -3,6 +3,7 @@ package resolver
import (
"context"
"github.com/ooni/probe-cli/v3/internal/model"
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
@@ -14,7 +15,7 @@ import (
// This resolver is deprecated. The right thing to do would be to check
// for bogons right after a domain name resolution in the nettest.
type BogonResolver struct {
Resolver
model.Resolver
}
// LookupHost implements Resolver.LookupHost
@@ -28,4 +29,4 @@ func (r BogonResolver) LookupHost(ctx context.Context, hostname string) ([]strin
return addrs, err
}
var _ Resolver = BogonResolver{}
var _ model.Resolver = BogonResolver{}
+3 -1
View File
@@ -3,12 +3,14 @@ package resolver
import (
"context"
"sync"
"github.com/ooni/probe-cli/v3/internal/model"
)
// CacheResolver is a resolver that caches successful replies.
type CacheResolver struct {
ReadOnly bool
Resolver
model.Resolver
mu sync.Mutex
cache map[string][]string
}
+5 -4
View File
@@ -6,11 +6,12 @@ import (
"testing"
"github.com/ooni/probe-cli/v3/internal/engine/netx/resolver"
"github.com/ooni/probe-cli/v3/internal/model"
)
func TestCacheFailure(t *testing.T) {
expected := errors.New("mocked error")
var r resolver.Resolver = resolver.FakeResolver{
var r model.Resolver = resolver.FakeResolver{
Err: expected,
}
cache := &resolver.CacheResolver{Resolver: r}
@@ -27,7 +28,7 @@ func TestCacheFailure(t *testing.T) {
}
func TestCacheHitSuccess(t *testing.T) {
var r resolver.Resolver = resolver.FakeResolver{
var r model.Resolver = resolver.FakeResolver{
Err: errors.New("mocked error"),
}
cache := &resolver.CacheResolver{Resolver: r}
@@ -42,7 +43,7 @@ func TestCacheHitSuccess(t *testing.T) {
}
func TestCacheMissSuccess(t *testing.T) {
var r resolver.Resolver = resolver.FakeResolver{
var r model.Resolver = resolver.FakeResolver{
Result: []string{"8.8.8.8"},
}
cache := &resolver.CacheResolver{Resolver: r}
@@ -59,7 +60,7 @@ func TestCacheMissSuccess(t *testing.T) {
}
func TestCacheReadonlySuccess(t *testing.T) {
var r resolver.Resolver = resolver.FakeResolver{
var r model.Resolver = resolver.FakeResolver{
Result: []string{"8.8.8.8"},
}
cache := &resolver.CacheResolver{Resolver: r, ReadOnly: true}
+21 -3
View File
@@ -2,13 +2,15 @@ package resolver
import (
"context"
"github.com/ooni/probe-cli/v3/internal/model"
)
// ChainResolver is a chain resolver. The primary resolver is used first and, if that
// fails, we then attempt with the secondary resolver.
type ChainResolver struct {
Primary Resolver
Secondary Resolver
Primary model.Resolver
Secondary model.Resolver
}
// LookupHost implements Resolver.LookupHost
@@ -30,4 +32,20 @@ func (c ChainResolver) Address() string {
return ""
}
var _ Resolver = ChainResolver{}
// CloseIdleConnections implements Resolver.CloseIdleConnections.
func (c ChainResolver) CloseIdleConnections() {
c.Primary.CloseIdleConnections()
c.Secondary.CloseIdleConnections()
}
// LookupHTTPS implements Resolver.LookupHTTPS
func (c ChainResolver) LookupHTTPS(
ctx context.Context, domain string) (*model.HTTPSSvc, error) {
https, err := c.Primary.LookupHTTPS(ctx, domain)
if err != nil {
https, err = c.Secondary.LookupHTTPS(ctx, domain)
}
return https, err
}
var _ model.Resolver = ChainResolver{}
+10 -1
View File
@@ -2,11 +2,13 @@ package resolver
import (
"context"
"errors"
"io"
"net"
"time"
"github.com/ooni/probe-cli/v3/internal/atomicx"
"github.com/ooni/probe-cli/v3/internal/model"
)
type FakeDialer struct {
@@ -143,4 +145,11 @@ func (c FakeResolver) Address() string {
return ""
}
var _ Resolver = FakeResolver{}
func (c FakeResolver) CloseIdleConnections() {}
func (c FakeResolver) LookupHTTPS(
ctx context.Context, domain string) (*model.HTTPSSvc, error) {
return nil, errors.New("not implemented")
}
var _ model.Resolver = FakeResolver{}
-11
View File
@@ -1,11 +0,0 @@
package resolver
import (
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
// IDNAResolver is to support resolving Internationalized Domain Names.
// See RFC3492 for more information.
type IDNAResolver = netxlite.ResolverIDNA
var _ Resolver = &IDNAResolver{}
@@ -8,6 +8,7 @@ import (
"github.com/apex/log"
"github.com/ooni/probe-cli/v3/internal/engine/netx/resolver"
"github.com/ooni/probe-cli/v3/internal/model"
"github.com/ooni/probe-cli/v3/internal/netxlite"
)
@@ -15,13 +16,13 @@ func init() {
log.SetLevel(log.DebugLevel)
}
func testresolverquick(t *testing.T, reso resolver.Resolver) {
func testresolverquick(t *testing.T, reso model.Resolver) {
if testing.Short() {
t.Skip("skip test in short mode")
}
reso = &netxlite.ResolverLogger{
Logger: log.Log,
Resolver: netxlite.NewResolverLegacyAdapter(reso),
Resolver: reso,
}
addrs, err := reso.LookupHost(context.Background(), "dns.google.com")
if err != nil {
@@ -43,14 +44,14 @@ func testresolverquick(t *testing.T, reso resolver.Resolver) {
}
// Ensuring we can handle Internationalized Domain Names (IDNs) without issues
func testresolverquickidna(t *testing.T, reso resolver.Resolver) {
func testresolverquickidna(t *testing.T, reso model.Resolver) {
if testing.Short() {
t.Skip("skip test in short mode")
}
reso = &resolver.IDNAResolver{
reso = &netxlite.ResolverIDNA{
Resolver: &netxlite.ResolverLogger{
Logger: log.Log,
Resolver: netxlite.NewResolverLegacyAdapter(reso),
Resolver: reso,
},
}
addrs, err := reso.LookupHost(context.Background(), "яндекс.рф")
@@ -70,14 +71,14 @@ func TestNewResolverSystem(t *testing.T) {
func TestNewResolverUDPAddress(t *testing.T) {
reso := resolver.NewSerialResolver(
resolver.NewDNSOverUDP(netxlite.NewDialerLegacyAdapter(&net.Dialer{}), "8.8.8.8:53"))
resolver.NewDNSOverUDP(netxlite.DefaultDialer, "8.8.8.8:53"))
testresolverquick(t, reso)
testresolverquickidna(t, reso)
}
func TestNewResolverUDPDomain(t *testing.T) {
reso := resolver.NewSerialResolver(
resolver.NewDNSOverUDP(netxlite.NewDialerLegacyAdapter(&net.Dialer{}), "dns.google.com:53"))
resolver.NewDNSOverUDP(netxlite.DefaultDialer, "dns.google.com:53"))
testresolverquick(t, reso)
testresolverquickidna(t, reso)
}
-18
View File
@@ -1,18 +0,0 @@
package resolver
import (
"context"
)
// Resolver is a DNS resolver. The *net.Resolver used by Go implements
// this interface, but other implementations are possible.
type Resolver interface {
// LookupHost resolves a hostname to a list of IP addresses.
LookupHost(ctx context.Context, hostname string) (addrs []string, err error)
// Network returns the network being used by the resolver
Network() string
// Address returns the address being used by the resolver
Address() string
}
+3 -2
View File
@@ -5,11 +5,12 @@ import (
"time"
"github.com/ooni/probe-cli/v3/internal/engine/netx/trace"
"github.com/ooni/probe-cli/v3/internal/model"
)
// SaverResolver is a resolver that saves events
type SaverResolver struct {
Resolver
model.Resolver
Saver *trace.Saver
}
@@ -69,5 +70,5 @@ func (txp SaverDNSTransport) RoundTrip(ctx context.Context, query []byte) ([]byt
return reply, err
}
var _ Resolver = SaverResolver{}
var _ model.Resolver = SaverResolver{}
var _ RoundTripper = SaverDNSTransport{}