static void test_addr_is_loopback(void *data) { static const struct loopback_item { const char *name; int is_loopback; } loopback_items[] = { { "::1", 1 }, { "127.0.0.1", 1 }, { "127.99.100.101", 1 }, { "128.99.100.101", 0 }, { "8.8.8.8", 0 }, { "0.0.0.0", 0 }, { "::2", 0 }, { "::", 0 }, { "::1.0.0.0", 0 }, { NULL, 0 } }; int i; tor_addr_t addr; (void)data; for (i=0; loopback_items[i].name; ++i) { tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), OP_GE, 0); tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, loopback_items[i].is_loopback); } tor_addr_make_unspec(&addr); tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, 0); done: ; }
static void test_address_get_if_addrs(void *arg) { int rv; uint32_t addr_h = 0; tor_addr_t tor_addr; (void)arg; rv = get_interface_address(LOG_ERR, &addr_h); /* When the network is down, a system might not have any non-local * non-multicast IPv4 addresses, not even internal ones. * Unit tests shouldn't fail because of this. */ if (rv == 0) { tor_addr_from_ipv4h(&tor_addr, addr_h); tt_assert(!tor_addr_is_loopback(&tor_addr)); tt_assert(!tor_addr_is_multicast(&tor_addr)); /* The address may or may not be an internal address */ tt_assert(tor_addr_is_v4(&tor_addr)); } done: return; }
/** Return 1 iff <b>smartlist</b> contains a tor_addr_t structure * that is an IPv4 or IPv6 localhost address. Otherwise, return 0. */ static int smartlist_contains_localhost_tor_addr(smartlist_t *smartlist) { SMARTLIST_FOREACH_BEGIN(smartlist, tor_addr_t *, tor_addr) { if (tor_addr_is_loopback(tor_addr)) { return 1; } } SMARTLIST_FOREACH_END(tor_addr); return 0; }
static void test_conn_lookup_addr_helper(const char *address, int family, tor_addr_t *addr) { int rv = 0; tt_assert(addr); rv = tor_addr_lookup(address, family, addr); /* XXXX - should we retry on transient failure? */ tt_assert(rv == 0); tt_assert(tor_addr_is_loopback(addr)); tt_assert(tor_addr_is_v4(addr)); return; done: tor_addr_make_null(addr, TEST_CONN_FAMILY); }
static void test_address_get_if_addrs6(void *arg) { int rv; tor_addr_t tor_addr; (void)arg; rv = get_interface_address6(LOG_ERR, AF_INET6, &tor_addr); /* Work even on systems without IPv6 interfaces */ if (rv == 0) { tt_assert(!tor_addr_is_loopback(&tor_addr)); tt_assert(!tor_addr_is_multicast(&tor_addr)); /* The address may or may not be an internal address */ tt_assert(!tor_addr_is_v4(&tor_addr)); } done: return; }