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:
Osier Yang 2014-01-30 15:06:37 +08:00
parent 10c9ceff6d
commit 6fdece9a33
11 changed files with 211 additions and 0 deletions

1
.gitignore vendored
View File

@ -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

View File

@ -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 =

View File

@ -0,0 +1 @@
8:0

View File

@ -0,0 +1 @@
TOSHIBA MK5061GS

View File

@ -0,0 +1 @@
21:0

View File

@ -0,0 +1 @@
ATA

View File

@ -0,0 +1 @@
11:0

View File

@ -0,0 +1 @@
DVDRAM GT50N

View File

@ -0,0 +1 @@
21:1

View File

@ -0,0 +1 @@
HL-DT-ST

188
tests/virscsitest.c Normal file
View 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)