feat: implement iterative DNS resolver (closes #1) #9
@ -1,85 +0,0 @@
|
|||||||
//go:build integration
|
|
||||||
|
|
||||||
package resolver_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"log/slog"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/stretchr/testify/require"
|
|
||||||
|
|
||||||
"sneak.berlin/go/dnswatcher/internal/resolver"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Integration tests hit real DNS servers. Run with:
|
|
||||||
// go test -tags integration -timeout 60s ./internal/resolver/
|
|
||||||
|
|
||||||
func newIntegrationResolver(t *testing.T) *resolver.Resolver {
|
|
||||||
t.Helper()
|
|
||||||
|
|
||||||
log := slog.New(slog.NewTextHandler(
|
|
||||||
os.Stderr,
|
|
||||||
&slog.HandlerOptions{Level: slog.LevelDebug},
|
|
||||||
))
|
|
||||||
|
|
||||||
return resolver.NewFromLogger(log)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIntegration_FindAuthoritativeNameservers(
|
|
||||||
t *testing.T,
|
|
||||||
) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
r := newIntegrationResolver(t)
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(
|
|
||||||
context.Background(), 30*time.Second,
|
|
||||||
)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
nameservers, err := r.FindAuthoritativeNameservers(
|
|
||||||
ctx, "example.com",
|
|
||||||
)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotEmpty(t, nameservers)
|
|
||||||
|
|
||||||
t.Logf("example.com NS: %v", nameservers)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIntegration_ResolveIPAddresses(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
r := newIntegrationResolver(t)
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(
|
|
||||||
context.Background(), 30*time.Second,
|
|
||||||
)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
// sneak.cloud is on Cloudflare
|
|
||||||
nameservers, err := r.FindAuthoritativeNameservers(
|
|
||||||
ctx, "sneak.cloud",
|
|
||||||
)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotEmpty(t, nameservers)
|
|
||||||
|
|
||||||
hasCloudflare := false
|
|
||||||
|
|
||||||
for _, ns := range nameservers {
|
|
||||||
if strings.Contains(ns, "cloudflare") {
|
|
||||||
hasCloudflare = true
|
|
||||||
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
assert.True(t, hasCloudflare,
|
|
||||||
"sneak.cloud should be on Cloudflare, got: %v",
|
|
||||||
nameservers,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user