]> xenbits.xensource.com Git - libvirt.git/commitdiff
tests: Add tests for scsi utils
authorOsier Yang <jyang@redhat.com>
Thu, 30 Jan 2014 07:06:37 +0000 (15:06 +0800)
committerOsier Yang <jyang@redhat.com>
Thu, 30 Jan 2014 07:50:37 +0000 (15:50 +0800)
This creates the basic unit tests for the scsi utils.

Signed-off-by: Osier Yang <jyang@redhat.com>
.gitignore
tests/Makefile.am
tests/virscsidata/0:0:0:0/block/sda/dev [new file with mode: 0644]
tests/virscsidata/0:0:0:0/model [new file with mode: 0644]
tests/virscsidata/0:0:0:0/scsi_generic/sg0/dev [new file with mode: 0644]
tests/virscsidata/0:0:0:0/vendor [new file with mode: 0644]
tests/virscsidata/1:0:0:0/block/sr0/dev [new file with mode: 0644]
tests/virscsidata/1:0:0:0/model [new file with mode: 0644]
tests/virscsidata/1:0:0:0/scsi_generic/sg1/dev [new file with mode: 0644]
tests/virscsidata/1:0:0:0/vendor [new file with mode: 0644]
tests/virscsitest.c [new file with mode: 0644]

index 96b7211638269bba5dc6fa980bb5678548928c11..a3d4eca4f9a6c80803edfadfaae412e193d88c87 100644 (file)
 /tests/virnet*test
 /tests/virpcitest
 /tests/virportallocatortest
+/tests/virscsitest
 /tests/virshtest
 /tests/virstoragetest
 /tests/virstringtest
index 09300732b8ff107591580bb97a1721221baf9ca7..cfc0905ad5ea4fa55d51ce1cf2dc0906ac83507b 100644 (file)
@@ -111,6 +111,7 @@ EXTRA_DIST =                \
        virsh-uriprecedence \
        virfiledata \
        virpcitestdata \
+       virscsidata \
        vmx2xmldata \
        xencapsdata \
        xmconfigdata \
@@ -240,6 +241,10 @@ if WITH_STORAGE
 test_programs += storagevolxml2argvtest
 endif WITH_STORAGE
 
+if WITH_LINUX
+test_programs += virscsitest
+endif WITH_LINUX
+
 test_programs += storagevolxml2xmltest storagepoolxml2xmltest
 
 test_programs += nodedevxml2xmltest
@@ -916,6 +921,15 @@ else ! WITH_LINUX
 EXTRA_DIST += fchosttest.c
 endif  ! WITH_LINUX
 
+if WITH_LINUX
+virscsitest_SOURCES = \
+       virscsitest.c testutils.h testutils.c
+virscsitest_LDADD = $(LDADDS)
+
+else ! WITH_LINUX
+EXTRA_DIST += virscsitest.c
+endif  ! WITH_LINUX
+
 if WITH_CIL
 CILOPTFLAGS =
 CILOPTINCS =
diff --git a/tests/virscsidata/0:0:0:0/block/sda/dev b/tests/virscsidata/0:0:0:0/block/sda/dev
new file mode 100644 (file)
index 0000000..fae0a50
--- /dev/null
@@ -0,0 +1 @@
+8:0
diff --git a/tests/virscsidata/0:0:0:0/model b/tests/virscsidata/0:0:0:0/model
new file mode 100644 (file)
index 0000000..4d7e3ef
--- /dev/null
@@ -0,0 +1 @@
+TOSHIBA MK5061GS
diff --git a/tests/virscsidata/0:0:0:0/scsi_generic/sg0/dev b/tests/virscsidata/0:0:0:0/scsi_generic/sg0/dev
new file mode 100644 (file)
index 0000000..992e920
--- /dev/null
@@ -0,0 +1 @@
+21:0
diff --git a/tests/virscsidata/0:0:0:0/vendor b/tests/virscsidata/0:0:0:0/vendor
new file mode 100644 (file)
index 0000000..531030d
--- /dev/null
@@ -0,0 +1 @@
+ATA
diff --git a/tests/virscsidata/1:0:0:0/block/sr0/dev b/tests/virscsidata/1:0:0:0/block/sr0/dev
new file mode 100644 (file)
index 0000000..3d33f0f
--- /dev/null
@@ -0,0 +1 @@
+11:0
diff --git a/tests/virscsidata/1:0:0:0/model b/tests/virscsidata/1:0:0:0/model
new file mode 100644 (file)
index 0000000..4d8a0e5
--- /dev/null
@@ -0,0 +1 @@
+DVDRAM GT50N
diff --git a/tests/virscsidata/1:0:0:0/scsi_generic/sg1/dev b/tests/virscsidata/1:0:0:0/scsi_generic/sg1/dev
new file mode 100644 (file)
index 0000000..bd84814
--- /dev/null
@@ -0,0 +1 @@
+21:1
diff --git a/tests/virscsidata/1:0:0:0/vendor b/tests/virscsidata/1:0:0:0/vendor
new file mode 100644 (file)
index 0000000..d0383d4
--- /dev/null
@@ -0,0 +1 @@
+HL-DT-ST
diff --git a/tests/virscsitest.c b/tests/virscsitest.c
new file mode 100644 (file)
index 0000000..d256a0e
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * 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: Osier Yang <jyang@redhat.com>
+ *
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "virscsi.h"
+#include "testutils.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+#define VIR_SCSI_DATA "/virscsidata"
+
+static const char *abs_top_srcdir;
+static char *virscsi_prefix = NULL;
+
+static int
+test1(const void *data ATTRIBUTE_UNUSED)
+{
+    char *name = NULL;
+    int ret = -1;
+
+    if (!(name = virSCSIDeviceGetDevName(virscsi_prefix,
+                                         "scsi_host1", 0, 0, 0)))
+        return -1;
+
+    if (STRNEQ(name, "sr0"))
+        goto cleanup;
+
+    ret = 0;
+cleanup:
+    VIR_FREE(name);
+    return ret;
+}
+
+/*
+ * Two test devices are used, one has address "0:0:0:0", the
+ * other has address "1:0:0:0", see "virscsidata/" for more
+ * details.
+ */
+static int
+test2(const void *data ATTRIBUTE_UNUSED)
+{
+    virSCSIDeviceListPtr list = NULL;
+    virSCSIDevicePtr dev = NULL;
+    virSCSIDevicePtr dev1 = NULL;
+    bool free_dev = true;
+    bool free_dev1 = true;
+    virSCSIDevicePtr tmp = NULL;
+    char *sgname = NULL;
+    int ret = -1;
+
+    sgname = virSCSIDeviceGetSgName(virscsi_prefix,
+                                    "scsi_host1", 0, 0, 0);
+
+    if (!sgname || STRNEQ(sgname, "sg1"))
+        goto cleanup;
+
+    if (!(dev = virSCSIDeviceNew(virscsi_prefix, "scsi_host1",
+                                 0, 0, 0, false, true)))
+        goto cleanup;
+
+    if (STRNEQ_NULLABLE(virSCSIDeviceGetName(dev), "1:0:0:0") ||
+        virSCSIDeviceGetAdapter(dev) != 1 ||
+        virSCSIDeviceGetBus(dev) != 0 ||
+        virSCSIDeviceGetTarget(dev) != 0 ||
+        virSCSIDeviceGetUnit(dev) != 0 ||
+        virSCSIDeviceGetReadonly(dev) ||
+        !virSCSIDeviceGetShareable(dev))
+        goto cleanup;
+
+    if (!virSCSIDeviceIsAvailable(dev))
+        goto cleanup;
+
+    if (virSCSIDeviceSetUsedBy(dev, "fc18") < 0)
+        goto cleanup;
+
+    if (virSCSIDeviceIsAvailable(dev))
+        goto cleanup;
+
+    if (virSCSIDeviceSetUsedBy(dev, "fc20") < 0)
+        goto cleanup;
+
+    if (virSCSIDeviceIsAvailable(dev))
+        goto cleanup;
+
+    if (!(list = virSCSIDeviceListNew()))
+        goto cleanup;
+
+    if (virSCSIDeviceListAdd(list, dev) < 0)
+        goto cleanup;
+
+    /* virSCSIDeviceListDispose will take care of freeing
+     * the device.
+     */
+    free_dev = false;
+
+    if (!virSCSIDeviceListFind(list, dev))
+        goto cleanup;
+
+    virSCSIDeviceListDel(list, dev, "fc20");
+
+    if (!virSCSIDeviceListFind(list, dev))
+        goto cleanup;
+
+    if (virSCSIDeviceIsAvailable(dev))
+        goto cleanup;
+
+    if (virSCSIDeviceListCount(list) != 1)
+        goto cleanup;
+
+    if (!(dev1 = virSCSIDeviceNew(virscsi_prefix, "scsi_host0",
+                                  0, 0, 0, true, false)))
+        goto cleanup;
+
+    if (virSCSIDeviceListAdd(list, dev1) < 0)
+        goto cleanup;
+
+    /* virSCSIDeviceListDispose will take care of freeing
+     * the device.
+     */
+    free_dev1 = false;
+
+    if (virSCSIDeviceListCount(list) != 2)
+        goto cleanup;
+
+    if (!(tmp = virSCSIDeviceListSteal(list, dev1)))
+        goto cleanup;
+    virSCSIDeviceFree(tmp);
+
+    if (virSCSIDeviceListCount(list) != 1)
+        goto cleanup;
+
+    ret = 0;
+cleanup:
+    VIR_FREE(sgname);
+    if (free_dev)
+        virSCSIDeviceFree(dev);
+    if (free_dev1)
+        virSCSIDeviceFree(dev1);
+    virObjectUnref(list);
+    return ret;
+}
+
+static int
+mymain(void)
+{
+    int ret = 0;
+
+    abs_top_srcdir = getenv("abs_top_srcdir");
+    if (!abs_top_srcdir)
+        abs_top_srcdir = abs_srcdir "/..";
+
+    if (virAsprintf(&virscsi_prefix, "%s" VIR_SCSI_DATA, abs_srcdir) < 0) {
+        ret = -1;
+        goto cleanup;
+    }
+
+    if (virtTestRun("test1", test1, NULL) < 0)
+        ret = -1;
+    if (virtTestRun("test2", test2, NULL) < 0)
+        ret = -1;
+
+cleanup:
+    VIR_FREE(virscsi_prefix);
+    return ret;
+}
+
+VIRT_TEST_MAIN(mymain)