(t *testing.T)
| 76 | } |
| 77 | |
| 78 | func 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. |
nothing calls this directly
no test coverage detected