tests: mock gnutls_dh_params_generate2

This function generates some big random numbers.

Cache the result and supply it to any subsequent generate2 calls.
This commit is contained in:
Ján Tomko 2016-06-16 08:54:27 +02:00
parent 9f95593d60
commit 743bda062b
3 changed files with 42 additions and 2 deletions

View File

@ -633,7 +633,7 @@ mymain(void)
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
VIRT_TEST_MAIN(mymain)
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virrandommock.so")
#else

View File

@ -487,7 +487,7 @@ mymain(void)
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
VIRT_TEST_MAIN(mymain)
VIRT_TEST_MAIN_PRELOAD(mymain, abs_builddir "/.libs/virrandommock.so")
#else

View File

@ -37,3 +37,43 @@ virRandomBytes(unsigned char *buf,
return 0;
}
#ifdef WITH_GNUTLS
# include <stdio.h>
# include <gnutls/gnutls.h>
static int (*real_gnutls_dh_params_generate2)(gnutls_dh_params_t dparams,
unsigned int bits);
static gnutls_dh_params_t params_cache;
static unsigned int cachebits;
int
gnutls_dh_params_generate2(gnutls_dh_params_t dparams,
unsigned int bits)
{
int rc = 0;
VIR_MOCK_REAL_INIT(gnutls_dh_params_generate2);
if (!params_cache) {
if (gnutls_dh_params_init(&params_cache) < 0) {
fprintf(stderr, "Error initializing params cache");
abort();
}
rc = real_gnutls_dh_params_generate2(params_cache, bits);
if (rc < 0)
return rc;
cachebits = bits;
}
if (cachebits != bits) {
fprintf(stderr, "Requested bits do not match the cached value");
abort();
}
return gnutls_dh_params_cpy(dparams, params_cache);
}
#endif