mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Fix up vote tests in test_dir_handle_get.
These tests used a hardcoded vote with a hardcoded digest. That vote didn't have any pr lines, and so it is now invalid. I've adjusted the testing code so that it mocks the signature-checking, so that we can more easily change the contents of the vote.
This commit is contained in:
parent
36ea25c236
commit
acf4225441
@ -139,13 +139,13 @@ signed_digest_equals, (const uint8_t *d1, const uint8_t *d2, size_t len))
|
||||
* the document when generating log messages. Return 0 on success, negative
|
||||
* on failure.
|
||||
*/
|
||||
int
|
||||
check_signature_token(const char *digest,
|
||||
MOCK_IMPL(int,
|
||||
check_signature_token,(const char *digest,
|
||||
ssize_t digest_len,
|
||||
directory_token_t *tok,
|
||||
crypto_pk_t *pkey,
|
||||
int flags,
|
||||
const char *doctype)
|
||||
const char *doctype))
|
||||
{
|
||||
char *signed_digest;
|
||||
size_t keysize;
|
||||
|
@ -20,12 +20,12 @@ int router_get_hash_impl(const char *s, size_t s_len, char *digest,
|
||||
|
||||
#define CST_NO_CHECK_OBJTYPE (1<<0)
|
||||
struct directory_token_t;
|
||||
int check_signature_token(const char *digest,
|
||||
ssize_t digest_len,
|
||||
struct directory_token_t *tok,
|
||||
crypto_pk_t *pkey,
|
||||
int flags,
|
||||
const char *doctype);
|
||||
MOCK_DECL(int, check_signature_token,(const char *digest,
|
||||
ssize_t digest_len,
|
||||
struct directory_token_t *tok,
|
||||
crypto_pk_t *pkey,
|
||||
int flags,
|
||||
const char *doctype));
|
||||
|
||||
int router_get_hash_impl_helper(const char *s, size_t s_len,
|
||||
const char *start_str,
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "feature/nodelist/nodelist.h"
|
||||
#include "feature/client/entrynodes.h"
|
||||
#include "feature/dirparse/authcert_parse.h"
|
||||
#include "feature/dirparse/sigcommon.h"
|
||||
#include "feature/nodelist/networkstatus.h"
|
||||
#include "core/proto/proto_http.h"
|
||||
#include "lib/geoip/geoip.h"
|
||||
@ -73,6 +74,23 @@ ENABLE_GCC_WARNING("-Woverlength-strings")
|
||||
|
||||
#define consdiffmgr_add_consensus consdiffmgr_add_consensus_nulterm
|
||||
|
||||
static int
|
||||
mock_ignore_signature_token(const char *digest,
|
||||
ssize_t digest_len,
|
||||
struct directory_token_t *tok,
|
||||
crypto_pk_t *pkey,
|
||||
int flags,
|
||||
const char *doctype)
|
||||
{
|
||||
(void)digest;
|
||||
(void)digest_len;
|
||||
(void)tok;
|
||||
(void)pkey;
|
||||
(void)flags;
|
||||
(void)doctype;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static dir_connection_t *
|
||||
new_dir_conn(void)
|
||||
{
|
||||
@ -1976,7 +1994,8 @@ test_dir_handle_get_status_vote_current_not_found(void* data)
|
||||
tor_free(header);
|
||||
}
|
||||
|
||||
#define VOTE_DIGEST "312A4890D4D832597ABBD3089C782DBBFB81E48D"
|
||||
/* What vote do we ask for, to get the vote in vote_descriptors.inc ? */
|
||||
#define VOTE_DIGEST "78400095d8e834d87135cfc46235c909f0e99911"
|
||||
|
||||
static void
|
||||
status_vote_current_d_test(char **header, char **body, size_t *body_l)
|
||||
@ -2058,6 +2077,7 @@ test_dir_handle_get_status_vote_d(void* data)
|
||||
const char digest[DIGEST_LEN] = "";
|
||||
(void) data;
|
||||
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
clear_dir_servers();
|
||||
dirvote_free_all();
|
||||
|
||||
@ -2094,7 +2114,7 @@ test_dir_handle_get_status_vote_d(void* data)
|
||||
tt_ptr_op(strstr(header, "HTTP/1.0 200 OK\r\n"), OP_EQ, header);
|
||||
tt_assert(strstr(header, "Content-Type: text/plain\r\n"));
|
||||
tt_assert(strstr(header, "Content-Encoding: identity\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4135\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4403\r\n"));
|
||||
|
||||
tt_str_op(VOTE_BODY_V3, OP_EQ, body);
|
||||
|
||||
@ -2107,11 +2127,12 @@ test_dir_handle_get_status_vote_d(void* data)
|
||||
tt_ptr_op(strstr(header, "HTTP/1.0 200 OK\r\n"), OP_EQ, header);
|
||||
tt_assert(strstr(header, "Content-Type: text/plain\r\n"));
|
||||
tt_assert(strstr(header, "Content-Encoding: identity\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4135\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4403\r\n"));
|
||||
|
||||
tt_str_op(VOTE_BODY_V3, OP_EQ, body);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
tor_free(header);
|
||||
tor_free(body);
|
||||
or_options_free(mock_options); mock_options = NULL;
|
||||
@ -2188,6 +2209,7 @@ test_dir_handle_get_status_vote_current_authority_not_found(void* data)
|
||||
(void) data;
|
||||
|
||||
MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock);
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
|
||||
conn = new_dir_conn();
|
||||
tt_int_op(0, OP_EQ, directory_handle_command_get(conn,
|
||||
@ -2199,6 +2221,7 @@ test_dir_handle_get_status_vote_current_authority_not_found(void* data)
|
||||
tt_str_op(NOT_FOUND, OP_EQ, header);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
tor_free(header);
|
||||
@ -2212,6 +2235,7 @@ test_dir_handle_get_status_vote_next_authority_not_found(void* data)
|
||||
(void) data;
|
||||
|
||||
MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock);
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
|
||||
conn = new_dir_conn();
|
||||
tt_int_op(0, OP_EQ, directory_handle_command_get(conn,
|
||||
@ -2223,6 +2247,7 @@ test_dir_handle_get_status_vote_next_authority_not_found(void* data)
|
||||
tt_str_op(NOT_FOUND, OP_EQ, header);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
tor_free(header);
|
||||
@ -2236,7 +2261,7 @@ test_dir_handle_get_status_vote_next_bandwidth_not_found(void* data)
|
||||
(void) data;
|
||||
|
||||
MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock);
|
||||
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
conn = new_dir_conn();
|
||||
|
||||
tt_int_op(0, OP_EQ, directory_handle_command_get(conn,
|
||||
@ -2248,6 +2273,7 @@ test_dir_handle_get_status_vote_next_bandwidth_not_found(void* data)
|
||||
tt_str_op(NOT_FOUND, OP_EQ, header);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
tor_free(header);
|
||||
@ -2428,6 +2454,7 @@ test_dir_handle_get_status_vote_next_authority(void* data)
|
||||
const char digest[DIGEST_LEN] = "";
|
||||
(void) data;
|
||||
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
clear_dir_servers();
|
||||
routerlist_free_all();
|
||||
dirvote_free_all();
|
||||
@ -2477,11 +2504,12 @@ test_dir_handle_get_status_vote_next_authority(void* data)
|
||||
tt_ptr_op(strstr(header, "HTTP/1.0 200 OK\r\n"), OP_EQ, header);
|
||||
tt_assert(strstr(header, "Content-Type: text/plain\r\n"));
|
||||
tt_assert(strstr(header, "Content-Encoding: identity\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4135\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4403\r\n"));
|
||||
|
||||
tt_str_op(VOTE_BODY_V3, OP_EQ, body);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
UNMOCK(get_my_v3_authority_cert);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
@ -2587,6 +2615,7 @@ test_dir_handle_get_status_vote_current_authority(void* data)
|
||||
dir_server_t *ds = NULL;
|
||||
(void) data;
|
||||
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
clear_dir_servers();
|
||||
routerlist_free_all();
|
||||
dirvote_free_all();
|
||||
@ -2640,11 +2669,12 @@ test_dir_handle_get_status_vote_current_authority(void* data)
|
||||
tt_ptr_op(strstr(header, "HTTP/1.0 200 OK\r\n"), OP_EQ, header);
|
||||
tt_assert(strstr(header, "Content-Type: text/plain\r\n"));
|
||||
tt_assert(strstr(header, "Content-Encoding: identity\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4135\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4403\r\n"));
|
||||
|
||||
tt_str_op(VOTE_BODY_V3, OP_EQ, body);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
UNMOCK(get_my_v3_authority_cert);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
@ -2672,6 +2702,7 @@ test_dir_handle_get_status_vote_too_late(void* data)
|
||||
dir_server_t *ds = NULL;
|
||||
const char* mode = (const char *)data;
|
||||
|
||||
MOCK(check_signature_token, mock_ignore_signature_token);
|
||||
clear_dir_servers();
|
||||
routerlist_free_all();
|
||||
dirvote_free_all();
|
||||
@ -2817,11 +2848,12 @@ test_dir_handle_get_status_vote_too_late(void* data)
|
||||
tt_ptr_op(strstr(header, "HTTP/1.0 200 OK\r\n"), OP_EQ, header);
|
||||
tt_assert(strstr(header, "Content-Type: text/plain\r\n"));
|
||||
tt_assert(strstr(header, "Content-Encoding: identity\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4135\r\n"));
|
||||
tt_assert(strstr(header, "Content-Length: 4403\r\n"));
|
||||
|
||||
tt_str_op(VOTE_BODY_V3, OP_EQ, body);
|
||||
|
||||
done:
|
||||
UNMOCK(check_signature_token);
|
||||
UNMOCK(connection_write_to_buf_impl_);
|
||||
UNMOCK(get_my_v3_authority_cert);
|
||||
connection_free_minimal(TO_CONN(conn));
|
||||
|
@ -1,3 +1,6 @@
|
||||
/* Not sure where we got this; it appears to be hand-generated and signed.
|
||||
* It's been edited so that the signature doesn't verify any more;
|
||||
* you need to mock check_signature_token for this to work. */
|
||||
static const char* VOTE_BODY_V3 =
|
||||
"network-status-version 3\n"
|
||||
"vote-status vote\n"
|
||||
@ -60,6 +63,7 @@ static const char* VOTE_BODY_V3 =
|
||||
"w Bandwidth=30 Measured=30\n"
|
||||
"p reject 1-65535\n"
|
||||
"id ed25519 none\n"
|
||||
"pr Cons=1-2 Desc=1-2 DirCache=1-2 FlowCtrl=1 HSDir=1-2 HSIntro=3-5\n"
|
||||
"m 9,10,11,12,13,14,15,16,17 sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa0\n"
|
||||
"r router1 BQUFBQUFBQUFBQUFBQUFBQUFBQU TU1NTU1NTU1NTU1NTU1NTU1NTU0 2015-09-02 19:17:35 153.0.153.1 443 0\n"
|
||||
"a [1:2:3::4]:4711\n"
|
||||
@ -68,6 +72,7 @@ static const char* VOTE_BODY_V3 =
|
||||
"w Bandwidth=120 Measured=120\n"
|
||||
"p reject 1-65535\n"
|
||||
"id ed25519 none\n"
|
||||
"pr Cons=1-2 Desc=1-2 DirCache=1-2 FlowCtrl=1 HSDir=1-2 HSIntro=3-5\n"
|
||||
"m 9,10,11,12,13,14,15,16,17 sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa1\n"
|
||||
"r router3 MzMzMzMzMzMzMzMzMzMzMzMzMzM T09PT09PT09PT09PT09PT09PT08 2015-09-02 19:17:35 170.0.153.1 400 9999\n"
|
||||
"s Authority Exit Fast Guard Running Stable V2Dir Valid\n"
|
||||
@ -75,6 +80,7 @@ static const char* VOTE_BODY_V3 =
|
||||
"w Bandwidth=120\n"
|
||||
"p reject 1-65535\n"
|
||||
"id ed25519 none\n"
|
||||
"pr Cons=1-2 Desc=1-2 DirCache=1-2 FlowCtrl=1 HSDir=1-2 HSIntro=3-5\n"
|
||||
"m 9,10,11,12,13,14,15,16,17 "
|
||||
"sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa2\n"
|
||||
"r router4 NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ Ly8vLy8vLy8vLy8vLy8vLy8vLy8 2015-09-02 19:17:35 192.0.2.3 500 1999\n"
|
||||
@ -83,6 +89,7 @@ static const char* VOTE_BODY_V3 =
|
||||
"w Bandwidth=30\n"
|
||||
"p reject 1-65535\n"
|
||||
"id ed25519 none\n"
|
||||
"pr Cons=1-2 Desc=1-2 DirCache=1-2 FlowCtrl=1 HSDir=1-2 HSIntro=3-5\n"
|
||||
"m 9,10,11,12,13,14,15,16,17 sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa3\n"
|
||||
"directory-footer\n"
|
||||
"directory-signature D867ACF56A9D229B35C25F0090BC9867E906BE69 CBF56A83368A5150F1A9AAADAFB4D77F8C4170E2\n"
|
||||
@ -91,4 +98,3 @@ static const char* VOTE_BODY_V3 =
|
||||
"TXQWGUq9Z7jdSVnzWT3xqPA4zjw6eZkj+DKUtwq+oEDZGlf8eHTFmr0NAWfwZbk9\n"
|
||||
"NAjbMTUXUP37N2XAZwkoCWwFCrrfMwXrL7OhZbj7ifo=\n"
|
||||
"-----END SIGNATURE-----\n";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user