mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 12:23:32 +01:00
Re-enable RSA cacheing in tests, with a better design.
This makes tests faster and saves about 6 seconds for me, which makes it worth it, according to https://xkcd.com/1205.
This commit is contained in:
parent
63e34e9e49
commit
5ec395b27f
@ -156,30 +156,30 @@ remove_directory(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Define this if unit tests spend too much time generating public keys*/
|
/** Define this if unit tests spend too much time generating public keys*/
|
||||||
#undef CACHE_GENERATED_KEYS
|
#define CACHE_GENERATED_KEYS
|
||||||
|
|
||||||
static crypto_pk_t *pregen_keys[5] = {NULL, NULL, NULL, NULL, NULL};
|
#define N_PREGEN_KEYS 11
|
||||||
#define N_PREGEN_KEYS ARRAY_LENGTH(pregen_keys)
|
static crypto_pk_t *pregen_keys[N_PREGEN_KEYS];
|
||||||
|
static int next_key_idx;
|
||||||
|
|
||||||
/** Generate and return a new keypair for use in unit tests. If we're using
|
/** Generate and return a new keypair for use in unit tests. If we're using
|
||||||
* the key cache optimization, we might reuse keys: we only guarantee that
|
* the key cache optimization, we might reuse keys. "idx" is ignored.
|
||||||
* keys made with distinct values for <b>idx</b> are different. The value of
|
* Our only guarantee is that we won't reuse a key till this function has been
|
||||||
* <b>idx</b> must be at least 0, and less than N_PREGEN_KEYS. */
|
* called several times. The order in which keys are returned is slightly
|
||||||
|
* randomized, so that tests that depend on a particular order will not be
|
||||||
|
* reliable. */
|
||||||
crypto_pk_t *
|
crypto_pk_t *
|
||||||
pk_generate(int idx)
|
pk_generate(int idx)
|
||||||
{
|
{
|
||||||
int res;
|
(void) idx;
|
||||||
#ifdef CACHE_GENERATED_KEYS
|
#ifdef CACHE_GENERATED_KEYS
|
||||||
tor_assert(idx < N_PREGEN_KEYS);
|
/* Either skip 1 or 2 keys. */
|
||||||
if (! pregen_keys[idx]) {
|
next_key_idx += crypto_rand_int_range(1,3);
|
||||||
pregen_keys[idx] = crypto_pk_new();
|
next_key_idx %= N_PREGEN_KEYS;
|
||||||
res = crypto_pk_generate_key(pregen_keys[idx]);
|
return crypto_pk_dup_key(pregen_keys[next_key_idx]);
|
||||||
tor_assert(!res);
|
|
||||||
}
|
|
||||||
return crypto_pk_dup_key(pregen_keys[idx]);
|
|
||||||
#else
|
#else
|
||||||
crypto_pk_t *result;
|
crypto_pk_t *result;
|
||||||
(void) idx;
|
int res;
|
||||||
result = crypto_pk_new();
|
result = crypto_pk_new();
|
||||||
res = crypto_pk_generate_key(result);
|
res = crypto_pk_generate_key(result);
|
||||||
tor_assert(!res);
|
tor_assert(!res);
|
||||||
@ -307,6 +307,14 @@ main(int c, const char **v)
|
|||||||
}
|
}
|
||||||
tor_set_failed_assertion_callback(an_assertion_failed);
|
tor_set_failed_assertion_callback(an_assertion_failed);
|
||||||
|
|
||||||
|
#ifdef CACHE_GENERATED_KEYS
|
||||||
|
for (i = 0; i < N_PREGEN_KEYS; ++i) {
|
||||||
|
pregen_keys[i] = crypto_pk_new();
|
||||||
|
int r = crypto_pk_generate_key(pregen_keys[i]);
|
||||||
|
tor_assert(r == 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
atexit(remove_directory);
|
atexit(remove_directory);
|
||||||
|
|
||||||
int have_failed = (tinytest_main(c, v, testgroups) != 0);
|
int have_failed = (tinytest_main(c, v, testgroups) != 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user