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

Peter Krempa pkrempa at redhat.com
Wed May 11 11:36:45 UTC 2016


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(-)

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;
+}
-- 
2.8.2




More information about the libvir-list mailing list