MCPcopy
hub / github.com/grafana/dskit / TestResolver_LookupSRV

Function TestResolver_LookupSRV

dns/miekgdns/resolver_test.go:78–223  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

76}
77
78func TestResolver_LookupSRV(t *testing.T) {
79 logger := log.NewNopLogger()
80 period := time.Hour // We don't want the periodic reload running in the test
81 tmpDir := t.TempDir()
82
83 t.Run("multiple timeouts", func(t *testing.T) {
84 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
85 client := newMockClient()
86 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
87 client.err["127.0.0.54:53"] = errors.New("timeout 2 in test")
88
89 resolver := NewResolverWithClient(cfgPath, logger, period, client)
90 t.Cleanup(resolver.Stop)
91 _, _, err := resolver.LookupSRV(context.Background(), "cache", "tcp", "example.com")
92
93 require.ErrorContains(t, err, "timeout")
94 })
95
96 t.Run("one timeout and one success", func(t *testing.T) {
97 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
98 client := newMockClient()
99 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
100 client.res["127.0.0.54:53"] = []*dns.Msg{newSrvDNSResponse("_cache._tcp.example.com.", "cache01.example.com.")}
101
102 resolver := NewResolverWithClient(cfgPath, logger, period, client)
103 t.Cleanup(resolver.Stop)
104 _, res, err := resolver.LookupSRV(context.Background(), "cache", "tcp", "example.com")
105
106 require.NoError(t, err)
107 require.Equal(t, []*net.SRV{
108 {
109 Target: "cache01.example.com.",
110 Port: 11211,
111 Priority: 10,
112 Weight: 100,
113 },
114 }, res)
115 })
116
117 t.Run("name error", func(t *testing.T) {
118 response := new(dns.Msg).SetQuestion("_cache._tcp.example.com.", dns.TypeSRV)
119 response.Rcode = dns.RcodeNameError
120 response.Response = true
121
122 cfgPath := writeResovConf(t, tmpDir, resolvConfContents)
123 client := newMockClient()
124 client.err["127.0.0.53:53"] = errors.New("timeout 1 in test")
125 client.res["127.0.0.54:53"] = []*dns.Msg{response}
126
127 resolver := NewResolverWithClient(cfgPath, logger, period, client)
128 t.Cleanup(resolver.Stop)
129 _, res, err := resolver.LookupSRV(context.Background(), "cache", "tcp", "example.com")
130
131 require.NoError(t, err)
132 require.Empty(t, res)
133 })
134
135 // Some DNS resolvers include A or AAAA records in queries for SRV records.

Callers

nothing calls this directly

Calls 8

writeResovConfFunction · 0.85
newMockClientFunction · 0.85
NewResolverWithClientFunction · 0.85
newSrvDNSResponseFunction · 0.85
RunMethod · 0.80
LookupSRVMethod · 0.65
EqualMethod · 0.45
loadConfigMethod · 0.45

Tested by

no test coverage detected