
On Fri, Jun 17, 2016 at 20:04:37 +0200, Ján Tomko wrote:
This function generates some big random numbers.
Cache the result and supply it to any subsequent generate2 calls. --- tests/virnettlscontexttest.c | 2 +- tests/virnettlssessiontest.c | 2 +- tests/virrandommock.c | 51 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/tests/virrandommock.c b/tests/virrandommock.c index 6df5e20..04703a1 100644 --- a/tests/virrandommock.c +++ b/tests/virrandommock.c @@ -37,3 +37,54 @@ virRandomBytes(unsigned char *buf,
return 0; } + + +#ifdef WITH_GNUTLS +# include <assert.h> +# include <stdio.h> +# include <gnutls/gnutls.h> + +static int (*realgenerate2)(gnutls_dh_params_t dparams, + unsigned int bits); + +static void init_syms(void) +{
We have a macro to help with all the stuff below. It also has better error message. You should use it: VIR_MOCK_REAL_INIT
+ if (realgenerate2) + return; + + realgenerate2 = dlsym(RTLD_NEXT, "gnutls_dh_params_generate2"); + if (realgenerate2) + return; + + fprintf(stderr, "Error getting symbols"); + abort(); +} + +static gnutls_dh_params_t params_cache; +unsigned int cachebits;
Perhaps this should be static too.
+ +int +gnutls_dh_params_generate2(gnutls_dh_params_t dparams, + unsigned int bits) +{ + int rc = 0; + + init_syms(); + + if (!params_cache) { + if (gnutls_dh_params_init(¶ms_cache) < 0) { + fprintf(stderr, "Error initializing params cache"); + abort(); + } + rc = realgenerate2(params_cache, bits); + + if (rc < 0) + return rc; + cachebits = bits; + } + + assert(cachebits == bits);
I'd rather not use assert here. Since you already have abort available you can use it directly.
+ + return gnutls_dh_params_cpy(dparams, params_cache); +}
ACK with fixes.