From 743bda062bd4abc67574741f6f1a98f8d40a46d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Tomko?= Date: Thu, 16 Jun 2016 08:54:27 +0200 Subject: [PATCH] tests: mock gnutls_dh_params_generate2 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 | 40 ++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/tests/virnettlscontexttest.c b/tests/virnettlscontexttest.c index b062be6d9d..9f62413eed 100644 --- a/tests/virnettlscontexttest.c +++ b/tests/virnettlscontexttest.c @@ -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 diff --git a/tests/virnettlssessiontest.c b/tests/virnettlssessiontest.c index 47fbec608f..0d2e106e84 100644 --- a/tests/virnettlssessiontest.c +++ b/tests/virnettlssessiontest.c @@ -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 diff --git a/tests/virrandommock.c b/tests/virrandommock.c index 6df5e20e8f..1f2434e248 100644 --- a/tests/virrandommock.c +++ b/tests/virrandommock.c @@ -37,3 +37,43 @@ virRandomBytes(unsigned char *buf, return 0; } + + +#ifdef WITH_GNUTLS +# include +# include + +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(¶ms_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 -- 2.47.2