#include "virstring.h"
#include "qemu_hostdev.h"
#include "qemu_domain.h"
+#define __QEMU_CAPSRIV_H_ALLOW__
+#include "qemu_capspriv.h"
#include <fcntl.h>
#include <sys/stat.h>
unsigned int *machineMaxCpus;
};
-struct _virQEMUCapsCache {
- virMutex lock;
- virHashTablePtr binaries;
- char *libDir;
- char *cacheDir;
- uid_t runUid;
- gid_t runGid;
-};
-
struct virQEMUCapsSearchData {
virArch arch;
};
return NULL;
}
+const char *qemuTestCapsName;
virQEMUCapsPtr
virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache, const char *binary)
{
virQEMUCapsPtr ret = NULL;
+
+ /* This is used only by test suite!!! */
+ if (qemuTestCapsName)
+ binary = qemuTestCapsName;
+
virMutexLock(&cache->lock);
ret = virHashLookup(cache->binaries, binary);
if (ret &&
--- /dev/null
+/*
+ * qemu_capspriv.h: private declarations for QEMU capabilities generation
+ *
+ * Copyright (C) 2015 Samsung Electronics Co. Ltd
+ * Copyright (C) 2015 Pavel Fedin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Pavel Fedin <p.fedin@samsung.com>
+ */
+
+#ifndef __QEMU_CAPSRIV_H_ALLOW__
+# error "qemu_capspriv.h may only be included by qemu_capabilities.c or test suites"
+#endif
+
+#ifndef __QEMU_CAPSPRIV_H__
+# define __QEMU_CAPSPRIV_H__
+
+struct _virQEMUCapsCache {
+ virMutex lock;
+ virHashTablePtr binaries;
+ char *libDir;
+ char *cacheDir;
+ uid_t runUid;
+ gid_t runGid;
+};
+
+#endif
# include "cpu_conf.h"
# include "qemu/qemu_driver.h"
# include "qemu/qemu_domain.h"
+# define __QEMU_CAPSRIV_H_ALLOW__
+# include "qemu/qemu_capspriv.h"
# include "virstring.h"
# define VIR_FROM_THIS VIR_FROM_QEMU
void qemuTestDriverFree(virQEMUDriver *driver)
{
+ virQEMUCapsCacheFree(driver->qemuCapsCache);
virObjectUnref(driver->xmlopt);
virObjectUnref(driver->caps);
virObjectUnref(driver->config);
}
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+ virQEMUCapsPtr caps)
+{
+ int ret;
+
+ if (caps) {
+ /* Our caps were created artificially, so we don't want
+ * virQEMUCapsCacheFree() to attempt to deallocate them */
+ virObjectRef(caps);
+ } else {
+ caps = virQEMUCapsNew();
+ if (!caps)
+ return -ENOMEM;
+ }
+
+ /* We can have repeating names for our test data sets,
+ * so make sure there's no old copy */
+ virHashRemoveEntry(cache->binaries, binary);
+
+ ret = virHashAddEntry(cache->binaries, binary, caps);
+ if (ret < 0)
+ virObjectUnref(caps);
+
+ return ret;
+}
+
int qemuTestDriverInit(virQEMUDriver *driver)
{
driver->config = virQEMUDriverConfigNew(false);
qemuTestDriverFree(driver);
return -1;
}
+
#endif
int qemuTestDriverInit(virQEMUDriver *driver);
void qemuTestDriverFree(virQEMUDriver *driver);
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+ virQEMUCapsPtr caps);
+
+/* This variable is actually defined in src/qemu/qemu_capabilities.c */
+extern const char *qemuTestCapsName;
#endif