]> xenbits.xensource.com Git - libvirt.git/commitdiff
virpcitest: Test virPCIDeviceDetach failure
authorJiri Denemark <jdenemar@redhat.com>
Thu, 16 Jan 2014 13:06:22 +0000 (14:06 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Mon, 20 Jan 2014 13:21:41 +0000 (14:21 +0100)
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
tests/virpcitest.c

index cfd5cce5191ec0df8019d0ad801b02d1a80ada4b..994b30036d59a4bc2f7d873913eb8e5256d0ca8a 100644 (file)
@@ -258,6 +258,37 @@ cleanup:
     return ret;
 }
 
+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)
 {
@@ -390,6 +421,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);