12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /* Copyright (c) 2001 Matej Pfajfar.
- * Copyright (c) 2001-2004, Roger Dingledine.
- * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2019, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- /**
- * @file resolve_test_helpers.c
- * @brief Helper functions for mocking libc's blocking hostname lookup
- * facilities.
- **/
- #define RESOLVE_PRIVATE
- #include "orconfig.h"
- #include "test/resolve_test_helpers.h"
- #include "lib/net/address.h"
- #include "lib/net/resolve.h"
- #include "test/test.h"
- #include <stdio.h>
- #include <string.h>
- /**
- * Mock replacement for our getaddrinfo/gethostbyname wrapper.
- **/
- static int
- replacement_host_lookup(const char *name, uint16_t family, tor_addr_t *addr)
- {
- static const struct lookup_table_ent {
- const char *name;
- const char *ipv4;
- const char *ipv6;
- } entries[] = {
- { "localhost", "127.0.0.1", "::1" },
- { "torproject.org", "198.51.100.6", "2001:DB8::700" },
- { NULL, NULL, NULL },
- };
- int r = -1;
- for (unsigned i = 0; entries[i].name != NULL; ++i) {
- if (!strcasecmp(name, entries[i].name)) {
- if (family == AF_INET6) {
- int s = tor_addr_parse(addr, entries[i].ipv6);
- tt_int_op(s, OP_EQ, AF_INET6);
- } else {
- int s = tor_addr_parse(addr, entries[i].ipv4);
- tt_int_op(s, OP_EQ, AF_INET);
- }
- r = 0;
- break;
- }
- }
- log_debug(LD_GENERAL, "resolve(%s,%d) => %s",
- name, family, r == 0 ? fmt_addr(addr) : "-1");
- return r;
- done:
- return -1;
- }
- /**
- * Set up a mock replacement for our wrapper on libc's resolver code.
- *
- * According to our replacement, only "localhost" and "torproject.org"
- * are real addresses; everything else doesn't exist.
- *
- * Use this function to avoid using the DNS resolver during unit tests;
- * call unmock_hostname_resolver() when you're done.
- **/
- void
- mock_hostname_resolver(void)
- {
- MOCK(tor_addr_lookup_host_impl, replacement_host_lookup);
- }
- /**
- * Unmock our wrappers for libc's blocking hostname resolver code.
- **/
- void
- unmock_hostname_resolver(void)
- {
- UNMOCK(tor_addr_lookup_host_impl);
- }
|