Skip to content

Commit

Permalink
cares: fixing a test failure for specific environments
Browse files Browse the repository at this point in the history
SupportsCustomResolversAsFallback has been failing locally for me because there's only a default resolver, so we use the configured failovers immediately. Fixing the test to handle that case

Signed-off-by: Alyssa Wilk <alyssar@chromium.org>
  • Loading branch information
alyssawilk authored and ravenblackx committed Jun 8, 2022
1 parent a8b4d0d commit b93f4d7
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions test/extensions/network/dns_resolver/cares/dns_impl_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,7 @@ class DnsResolverImplPeer {
resolver_->initializeChannel(&options, ARES_OPT_FLAGS | ARES_OPT_DOMAINS |
(zero_timeout ? ARES_OPT_TIMEOUTMS : 0));
}
bool isCaresDefaultTheOnlyNameserver() { return resolver_->isCaresDefaultTheOnlyNameserver(); }

private:
DnsResolverImpl* resolver_;
Expand Down Expand Up @@ -450,18 +451,35 @@ TEST_F(DnsImplConstructor, SupportsCustomResolversAsFallback) {
char addr4str[INET_ADDRSTRLEN];
auto addr4 = Network::Utility::parseInternetAddress("1.2.3.4");

// convert the address and options into typed_dns_resolver_config
// First, create a resolver with no fallback. Check to see if cares default is
// the only nameserver.
bool only_has_default = false;
{
envoy::extensions::network::dns_resolver::cares::v3::CaresDnsResolverConfig cares;
cares.mutable_dns_resolver_options()->MergeFrom(dns_resolver_options_);

envoy::config::core::v3::TypedExtensionConfig typed_dns_resolver_config;
typed_dns_resolver_config.mutable_typed_config()->PackFrom(cares);
typed_dns_resolver_config.set_name(std::string(Network::CaresDnsResolver));
Network::DnsResolverFactory& dns_resolver_factory =
createDnsResolverFactoryFromTypedConfig(typed_dns_resolver_config);
auto resolver =
dns_resolver_factory.createDnsResolver(*dispatcher_, *api_, typed_dns_resolver_config);
auto peer =
std::make_unique<DnsResolverImplPeer>(dynamic_cast<DnsResolverImpl*>(resolver.get()));
only_has_default = peer->isCaresDefaultTheOnlyNameserver();
}

// Now create a resolver with a failover resolver.
envoy::config::core::v3::Address dns_resolvers;
Network::Utility::addressToProtobufAddress(
Network::Address::Ipv4Instance(addr4->ip()->addressAsString(), addr4->ip()->port()),
dns_resolvers);
envoy::extensions::network::dns_resolver::cares::v3::CaresDnsResolverConfig cares;
cares.set_use_resolvers_as_fallback(true);
cares.add_resolvers()->MergeFrom(dns_resolvers);

// copy over dns_resolver_options_
cares.mutable_dns_resolver_options()->MergeFrom(dns_resolver_options_);

envoy::config::core::v3::TypedExtensionConfig typed_dns_resolver_config;
typed_dns_resolver_config.mutable_typed_config()->PackFrom(cares);
typed_dns_resolver_config.set_name(std::string(Network::CaresDnsResolver));
Expand All @@ -470,14 +488,19 @@ TEST_F(DnsImplConstructor, SupportsCustomResolversAsFallback) {
auto resolver =
dns_resolver_factory.createDnsResolver(*dispatcher_, *api_, typed_dns_resolver_config);

// Given that the local machine will have a working conf in resolve.conf the resolver will not
// use the fallback given.
auto peer = std::make_unique<DnsResolverImplPeer>(dynamic_cast<DnsResolverImpl*>(resolver.get()));
ares_addr_port_node* resolvers;
int result = ares_get_servers_ports(peer->channel(), &resolvers);
EXPECT_EQ(result, ARES_SUCCESS);
EXPECT_EQ(resolvers->family, AF_INET);
EXPECT_STRNE(inet_ntop(AF_INET, &resolvers->addr.addr4, addr4str, INET_ADDRSTRLEN), "1.2.3.4");
if (only_has_default) {
// If cares default was the only resolver, the fallbacks will be used.
EXPECT_STREQ(inet_ntop(AF_INET, &resolvers->addr.addr4, addr4str, INET_ADDRSTRLEN), "1.2.3.4");
} else {
// In the common case, where cares default was not the only resolver, the fallback will not be
// used.
EXPECT_STRNE(inet_ntop(AF_INET, &resolvers->addr.addr4, addr4str, INET_ADDRSTRLEN), "1.2.3.4");
}
ares_free_data(resolvers);
}

Expand Down

0 comments on commit b93f4d7

Please sign in to comment.