(t *testing.T)
| 16 | ) |
| 17 | |
| 18 | func TestProvider(t *testing.T) { |
| 19 | ips := []string{ |
| 20 | "127.0.0.1:19091", |
| 21 | "127.0.0.2:19092", |
| 22 | "127.0.0.3:19093", |
| 23 | "127.0.0.4:19094", |
| 24 | "127.0.0.5:19095", |
| 25 | } |
| 26 | |
| 27 | prv := NewProvider("", 0, log.NewNopLogger(), nil) |
| 28 | prv.resolver = &mockResolver{ |
| 29 | res: map[string][]string{ |
| 30 | "a": ips[:2], |
| 31 | "b": ips[2:4], |
| 32 | "c": {ips[4]}, |
| 33 | }, |
| 34 | } |
| 35 | ctx := context.TODO() |
| 36 | |
| 37 | checkMetrics := func(metrics string) { |
| 38 | const metadata = ` |
| 39 | # HELP dns_provider_results The number of resolved endpoints for each configured address |
| 40 | # TYPE dns_provider_results gauge |
| 41 | ` |
| 42 | expected := strings.NewReader(metadata + metrics + "\n") |
| 43 | assert.NoError(t, testutil.CollectAndCompare(prv, expected)) |
| 44 | } |
| 45 | err := prv.Resolve(ctx, []string{"any+x"}) |
| 46 | assert.NoError(t, err) |
| 47 | result := prv.Addresses() |
| 48 | sort.Strings(result) |
| 49 | assert.Equal(t, []string(nil), result) |
| 50 | checkMetrics(`dns_provider_results{addr="any+x"} 0`) |
| 51 | |
| 52 | err = prv.Resolve(ctx, []string{"any+a", "any+b", "any+c"}) |
| 53 | assert.NoError(t, err) |
| 54 | result = prv.Addresses() |
| 55 | sort.Strings(result) |
| 56 | assert.Equal(t, ips, result) |
| 57 | checkMetrics(` |
| 58 | dns_provider_results{addr="any+a"} 2 |
| 59 | dns_provider_results{addr="any+b"} 2 |
| 60 | dns_provider_results{addr="any+c"} 1`) |
| 61 | |
| 62 | err = prv.Resolve(ctx, []string{"any+b", "any+c"}) |
| 63 | assert.NoError(t, err) |
| 64 | result = prv.Addresses() |
| 65 | sort.Strings(result) |
| 66 | assert.Equal(t, ips[2:], result) |
| 67 | checkMetrics(` |
| 68 | dns_provider_results{addr="any+b"} 2 |
| 69 | dns_provider_results{addr="any+c"} 1`) |
| 70 | |
| 71 | err = prv.Resolve(ctx, []string{"any+x"}) |
| 72 | assert.NoError(t, err) |
| 73 | result = prv.Addresses() |
| 74 | sort.Strings(result) |
| 75 | assert.Equal(t, []string(nil), result) |
nothing calls this directly
no test coverage detected