[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]