mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
tests: Add tests for scsi utils
This creates the basic unit tests for the scsi utils. Signed-off-by: Osier Yang <jyang@redhat.com>
This commit is contained in:
parent
10c9ceff6d
commit
6fdece9a33
1
.gitignore
vendored
1
.gitignore
vendored
@ -207,6 +207,7 @@
|
|||||||
/tests/virnet*test
|
/tests/virnet*test
|
||||||
/tests/virpcitest
|
/tests/virpcitest
|
||||||
/tests/virportallocatortest
|
/tests/virportallocatortest
|
||||||
|
/tests/virscsitest
|
||||||
/tests/virshtest
|
/tests/virshtest
|
||||||
/tests/virstoragetest
|
/tests/virstoragetest
|
||||||
/tests/virstringtest
|
/tests/virstringtest
|
||||||
|
@ -111,6 +111,7 @@ EXTRA_DIST = \
|
|||||||
virsh-uriprecedence \
|
virsh-uriprecedence \
|
||||||
virfiledata \
|
virfiledata \
|
||||||
virpcitestdata \
|
virpcitestdata \
|
||||||
|
virscsidata \
|
||||||
vmx2xmldata \
|
vmx2xmldata \
|
||||||
xencapsdata \
|
xencapsdata \
|
||||||
xmconfigdata \
|
xmconfigdata \
|
||||||
@ -240,6 +241,10 @@ if WITH_STORAGE
|
|||||||
test_programs += storagevolxml2argvtest
|
test_programs += storagevolxml2argvtest
|
||||||
endif WITH_STORAGE
|
endif WITH_STORAGE
|
||||||
|
|
||||||
|
if WITH_LINUX
|
||||||
|
test_programs += virscsitest
|
||||||
|
endif WITH_LINUX
|
||||||
|
|
||||||
test_programs += storagevolxml2xmltest storagepoolxml2xmltest
|
test_programs += storagevolxml2xmltest storagepoolxml2xmltest
|
||||||
|
|
||||||
test_programs += nodedevxml2xmltest
|
test_programs += nodedevxml2xmltest
|
||||||
@ -916,6 +921,15 @@ else ! WITH_LINUX
|
|||||||
EXTRA_DIST += fchosttest.c
|
EXTRA_DIST += fchosttest.c
|
||||||
endif ! WITH_LINUX
|
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
|
if WITH_CIL
|
||||||
CILOPTFLAGS =
|
CILOPTFLAGS =
|
||||||
CILOPTINCS =
|
CILOPTINCS =
|
||||||
|
1
tests/virscsidata/0:0:0:0/block/sda/dev
Normal file
1
tests/virscsidata/0:0:0:0/block/sda/dev
Normal file
@ -0,0 +1 @@
|
|||||||
|
8:0
|
1
tests/virscsidata/0:0:0:0/model
Normal file
1
tests/virscsidata/0:0:0:0/model
Normal file
@ -0,0 +1 @@
|
|||||||
|
TOSHIBA MK5061GS
|
1
tests/virscsidata/0:0:0:0/scsi_generic/sg0/dev
Normal file
1
tests/virscsidata/0:0:0:0/scsi_generic/sg0/dev
Normal file
@ -0,0 +1 @@
|
|||||||
|
21:0
|
1
tests/virscsidata/0:0:0:0/vendor
Normal file
1
tests/virscsidata/0:0:0:0/vendor
Normal file
@ -0,0 +1 @@
|
|||||||
|
ATA
|
1
tests/virscsidata/1:0:0:0/block/sr0/dev
Normal file
1
tests/virscsidata/1:0:0:0/block/sr0/dev
Normal file
@ -0,0 +1 @@
|
|||||||
|
11:0
|
1
tests/virscsidata/1:0:0:0/model
Normal file
1
tests/virscsidata/1:0:0:0/model
Normal file
@ -0,0 +1 @@
|
|||||||
|
DVDRAM GT50N
|
1
tests/virscsidata/1:0:0:0/scsi_generic/sg1/dev
Normal file
1
tests/virscsidata/1:0:0:0/scsi_generic/sg1/dev
Normal file
@ -0,0 +1 @@
|
|||||||
|
21:1
|
1
tests/virscsidata/1:0:0:0/vendor
Normal file
1
tests/virscsidata/1:0:0:0/vendor
Normal file
@ -0,0 +1 @@
|
|||||||
|
HL-DT-ST
|
188
tests/virscsitest.c
Normal file
188
tests/virscsitest.c
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user