package ctrld import ( "context" "testing" "time" "github.com/miekg/dns" ) func Test_osResolver_Resolve(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() go func() { defer cancel() resolver := &osResolver{nameservers: []string{"127.0.0.127:5353"}} m := new(dns.Msg) m.SetQuestion("controld.com.", dns.TypeA) m.RecursionDesired = true _, _ = resolver.Resolve(context.Background(), m) }() select { case <-time.After(10 * time.Second): t.Error("os resolver hangs") case <-ctx.Done(): } } func Test_upstreamTypeFromEndpoint(t *testing.T) { tests := []struct { name string endpoint string resolverType string }{ {"doh", "https://freedns.controld.com/p2", ResolverTypeDOH}, {"doq", "quic://p2.freedns.controld.com", ResolverTypeDOQ}, {"dot", "p2.freedns.controld.com", ResolverTypeDOT}, {"legacy", "8.8.8.8:53", ResolverTypeLegacy}, {"legacy ipv6", "[2404:6800:4005:809::200e]:53", ResolverTypeLegacy}, } for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() if rt := ResolverTypeFromEndpoint(tc.endpoint); rt != tc.resolverType { t.Errorf("mismatch, want: %s, got: %s", tc.resolverType, rt) } }) } }