[libvirt] [PATCH] tests: qemu: mock master key generation

John Ferlan jferlan at redhat.com
Wed May 11 11:53:07 UTC 2016



On 05/11/2016 07:36 AM, Peter Krempa wrote:
> The master key generation is using host state to get the random bytes.
> Currently it's not used so it doesn't break any tests, but it may become
> a problem in the future.
> 
> Fix it by mocking qemuDomainGenerateRandomKey. This is possible after
> exporting it and switching to the dynamically linked qemu driver object
> for tests.
> ---
> This also makes the test not call any gnutls function which crashed certain
> gnutls versions as we did not initialize it (gnutls_global_init()). It may be
> also worth adding the call to virtTestMain so that tests don't run into that
> problem, but I'm not totaly persuaded that it's a good idea.
> 
>  src/qemu/qemu_domain.c   |  2 +-
>  src/qemu/qemu_domain.h   |  2 ++
>  tests/Makefile.am        |  2 +-
>  tests/qemuxml2argvmock.c | 21 +++++++++++++++++++++
>  4 files changed, 25 insertions(+), 2 deletions(-)
> 

I think I addressed this in patch 2 of my series:

http://www.redhat.com/archives/libvir-list/2016-May/msg00444.html

John
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 3da0079..d955ed4 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -640,7 +640,7 @@ qemuDomainMasterKeyReadFile(qemuDomainObjPrivatePtr priv)
>   *
>   * Returns pointer memory containing key on success, NULL on failure
>   */
> -static uint8_t *
> +uint8_t *
>  qemuDomainGenerateRandomKey(size_t nbytes)
>  {
>      uint8_t *key;
> diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
> index c711188..b116949 100644
> --- a/src/qemu/qemu_domain.h
> +++ b/src/qemu/qemu_domain.h
> @@ -669,4 +669,6 @@ int qemuDomainSecretPrepare(virConnectPtr conn, virDomainObjPtr vm)
>  int qemuDomainDefValidateDiskLunSource(const virStorageSource *src)
>      ATTRIBUTE_NONNULL(1);
> 
> +uint8_t *qemuDomainGenerateRandomKey(size_t nbytes);
> +
>  #endif /* __QEMU_DOMAIN_H__ */
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 75efb90..ba14b8f 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -561,7 +561,7 @@ libqemutestdriver_la_LIBADD = $(qemu_LDADDS)
>  qemuxml2argvtest_SOURCES = \
>  	qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \
>  	testutils.c testutils.h
> -qemuxml2argvtest_LDADD = $(qemu_LDADDS) $(LDADDS) $(LIBXML_LIBS)
> +qemuxml2argvtest_LDADD = libqemutestdriver.la $(LDADDS) $(LIBXML_LIBS)
> 
>  qemuxml2argvmock_la_SOURCES = \
>  	qemuxml2argvmock.c
> diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
> index 1616eed..1bad3ae 100644
> --- a/tests/qemuxml2argvmock.c
> +++ b/tests/qemuxml2argvmock.c
> @@ -30,6 +30,10 @@
>  #include "virstring.h"
>  #include "virtpm.h"
>  #include "virutil.h"
> +#include "viralloc.h"
> +
> +#include "qemu/qemu_domain.h"
> +
>  #include <time.h>
>  #include <unistd.h>
> 
> @@ -145,3 +149,20 @@ virCommandPassFD(virCommandPtr cmd ATTRIBUTE_UNUSED,
>  {
>      /* nada */
>  }
> +
> +
> +uint8_t *
> +qemuDomainGenerateRandomKey(size_t nbytes)
> +{
> +    size_t i;
> +    uint8_t seq = 0;
> +    uint8_t *key;
> +
> +    if (VIR_ALLOC_N(key, nbytes) < 0)
> +        return NULL;
> +
> +    for (i = 0; i < nbytes; i++)
> +        key[i] = seq++;
> +
> +    return key;
> +}
> 




More information about the libvir-list mailing list