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:
@@ -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,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,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
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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{}
|
||||
|
||||
Reference in New Issue
Block a user