feat: dnsping using step-by-step (#831)
Reference issue for this pull request: https://github.com/ooni/probe/issues/2159 This diff refactors the `dnsping` experiment to use the [step-by-step measurement style](https://github.com/ooni/probe-cli/blob/master/docs/design/dd-003-step-by-step.md). Co-authored-by: decfox <decfox@github.com> Co-authored-by: Simone Basso <bassosimone@gmail.com>
This commit is contained in:
@@ -104,7 +104,7 @@ func TestMeasureWithUDPResolver(t *testing.T) {
|
||||
|
||||
t.Run("on success", func(t *testing.T) {
|
||||
dlr := netxlite.NewDialerWithoutResolver(log.Log)
|
||||
r := netxlite.NewParallelResolverUDP(log.Log, dlr, "8.8.4.4:53")
|
||||
r := netxlite.NewParallelUDPResolver(log.Log, dlr, "8.8.4.4:53")
|
||||
defer r.CloseIdleConnections()
|
||||
ctx := context.Background()
|
||||
addrs, err := r.LookupHost(ctx, "dns.google.com")
|
||||
@@ -128,7 +128,7 @@ func TestMeasureWithUDPResolver(t *testing.T) {
|
||||
}
|
||||
defer listener.Close()
|
||||
dlr := netxlite.NewDialerWithoutResolver(log.Log)
|
||||
r := netxlite.NewParallelResolverUDP(log.Log, dlr, listener.LocalAddr().String())
|
||||
r := netxlite.NewParallelUDPResolver(log.Log, dlr, listener.LocalAddr().String())
|
||||
defer r.CloseIdleConnections()
|
||||
ctx := context.Background()
|
||||
addrs, err := r.LookupHost(ctx, "ooni.org")
|
||||
@@ -152,7 +152,7 @@ func TestMeasureWithUDPResolver(t *testing.T) {
|
||||
}
|
||||
defer listener.Close()
|
||||
dlr := netxlite.NewDialerWithoutResolver(log.Log)
|
||||
r := netxlite.NewParallelResolverUDP(log.Log, dlr, listener.LocalAddr().String())
|
||||
r := netxlite.NewParallelUDPResolver(log.Log, dlr, listener.LocalAddr().String())
|
||||
defer r.CloseIdleConnections()
|
||||
ctx := context.Background()
|
||||
addrs, err := r.LookupHost(ctx, "ooni.org")
|
||||
@@ -176,7 +176,7 @@ func TestMeasureWithUDPResolver(t *testing.T) {
|
||||
}
|
||||
defer listener.Close()
|
||||
dlr := netxlite.NewDialerWithoutResolver(log.Log)
|
||||
r := netxlite.NewParallelResolverUDP(log.Log, dlr, listener.LocalAddr().String())
|
||||
r := netxlite.NewParallelUDPResolver(log.Log, dlr, listener.LocalAddr().String())
|
||||
defer r.CloseIdleConnections()
|
||||
ctx := context.Background()
|
||||
addrs, err := r.LookupHost(ctx, "ooni.org")
|
||||
|
||||
@@ -49,7 +49,7 @@ func NewUnwrappedStdlibResolver(wrappers ...model.DNSTransportWrapper) model.Res
|
||||
}
|
||||
}
|
||||
|
||||
// NewSerialResolverUDP creates a new Resolver using DNS-over-UDP
|
||||
// NewSerialUDPResolver creates a new Resolver using DNS-over-UDP
|
||||
// that performs serial A/AAAA lookups during LookupHost.
|
||||
//
|
||||
// Deprecated: use NewParallelResolverUDP.
|
||||
@@ -64,14 +64,14 @@ func NewUnwrappedStdlibResolver(wrappers ...model.DNSTransportWrapper) model.Res
|
||||
//
|
||||
// - wrappers is the optional list of wrappers to wrap the underlying
|
||||
// transport. Any nil wrapper will be silently ignored.
|
||||
func NewSerialResolverUDP(logger model.DebugLogger, dialer model.Dialer,
|
||||
func NewSerialUDPResolver(logger model.DebugLogger, dialer model.Dialer,
|
||||
address string, wrappers ...model.DNSTransportWrapper) model.Resolver {
|
||||
return WrapResolver(logger, NewUnwrappedSerialResolver(
|
||||
WrapDNSTransport(NewUnwrappedDNSOverUDPTransport(dialer, address), wrappers...),
|
||||
))
|
||||
}
|
||||
|
||||
// NewParallelResolverUDP creates a new Resolver using DNS-over-UDP
|
||||
// NewParallelUDPResolver creates a new Resolver using DNS-over-UDP
|
||||
// that performs parallel A/AAAA lookups during LookupHost.
|
||||
//
|
||||
// Arguments:
|
||||
@@ -84,7 +84,7 @@ func NewSerialResolverUDP(logger model.DebugLogger, dialer model.Dialer,
|
||||
//
|
||||
// - wrappers is the optional list of wrappers to wrap the underlying
|
||||
// transport. Any nil wrapper will be silently ignored.
|
||||
func NewParallelResolverUDP(logger model.DebugLogger, dialer model.Dialer,
|
||||
func NewParallelUDPResolver(logger model.DebugLogger, dialer model.Dialer,
|
||||
address string, wrappers ...model.DNSTransportWrapper) model.Resolver {
|
||||
return WrapResolver(logger, NewUnwrappedParallelResolver(
|
||||
WrapDNSTransport(NewUnwrappedDNSOverUDPTransport(dialer, address), wrappers...),
|
||||
|
||||
@@ -33,9 +33,9 @@ func TestNewResolverSystem(t *testing.T) {
|
||||
typecheckForSystemResolver(t, resolver, model.DiscardLogger)
|
||||
}
|
||||
|
||||
func TestNewSerialResolverUDP(t *testing.T) {
|
||||
func TestNewSerialUDPResolver(t *testing.T) {
|
||||
d := NewDialerWithoutResolver(log.Log)
|
||||
resolver := NewSerialResolverUDP(log.Log, d, "1.1.1.1:53")
|
||||
resolver := NewSerialUDPResolver(log.Log, d, "1.1.1.1:53")
|
||||
idna := resolver.(*resolverIDNA)
|
||||
logger := idna.Resolver.(*resolverLogger)
|
||||
if logger.Logger != log.Log {
|
||||
@@ -51,9 +51,9 @@ func TestNewSerialResolverUDP(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewParallelResolverUDP(t *testing.T) {
|
||||
func TestNewParallelUDPResolver(t *testing.T) {
|
||||
d := NewDialerWithoutResolver(log.Log)
|
||||
resolver := NewParallelResolverUDP(log.Log, d, "1.1.1.1:53")
|
||||
resolver := NewParallelUDPResolver(log.Log, d, "1.1.1.1:53")
|
||||
idna := resolver.(*resolverIDNA)
|
||||
logger := idna.Resolver.(*resolverLogger)
|
||||
if logger.Logger != log.Log {
|
||||
|
||||
@@ -98,9 +98,13 @@ type parallelResolverResult struct {
|
||||
func (r *ParallelResolver) lookupHost(ctx context.Context, hostname string,
|
||||
qtype uint16, out chan<- *parallelResolverResult) {
|
||||
encoder := &DNSEncoderMiekg{}
|
||||
trace := ContextTraceOrDefault(ctx)
|
||||
query := encoder.Encode(hostname, qtype, r.Txp.RequiresPadding())
|
||||
started := trace.TimeNow()
|
||||
response, err := r.Txp.RoundTrip(ctx, query)
|
||||
finished := trace.TimeNow()
|
||||
if err != nil {
|
||||
trace.OnDNSRoundTripForLookupHost(started, r, query, response, []string{}, err, finished)
|
||||
out <- ¶llelResolverResult{
|
||||
addrs: []string{},
|
||||
err: err,
|
||||
@@ -108,6 +112,7 @@ func (r *ParallelResolver) lookupHost(ctx context.Context, hostname string,
|
||||
return
|
||||
}
|
||||
addrs, err := response.DecodeLookupHost()
|
||||
trace.OnDNSRoundTripForLookupHost(started, r, query, response, addrs, err, finished)
|
||||
out <- ¶llelResolverResult{
|
||||
addrs: addrs,
|
||||
err: err,
|
||||
|
||||
@@ -49,6 +49,12 @@ func (*traceDefault) TimeNow() time.Time {
|
||||
return time.Now()
|
||||
}
|
||||
|
||||
// OnDNSRoundTripForLookupHost implements model.Trace.OnDNSRoundTripForLookupHost.
|
||||
func (*traceDefault) OnDNSRoundTripForLookupHost(started time.Time, reso model.Resolver, query model.DNSQuery,
|
||||
response model.DNSResponse, addrs []string, err error, finished time.Time) {
|
||||
// nothing
|
||||
}
|
||||
|
||||
// OnConnectDone implements model.Trace.OnConnectDone.
|
||||
func (*traceDefault) OnConnectDone(
|
||||
started time.Time, network, domain, remoteAddr string, err error, finished time.Time) {
|
||||
|
||||
Reference in New Issue
Block a user