[libvirt] [PATCHv1.5 02/27] test: Implement fake storage pool driver in qemuxml2argv test
Peter Krempa
pkrempa at redhat.com
Wed Nov 27 09:58:15 UTC 2013
On 11/27/13 08:47, Osier Yang wrote:
> On 27/11/13 00:48, Peter Krempa wrote:
>> To support testing of "volume" disk backing, we need to implement a few
>> disk driver backend functions.
>>
>> The fake storage driver uses files in storagepoolxml2xmlout/POOLNAME.xml
>> as XML files for pool definitions and volume names are in format
>> "VOL_TYPE+VOL_PATH". By default type "block" is assumed (for iSCSI test
>> compatibility).
>>
>> The choice of this approach along with implemented functions was made so
>> that <disk type='volume'> can be tested in the xml2argv test.
>> ---
>> tests/qemuxml2argvtest.c | 162
>> +++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 162 insertions(+)
>>
>> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
>> index a290062..a4cef84 100644
>> --- a/tests/qemuxml2argvtest.c
>> +++ b/tests/qemuxml2argvtest.c
>> @@ -18,6 +18,7 @@
>> # include "qemu/qemu_command.h"
>> # include "qemu/qemu_domain.h"
>> # include "datatypes.h"
>> +# include "conf/storage_conf.h"
>> # include "cpu/cpu_map.h"
>> # include "virstring.h"
>>
>> @@ -75,6 +76,161 @@ static virSecretDriver fakeSecretDriver = {
>> .secretUndefine = NULL,
>> };
>>
>> +
>> +# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
>
> This will cause build failure when building with VPATH.
Hmmm, I'll look into it.
>
>> +static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";
>> +
>> +static virStoragePoolPtr
>> +fakeStoragePoolLookupByName(virConnectPtr conn,
>> + const char *name)
>> +{
>> + char *xmlpath = NULL;
>> + virStoragePoolPtr ret = NULL;
>> +
>> + if (STRNEQ(name, "inactive")) {
>> + if (virAsprintf(&xmlpath, "%s%s.xml",
>> + STORAGE_POOL_XML_PATH,
>> + name) < 0)
>> + return NULL;
>> +
>> + if (!virFileExists(xmlpath)) {
>> + virReportError(VIR_ERR_NO_STORAGE_POOL,
>> + "File '%s' not found", xmlpath);
>> + goto cleanup;
>> + }virGetStoragePool
>> + }
>> +
>> + ret = virGetStoragePool(conn, name, fakeUUID, NULL, NULL);
>
> Looks like "fakeUUID" is only used here, so generating a random UUID
> might work.
Random? Why bother? This static one is used so that virGetStoragePool()
doesn't crash and isn't used anywhere else.
>
>> +
>> +cleanup:
>> + VIR_FREE(xmlpath);
>> + return ret;
>> +}
>> +
>> +
>> +static virStorageVolPtr
>> +fakeStorageVolLookupByName(virStoragePoolPtr pool,
>> + const char *name)
>> +{
>> + char **volinfo = NULL;
>> + virStorageVolPtr ret = NULL;
>> +
>> + if (STREQ(pool->name, "inactive")) {
>> + virReportError(VIR_ERR_OPERATION_INVALID,
>> + "storage pool '%s' is not active", pool->name);
>> + return NULL;
>> + }
>> +
>> + if (STREQ(name, "nonexistent")) {
>
> It will be better if it has document what these magic strings mean.
Yeah, I forgot this one ...
>
>> + virReportError(VIR_ERR_NO_STORAGE_VOL,
>> + "no storage vol with matching name '%s'", name);
>> + return NULL;
>> + }
>> +
>> + if (!strchr(name, '+'))
>> + goto fallback;
>> +
>> + if (!(volinfo = virStringSplit(name, "+", 2)))
>> + return NULL;
>> +
>> + if (!volinfo[1])
>> + goto fallback;
>> +
>> + ret = virGetStorageVol(pool->conn, pool->name, volinfo[1],
>> volinfo[0],
>> + NULL, NULL);
>> +
>> +cleanup:
>> + virStringFreeList(volinfo);
>> + return ret;
>> +
>> +fallback:
>> + ret = virGetStorageVol(pool->conn, pool->name, name, "block",
>> NULL, NULL);
>> + goto cleanup;
>> +}
>> +
>> +static int
>> +fakeStorageVolGetInfo(virStorageVolPtr vol,
>> + virStorageVolInfoPtr info)
>> +{
>> + memset(info, 0, sizeof(*info));
>> +
>> + info->type = virStorageVolTypeFromString(vol->key);
>> +
>> + if (info->type < 0) {
>> + virReportError(VIR_ERR_INTERNAL_ERROR,
>> + "Invalid volume type '%s'", vol->key);
>> + return -1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +
>> +static char *
>> +fakeStorageVolGetPath(virStorageVolPtr vol)
>> +{
>> + char *ret = NULL;
>> +
>> + ignore_value(virAsprintf(&ret, "/some/%s/device/%s", vol->key,
>> vol->name));
>> +
>> + return ret;
>> +}
>> +
>> +
>> +static char *
>> +fakeStoragePoolDumpXML(virStoragePoolPtr pool,
>
> Better to rename it as fakeStoragePoolGetXMLDesc to keep consistent.
> "DumpXML" is used in virsh.
Right.
>
> Osier
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20131127/4a0e3184/attachment-0001.sig>
More information about the libvir-list
mailing list