static int virStorageBackendSheepdogRefreshVol(virConnectPtr conn ATTRIBUTE_UNUSED, virStoragePoolObjPtr pool, virStorageVolDefPtr vol) { int ret; char *output = NULL; virCommandPtr cmd = virCommandNewArgList(COLLIE, "vdi", "list", vol->name, "-r", NULL); virStorageBackendSheepdogAddHostArg(cmd, pool); virCommandSetOutputBuffer(cmd, &output); ret = virCommandRun(cmd, NULL); if (ret < 0) goto cleanup; if ((ret = virStorageBackendSheepdogParseVdiList(vol, output)) < 0) goto cleanup; vol->type = VIR_STORAGE_VOL_NETWORK; VIR_FREE(vol->key); if (virAsprintf(&vol->key, "%s/%s", pool->def->source.name, vol->name) == -1) goto cleanup; VIR_FREE(vol->target.path); ignore_value(VIR_STRDUP(vol->target.path, vol->name)); cleanup: virCommandFree(cmd); return ret; }
static int test_vdi_list_parser(const void *opaque) { const struct testVDIListParserData *data = opaque; collie_test test = data->data; VIR_AUTOFREE(char *) output = NULL; VIR_AUTOPTR(virStoragePoolDef) pool = NULL; VIR_AUTOPTR(virStorageVolDef) vol = NULL; if (!(pool = virStoragePoolDefParseFile(data->poolxml))) return -1; if (!(vol = virStorageVolDefParseFile(pool, data->volxml, 0))) return -1; if (VIR_STRDUP(output, test.output) < 0) return -1; if (virStorageBackendSheepdogParseVdiList(vol, output) != test.expected_return) return -1; if (test.expected_return) return 0; if (vol->target.capacity == test.expected_capacity && vol->target.allocation == test.expected_allocation) return 0; return -1; }
static int test_vdi_list_parser(collie_test test, char *poolxml, char *volxml) { int ret = -1; char *poolXmlData = NULL; char *volXmlData = NULL; char *output = NULL; virStoragePoolDefPtr pool = NULL; virStorageVolDefPtr vol = NULL; if (virtTestLoadFile(poolxml, &poolXmlData) < 0) goto cleanup; if (virtTestLoadFile(volxml, &volXmlData) < 0) goto cleanup; if (!(pool = virStoragePoolDefParseString(poolXmlData))) goto cleanup; if (!(vol = virStorageVolDefParseString(pool, volXmlData))) goto cleanup; output = strdup(test.output); if (!output) goto cleanup; if (virStorageBackendSheepdogParseVdiList(vol, output) != test.expected_return) goto cleanup; if (test.expected_return) { ret = 0; goto cleanup; } if (vol->capacity == test.expected_capacity && vol->allocation == test.expected_allocation) ret = 0; cleanup: VIR_FREE(output); VIR_FREE(poolXmlData); VIR_FREE(volXmlData); virStoragePoolDefFree(pool); virStorageVolDefFree(vol); return ret; }