Merge remote-tracking branch 'rl1987/bug25852_take2'

This commit is contained in:
Nick Mathewson
2018-05-14 14:05:50 -04:00
5 changed files with 191 additions and 19 deletions
+64 -2
View File
@@ -1496,9 +1496,21 @@ test_dump_exit_policy_to_string(void *arg)
}
static routerinfo_t *mock_desc_routerinfo = NULL;
static int routerinfo_err;
static const routerinfo_t *
mock_router_get_my_routerinfo(void)
mock_router_get_my_routerinfo_with_err(int *err)
{
if (routerinfo_err) {
if (err)
*err = routerinfo_err;
return NULL;
}
if (err)
*err = 0;
return mock_desc_routerinfo;
}
@@ -1541,7 +1553,8 @@ test_policies_getinfo_helper_policies(void *arg)
tor_free(answer);
memset(&mock_my_routerinfo, 0, sizeof(routerinfo_t));
MOCK(router_get_my_routerinfo, mock_router_get_my_routerinfo);
MOCK(router_get_my_routerinfo_with_err,
mock_router_get_my_routerinfo_with_err);
mock_my_routerinfo.exit_policy = smartlist_new();
mock_desc_routerinfo = &mock_my_routerinfo;
@@ -1658,6 +1671,55 @@ test_policies_getinfo_helper_policies(void *arg)
tt_assert(strlen(answer) == ipv4_len + ipv6_len + 1);
tor_free(answer);
routerinfo_err = TOR_ROUTERINFO_ERROR_NO_EXT_ADDR;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, -1);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "No known exit address yet");
routerinfo_err = TOR_ROUTERINFO_ERROR_CANNOT_PARSE;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, -1);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "Cannot parse descriptor");
routerinfo_err = TOR_ROUTERINFO_ERROR_NOT_A_SERVER;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, 0);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "Not running in server mode");
routerinfo_err = TOR_ROUTERINFO_ERROR_DIGEST_FAILED;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, 0);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "Key digest failed");
routerinfo_err = TOR_ROUTERINFO_ERROR_CANNOT_GENERATE;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, -1);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "Cannot generate descriptor");
routerinfo_err = TOR_ROUTERINFO_ERROR_DESC_REBUILDING;
rv = getinfo_helper_policies(NULL, "exit-policy/full", &answer,
&errmsg);
tt_int_op(rv, OP_EQ, -1);
tt_ptr_op(answer, OP_EQ, NULL);
tt_ptr_op(errmsg, OP_NE, NULL);
tt_str_op(errmsg, OP_EQ, "Descriptor still rebuilding - not ready yet");
done:
tor_free(answer);
UNMOCK(get_options);