[libvirt] [PATCH 1/2] Add tests for virUSBDeviceFind functions

Ján Tomko jtomko at redhat.com
Thu Feb 27 14:23:22 UTC 2014


On 02/27/2014 02:27 PM, Michal Privoznik wrote:
> On 26.02.2014 17:54, Ján Tomko wrote:
>> Mock the /sys/bus/usb directory and test the finding
>> (and not finding) of some USB devices.
>> ---

>> @@ -815,6 +817,16 @@ virpcimock_la_LIBADD = $(GNULIB_LIBS) \
>>   virpcimock_la_LDFLAGS = -module -avoid-version \
>>           -rpath /evil/libtool/hack/to/force/shared/lib/creation
>>
>> +virusbtest_SOURCES = \
>> +    virusbtest.c testutils.h testutils.c
>> +virusbtest_LDADD = $(LDADDS)
>> +
>> +virusbmock_la_SOURCES = \
>> +    virusbtest.c
>> +virusbmock_la_CFLAGS = $(AM_CFLAGS) -DMOCK_HELPER=1
>> +virusbmock_la_LDFLAGS = -module -avoid-version \
>> +        -rpath /evil/libtool/hack/to/force/shared/lib/creation
> 
> Is there any specific reason why the mock functions are not in a separate
> file? We have that pattern already.
> 

This pattern is used by virportallocatortests, which I touched last :)
In both cases, I think the test should only be run on Linux, since Eric showed
that #if HAVE_DLFCN_H is not enough for Cygwin and most of the virusb.c file
is Linux-specific.

>> +
>>   if WITH_DBUS
>>   virdbustest_SOURCES = \
>>       virdbustest.c testutils.h testutils.c
>> diff --git a/tests/virusbtest.c b/tests/virusbtest.c
>> new file mode 100644
>> index 0000000..f9104bf
>> --- /dev/null
>> +++ b/tests/virusbtest.c
> 
>> +static int testDeviceFind(const void *opaque)
>> +{
>> +    const struct findTestInfo *info = opaque;
>> +    int ret = -1;
>> +    virUSBDevicePtr dev = NULL;
>> +    virUSBDeviceListPtr devs = NULL;
>> +    int rv = 0;
>> +    size_t i, ndevs = 0;
>> +
>> +    switch (info->how) {
>> +    case FIND_BY_ALL:
>> +        rv = virUSBDeviceFind(info->vendor, info->product,
>> +                              info->bus, info->devno,
>> +                              info->vroot, info->mandatory, &dev);
>> +        break;
>> +    case FIND_BY_VENDOR:
>> +        rv = virUSBDeviceFindByVendor(info->vendor, info->product,
>> +                                      info->vroot, info->mandatory, &devs);
>> +        break;
>> +    case FIND_BY_BUS:
>> +        rv = virUSBDeviceFindByBus(info->bus, info->devno,
>> +                                   info->vroot, info->mandatory, &dev);
>> +        break;
>> +    }
>> +
>> +    if (info->expectFailure) {
>> +        if (rv == 0) {
>> +            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> +                           "unexpected success");
>> +            goto cleanup;
>> +        }
> 
> Would it make sense to:
>      ret = 0;
>      goto cleanup;
> 
> since tesing either an empty device list  or NULL dev doesn't make much sense?
> I know you're calling FileIterate only when there's something to call it on,
> but sill.

Yes, that might look nicer.

> 
>> +    } else if (rv < 0) {
>> +        goto cleanup;
>> +    }
>> +
>> +    if (dev && virUSBDeviceFileIterate(dev, testDeviceFileActor, NULL) < 0)
>> +        goto cleanup;
>> +
>> +    if (devs)
>> +        ndevs = virUSBDeviceListCount(devs);
>> +
>> +    for (i = 0; i < ndevs; i++) {
>> +        virUSBDevicePtr device = virUSBDeviceListGet(devs, i);
>> +        if (virUSBDeviceFileIterate(device, testDeviceFileActor, NULL) < 0)
>> +            goto cleanup;
>> +    }
>> +
>> +    ret = 0;
>> +
>> +cleanup:
>> +    virObjectUnref(devs);
>> +    virUSBDeviceFree(dev);
>> +    return ret;
>> +}
>> +
> 

>> +++ b/tests/virusbtestdata/sys_bus_usb/devices/1-1.5.3.1/serial
>> @@ -0,0 +1 @@
>> +
> 
> Why are you creating these /serial files? They don't seem to be used anywhere,
> moreover, they seem to not exists even in real sysfs (at least on my system):
> 
> # find /sys/bus/usb/ -name serial | wc -l
> 0

I was hoping to dig out the patch adding support for specifying USB devices by
serials someday, but they don't really belong in this patch.

Thanks,

Jan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140227/e5ef1ea8/attachment-0001.sig>


More information about the libvir-list mailing list