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