mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 15:10:48 +01:00
Unit test for DNS fallback in configure_nameservers
This commit is contained in:
parent
1a1b088f8c
commit
d827902cb1
3 changed files with 94 additions and 0 deletions
|
@ -1357,6 +1357,36 @@ evdns_err_is_transient(int err)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return number of configured nameservers in <b>the_evdns_base</b>.
|
||||
*/
|
||||
size_t
|
||||
number_of_configured_nameservers(void)
|
||||
{
|
||||
return evdns_base_count_nameservers(the_evdns_base);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return address of configured nameserver in <b>the_evdns_base</b>
|
||||
* at index <b>idx</b>.
|
||||
*/
|
||||
tor_addr_t *
|
||||
configured_nameserver_address(const size_t idx)
|
||||
{
|
||||
struct sockaddr_storage sa;
|
||||
ev_socklen_t sa_len = sizeof(sa);
|
||||
|
||||
if (evdns_base_get_nameserver_addr(the_evdns_base, (int)idx,
|
||||
(struct sockaddr *)&sa,
|
||||
sa_len) > 0) {
|
||||
tor_addr_t *tor_addr = tor_malloc(sizeof(tor_addr_t));
|
||||
tor_addr_from_sockaddr(tor_addr, (const struct sockaddr *)&sa, NULL);
|
||||
return tor_addr;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Configure eventdns nameservers if force is true, or if the configuration
|
||||
* has changed since the last time we called this function, or if we failed on
|
||||
* our last attempt. On Unix, this reads from /etc/resolv.conf or
|
||||
|
|
|
@ -45,6 +45,9 @@ size_t dns_cache_handle_oom(time_t now, size_t min_remove_bytes);
|
|||
#ifdef DNS_PRIVATE
|
||||
#include "feature/relay/dns_structs.h"
|
||||
|
||||
size_t number_of_configured_nameservers(void);
|
||||
tor_addr_t *configured_nameserver_address(const size_t idx);
|
||||
|
||||
MOCK_DECL(STATIC int,dns_resolve_impl,(edge_connection_t *exitconn,
|
||||
int is_resolve,or_circuit_t *oncirc, char **hostname_out,
|
||||
int *made_connection_pending_out, cached_resolve_t **resolve_out));
|
||||
|
|
|
@ -13,9 +13,69 @@
|
|||
|
||||
#include "core/or/edge_connection_st.h"
|
||||
#include "core/or/or_circuit_st.h"
|
||||
#include "app/config/or_options_st.h"
|
||||
#include "app/config/config.h"
|
||||
|
||||
#include <event2/event.h>
|
||||
#include <event2/dns.h>
|
||||
|
||||
#define NS_MODULE dns
|
||||
|
||||
#define NS_SUBMODULE configure_nameservers_fallback
|
||||
|
||||
static or_options_t options = {
|
||||
.ORPort_set = 1,
|
||||
};
|
||||
|
||||
static const or_options_t *
|
||||
mock_get_options(void)
|
||||
{
|
||||
return &options;
|
||||
}
|
||||
|
||||
static void
|
||||
NS(test_main)(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
tor_addr_t *nameserver_addr = NULL;
|
||||
|
||||
MOCK(get_options, mock_get_options);
|
||||
|
||||
options.ServerDNSResolvConfFile = (char *)"no_such_file!!!";
|
||||
|
||||
dns_init(); // calls configure_nameservers()
|
||||
|
||||
tt_int_op(number_of_configured_nameservers(), OP_EQ, 1);
|
||||
|
||||
nameserver_addr = configured_nameserver_address(0);
|
||||
|
||||
tt_assert(tor_addr_family(nameserver_addr) == AF_INET);
|
||||
tt_assert(tor_addr_eq_ipv4h(nameserver_addr, 0x7f000001));
|
||||
|
||||
#ifndef _WIN32
|
||||
tor_free(nameserver_addr);
|
||||
|
||||
options.ServerDNSResolvConfFile = (char *)"/dev/null";
|
||||
|
||||
dns_init();
|
||||
|
||||
tt_int_op(number_of_configured_nameservers(), OP_EQ, 1);
|
||||
|
||||
nameserver_addr = configured_nameserver_address(0);
|
||||
|
||||
tt_assert(tor_addr_family(nameserver_addr) == AF_INET);
|
||||
tt_assert(tor_addr_eq_ipv4h(nameserver_addr, 0x7f000001));
|
||||
#endif
|
||||
|
||||
UNMOCK(get_options);
|
||||
|
||||
done:
|
||||
tor_free(nameserver_addr);
|
||||
return;
|
||||
}
|
||||
|
||||
#undef NS_SUBMODULE
|
||||
|
||||
#define NS_SUBMODULE clip_ttl
|
||||
|
||||
static void
|
||||
|
@ -736,6 +796,7 @@ NS(test_main)(void *arg)
|
|||
#undef NS_SUBMODULE
|
||||
|
||||
struct testcase_t dns_tests[] = {
|
||||
TEST_CASE(configure_nameservers_fallback),
|
||||
TEST_CASE(clip_ttl),
|
||||
TEST_CASE(resolve),
|
||||
TEST_CASE_ASPECT(resolve_impl, addr_is_ip_no_need_to_resolve),
|
||||
|
|
Loading…
Add table
Reference in a new issue