441a6c9969
This change adds a new `dns_config.recursor_strategy` option which controls how Consul queries DNS resolvers listed in the `recursors` config option. The supported options are `sequential` (default), and `random`. Closes #8807 Co-authored-by: Blake Covarrubias <blake@covarrubi.as> Co-authored-by: Priyanka Sengupta <psengupta@flatiron.com>
41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
package dns
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/sdk/testutil/retry"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDNS_Recursor_StrategyRandom(t *testing.T) {
|
|
configuredRecursors := []string{"1.1.1.1", "8.8.4.4", "8.8.8.8"}
|
|
recursorStrategy := RecursorStrategy("random")
|
|
|
|
retry.RunWith(&retry.Counter{Count: 5}, t, func(r *retry.R) {
|
|
recursorsToQuery := make([]string, 0)
|
|
for _, idx := range recursorStrategy.Indexes(len(configuredRecursors)) {
|
|
recursorsToQuery = append(recursorsToQuery, configuredRecursors[idx])
|
|
}
|
|
|
|
// Ensure the slices contain the same elements
|
|
require.ElementsMatch(t, configuredRecursors, recursorsToQuery)
|
|
|
|
// Ensure the elements are not in the same order
|
|
require.NotEqual(r, configuredRecursors, recursorsToQuery)
|
|
})
|
|
}
|
|
|
|
func TestDNS_Recursor_StrategySequential(t *testing.T) {
|
|
expectedRecursors := []string{"1.1.1.1", "8.8.4.4", "8.8.8.8"}
|
|
recursorStrategy := RecursorStrategy("sequential")
|
|
|
|
recursorsToQuery := make([]string, 0)
|
|
for _, idx := range recursorStrategy.Indexes(len(expectedRecursors)) {
|
|
recursorsToQuery = append(recursorsToQuery, expectedRecursors[idx])
|
|
}
|
|
|
|
// The list of recursors should match the order in which they were defined
|
|
// in the configuration
|
|
require.Equal(t, recursorsToQuery, expectedRecursors)
|
|
}
|