Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
tests/virpcitest.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/tests/virpcitest.c b/tests/virpcitest.c
index 848014d..6a2291d 100644
--- a/tests/virpcitest.c
+++ b/tests/virpcitest.c
@@ -258,6 +258,37 @@ cleanup:
}
static int
+testVirPCIDeviceDetachFail(const void *opaque)
+{
+ const struct testPCIDevData *data = opaque;
+ int ret = -1;
+ virPCIDevicePtr dev;
+
+ dev = virPCIDeviceNew(data->domain, data->bus, data->slot,
data->function);
+ if (!dev)
+ goto cleanup;
+
+ if (virPCIDeviceSetStubDriver(dev, "vfio-pci") < 0)
+ goto cleanup;
+
+ if (virPCIDeviceDetach(dev, NULL, NULL) < 0) {
+ if (virTestGetVerbose() || virTestGetDebug())
+ virDispatchError(NULL);
+ virResetLastError();
+ ret = 0;
+ } else {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "Attaching device %s to %s should have failed",
+ virPCIDeviceGetName(dev),
+ virPCIDeviceGetStubDriver(dev));
+ }
+
+cleanup:
+ virPCIDeviceFree(dev);
+ return ret;
+}
+
+static int
testVirPCIDeviceReattachSingle(const void *opaque)
{
const struct testPCIDevData *data = opaque;
@@ -389,6 +420,8 @@ mymain(void)
DO_TEST_PCI(testVirPCIDeviceIsAssignable, 5, 0x90, 1, 0);
DO_TEST_PCI(testVirPCIDeviceIsAssignable, 1, 1, 0, 0);
+ DO_TEST_PCI(testVirPCIDeviceDetachFail, 0, 0x0a, 1, 0);
+
/* Reattach a device already bound to non-stub a driver */
DO_TEST_PCI_DRIVER(0, 0x0a, 1, 0, "i915");
DO_TEST_PCI(testVirPCIDeviceReattachSingle, 0, 0x0a, 1, 0);
--
1.8.5.3