Coverage report for src/test.c.gcov
-: 0:Source:test.c
-: 0:Graph:./libvirt_la-test.gcno
-: 0:Data:./libvirt_la-test.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:/*
-: 2: * test.c: A "mock" hypervisor for use by application unit tests
-: 3: *
-: 4: * Copyright (C) 2006 Red Hat, Inc.
-: 5: *
-: 6: * See COPYING.LIB for the License of this software
-: 7: *
-: 8: * Daniel Berrange <berrange@redhat.com>
-: 9: */
-: 10:
-: 11:#include <stdio.h>
-: 12:#include <string.h>
-: 13:#include <sys/time.h>
-: 14:#include <libxml/parser.h>
-: 15:#include <libxml/tree.h>
-: 16:#include <libxml/xpath.h>
-: 17:#include <libxml/uri.h>
-: 18:#include <fcntl.h>
-: 19:#include <unistd.h>
-: 20:
-: 21:#include "internal.h"
-: 22:#include "test.h"
-: 23:#include "xml.h"
-: 24:
-: 25:static virDriver testDriver = {
-: 26: VIR_DRV_TEST,
-: 27: "Test",
-: 28: LIBVIR_VERSION_NUMBER,
-: 29: NULL, /* init */
-: 30: testOpen, /* open */
-: 31: testClose, /* close */
-: 32: NULL, /* type */
-: 33: testGetVersion, /* version */
-: 34: testNodeGetInfo, /* nodeGetInfo */
-: 35: testListDomains, /* listDomains */
-: 36: testNumOfDomains, /* numOfDomains */
-: 37: testDomainCreateLinux, /* domainCreateLinux */
-: 38: testLookupDomainByID, /* domainLookupByID */
-: 39: testLookupDomainByUUID, /* domainLookupByUUID */
-: 40: testLookupDomainByName, /* domainLookupByName */
-: 41: testPauseDomain, /* domainSuspend */
-: 42: testResumeDomain, /* domainResume */
-: 43: testShutdownDomain, /* domainShutdown */
-: 44: testRebootDomain, /* domainReboot */
-: 45: testDestroyDomain, /* domainDestroy */
-: 46: NULL, /* domainFree */
-: 47: NULL, /* domainGetName */
-: 48: NULL, /* domainGetID */
-: 49: NULL, /* domainGetUUID */
-: 50: NULL, /* domainGetOSType */
-: 51: testGetMaxMemory, /* domainGetMaxMemory */
-: 52: testSetMaxMemory, /* domainSetMaxMemory */
-: 53: testSetMemory, /* domainSetMemory */
-: 54: testGetDomainInfo, /* domainGetInfo */
-: 55: NULL, /* domainSave */
-: 56: NULL, /* domainRestore */
-: 57: testSetVcpus, /* domainSetVcpus */
-: 58: NULL, /* domainPinVcpu */
-: 59: NULL, /* domainGetVcpus */
-: 60: testDomainDumpXML, /* domainDumpXML */
-: 61:};
-: 62:
-: 63:/* Amount of time it takes to shutdown */
-: 64:#define SHUTDOWN_DURATION 15
-: 65:
-: 66:typedef struct _testDev {
-: 67: char name[20];
-: 68: virDeviceMode mode;
-: 69:} testDev;
-: 70:
-: 71:#define MAX_DEVICES 10
-: 72:
-: 73:typedef struct _testDom {
-: 74: int active;
-: 75: char name[20];
-: 76: unsigned char uuid[16];
-: 77: virDomainKernel kernel;
-: 78: virDomainInfo info;
-: 79: time_t shutdownStartedAt;
-: 80: virDomainRestart onRestart; /* What to do at end of current shutdown procedure */
-: 81: virDomainRestart onReboot;
-: 82: virDomainRestart onPoweroff;
-: 83: virDomainRestart onCrash;
-: 84: int numDevices;
-: 85: testDev devices[MAX_DEVICES];
-: 86:} testDom;
-: 87:
-: 88:#define MAX_DOMAINS 20
-: 89:
-: 90:typedef struct _testCon {
-: 91: int active;
-: 92: virNodeInfo nodeInfo;
-: 93: int numDomains;
-: 94: testDom domains[MAX_DOMAINS];
-: 95:} testCon;
-: 96:
-: 97:#define MAX_CONNECTIONS 5
-: 98:
-: 99:typedef struct _testNode {
-: 100: int numConnections;
-: 101: testCon connections[MAX_CONNECTIONS];
-: 102:} testNode;
-: 103:
-: 104:/* XXX, how about we stuff this in a SHM
-: 105: segment so multiple apps can run tests
-: 106: against the mock hypervisor concurrently.
-: 107: Would need a pthread process shared mutex
-: 108: too probably */
-: 109:static testNode *node = NULL;
-: 110:
-: 111:static const virNodeInfo defaultNodeInfo = {
-: 112: "i686",
-: 113: 1024*1024*3, /* 3 GB */
-: 114: 16,
-: 115: 1400,
-: 116: 2,
-: 117: 2,
-: 118: 2,
-: 119: 2,
-: 120:};
-: 121:
-: 122:static void
-: 123:testError(virConnectPtr con,
-: 124: virDomainPtr dom,
-: 125: virErrorNumber error,
-: 126: const char *info)
function testError called 0 returned 0% blocks executed 0%
#####: 127:{
-: 128: const char *errmsg;
-: 129:
#####: 130: if (error == VIR_ERR_OK)
branch 0 never executed
branch 1 never executed
#####: 131: return;
-: 132:
#####: 133: errmsg = __virErrorMsg(error, info);
call 0 never executed
#####: 134: __virRaiseError(con, dom, VIR_FROM_XEN, error, VIR_ERR_ERROR,
call 0 never executed
-: 135: errmsg, info, NULL, 0, 0, errmsg, info, 0);
-: 136:}
-: 137:
function testRestartStringToFlag called 0 returned 0% blocks executed 0%
#####: 138:static int testRestartStringToFlag(const char *str) {
#####: 139: if (!strcmp(str, "restart")) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
branch 9 never executed
branch 10 never executed
#####: 140: return VIR_DOMAIN_RESTART;
#####: 141: } else if (!strcmp(str, "destroy")) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
branch 9 never executed
branch 10 never executed
#####: 142: return VIR_DOMAIN_DESTROY;
#####: 143: } else if (!strcmp(str, "preserve")) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
branch 9 never executed
branch 10 never executed
#####: 144: return VIR_DOMAIN_PRESERVE;
#####: 145: } else if (!strcmp(str, "rename-restart")) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
branch 9 never executed
branch 10 never executed
#####: 146: return VIR_DOMAIN_RENAME_RESTART;
-: 147: } else {
#####: 148: return 0;
-: 149: }
-: 150:}
-: 151:
function testRestartFlagToString called 0 returned 0% blocks executed 0%
#####: 152:static const char *testRestartFlagToString(int flag) {
#####: 153: switch (flag) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
-: 154: case VIR_DOMAIN_RESTART:
#####: 155: return "restart";
-: 156: case VIR_DOMAIN_DESTROY:
#####: 157: return "destroy";
-: 158: case VIR_DOMAIN_PRESERVE:
#####: 159: return "preserve";
-: 160: case VIR_DOMAIN_RENAME_RESTART:
#####: 161: return "rename-restart";
-: 162: }
#####: 163: return NULL;
-: 164:}
-: 165:
-: 166:/**
-: 167: * testRegister:
-: 168: *
-: 169: * Registers the test driver
-: 170: */
-: 171:void testRegister(void)
function testRegister called 0 returned 0% blocks executed 0%
#####: 172:{
#####: 173: virRegisterDriver(&testDriver);
call 0 never executed
#####: 174:}
-: 175:
-: 176:static int testLoadDomain(virConnectPtr conn,
-: 177: int domid,
function testLoadDomain called 0 returned 0% blocks executed 0%
#####: 178: xmlDocPtr xml) {
#####: 179: xmlNodePtr root = NULL;
#####: 180: xmlXPathContextPtr ctxt = NULL;
#####: 181: xmlXPathObjectPtr obj = NULL;
#####: 182: char *name = NULL;
-: 183: unsigned char rawuuid[16];
-: 184: char *dst_uuid;
-: 185: testCon *con;
-: 186: struct timeval tv;
-: 187: unsigned long memory;
-: 188: int nrVirtCpu;
-: 189: char *conv;
#####: 190: virDomainRestart onReboot = VIR_DOMAIN_RESTART;
#####: 191: virDomainRestart onPoweroff = VIR_DOMAIN_DESTROY;
#####: 192: virDomainRestart onCrash = VIR_DOMAIN_RENAME_RESTART;
-: 193:
#####: 194: if (gettimeofday(&tv, NULL) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 195: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "cannot get timeofday");
call 0 never executed
#####: 196: return -1;
-: 197: }
-: 198:
#####: 199: root = xmlDocGetRootElement(xml);
call 0 never executed
#####: 200: if ((root == NULL) || (!xmlStrEqual(root->name, BAD_CAST "domain"))) {
branch 0 never executed
branch 1 never executed
call 2 never executed
branch 3 never executed
branch 4 never executed
#####: 201: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed root element");
call 0 never executed
#####: 202: goto error;
-: 203: }
-: 204:
#####: 205: ctxt = xmlXPathNewContext(xml);
call 0 never executed
#####: 206: if (ctxt == NULL) {
branch 0 never executed
branch 1 never executed
#####: 207: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "cannot create xpath context");
call 0 never executed
#####: 208: goto error;
-: 209: }
-: 210:
#####: 211: obj = xmlXPathEval(BAD_CAST "string(/domain/name[1])", ctxt);
call 0 never executed
#####: 212: if ((obj == NULL) || (obj->type != XPATH_STRING) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 213: (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
#####: 214: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "missing name element on domain");
call 0 never executed
#####: 215: goto error;
-: 216: }
#####: 217: name = strdup((const char *)obj->stringval);
call 0 never executed
#####: 218: xmlXPathFreeObject(obj);
call 0 never executed
-: 219:
#####: 220: obj = xmlXPathEval(BAD_CAST "string(/domain/uuid[1])", ctxt);
call 0 never executed
#####: 221: if ((obj == NULL) || (obj->type != XPATH_STRING) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 222: (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
#####: 223: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "missing uuid element on domain");
call 0 never executed
#####: 224: goto error;
-: 225: }
#####: 226: dst_uuid = (char *) &rawuuid[0];
#####: 227: if (!(virParseUUID((char **)&dst_uuid, (const char *)obj->stringval))) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 228: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed uuid data in domain");
call 0 never executed
#####: 229: goto error;
-: 230: }
#####: 231: xmlXPathFreeObject(obj);
call 0 never executed
-: 232:
#####: 233: obj = xmlXPathEval(BAD_CAST "string(/domain/memory[1])", ctxt);
call 0 never executed
#####: 234: if ((obj == NULL) || (obj->type != XPATH_STRING) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 235: (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
#####: 236: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "missing memory element on domain");
call 0 never executed
#####: 237: goto error;
-: 238: }
#####: 239: memory = strtoll((const char*)obj->stringval, &conv, 10);
#####: 240: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 241: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed memory value for domain");
call 0 never executed
#####: 242: goto error;
-: 243: }
#####: 244: xmlXPathFreeObject(obj);
call 0 never executed
-: 245:
#####: 246: obj = xmlXPathEval(BAD_CAST "string(/domain/vcpu[1])", ctxt);
call 0 never executed
#####: 247: if ((obj == NULL) || (obj->type != XPATH_STRING) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 248: (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
#####: 249: nrVirtCpu = 1;
-: 250: } else {
#####: 251: nrVirtCpu = strtoll((const char*)obj->stringval, &conv, 10);
#####: 252: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 253: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed vcpus value for domain");
call 0 never executed
#####: 254: goto error;
-: 255: }
-: 256: }
#####: 257: if (obj)
branch 0 never executed
branch 1 never executed
#####: 258: xmlXPathFreeObject(obj);
call 0 never executed
-: 259:
#####: 260: obj = xmlXPathEval(BAD_CAST "string(/domain/on_reboot[1])", ctxt);
call 0 never executed
#####: 261: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 262: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 263: if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 264: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed on_reboot value for domain");
call 0 never executed
#####: 265: goto error;
-: 266: }
-: 267: }
#####: 268: if (obj)
branch 0 never executed
branch 1 never executed
#####: 269: xmlXPathFreeObject(obj);
call 0 never executed
-: 270:
#####: 271: obj = xmlXPathEval(BAD_CAST "string(/domain/on_poweroff[1])", ctxt);
call 0 never executed
#####: 272: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 273: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 274: if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 275: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed on_poweroff value for domain");
call 0 never executed
#####: 276: goto error;
-: 277: }
-: 278: }
#####: 279: if (obj)
branch 0 never executed
branch 1 never executed
#####: 280: xmlXPathFreeObject(obj);
call 0 never executed
-: 281:
#####: 282: obj = xmlXPathEval(BAD_CAST "string(/domain/on_crash[1])", ctxt);
call 0 never executed
#####: 283: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 284: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 285: if (!(onReboot = testRestartStringToFlag((const char *)obj->stringval))) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 286: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed on_crash value for domain");
call 0 never executed
#####: 287: goto error;
-: 288: }
-: 289: }
#####: 290: if (obj)
branch 0 never executed
branch 1 never executed
#####: 291: xmlXPathFreeObject(obj);
call 0 never executed
-: 292:
#####: 293: con = &node->connections[conn->handle];
-: 294:
#####: 295: con->domains[domid].active = 1;
#####: 296: strncpy(con->domains[domid].name, name, sizeof(con->domains[domid].name));
call 0 never executed
#####: 297: free(name);
call 0 never executed
#####: 298: name = NULL;
-: 299:
#####: 300: memmove(con->domains[domid].uuid, rawuuid, 16);
call 0 never executed
#####: 301: con->domains[domid].info.maxMem = memory;
#####: 302: con->domains[domid].info.memory = memory;
#####: 303: con->domains[domid].info.state = VIR_DOMAIN_RUNNING;
#####: 304: con->domains[domid].info.nrVirtCpu = nrVirtCpu;
#####: 305: con->domains[domid].info.cpuTime = ((tv.tv_sec * 1000ll * 1000ll * 1000ll) + (tv.tv_usec * 1000ll));
-: 306:
#####: 307: con->domains[domid].onReboot = onReboot;
#####: 308: con->domains[domid].onPoweroff = onPoweroff;
#####: 309: con->domains[domid].onCrash = onCrash;
-: 310:
#####: 311: return 0;
-: 312:
#####: 313: error:
#####: 314: if (obj)
branch 0 never executed
branch 1 never executed
#####: 315: xmlXPathFreeObject(obj);
call 0 never executed
#####: 316: if (name)
branch 0 never executed
branch 1 never executed
#####: 317: free(name);
call 0 never executed
#####: 318: return -1;
-: 319:}
-: 320:
-: 321:static int testLoadDomainFromDoc(virConnectPtr conn,
-: 322: int domid,
function testLoadDomainFromDoc called 0 returned 0% blocks executed 0%
#####: 323: const char *doc) {
-: 324: int ret;
-: 325: xmlDocPtr xml;
#####: 326: if (!(xml = xmlReadDoc(BAD_CAST doc, "domain.xml", NULL,
call 0 never executed
branch 1 never executed
branch 2 never executed
-: 327: XML_PARSE_NOENT | XML_PARSE_NONET |
-: 328: XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
#####: 329: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot parse domain definition");
call 0 never executed
#####: 330: return -1;
-: 331: }
-: 332:
#####: 333: ret = testLoadDomain(conn, domid, xml);
call 0 never executed
-: 334:
#####: 335: xmlFreeDoc(xml);
call 0 never executed
-: 336:
#####: 337: return ret;
-: 338:}
-: 339:
-: 340:static int testLoadDomainFromFile(virConnectPtr conn,
-: 341: int domid,
function testLoadDomainFromFile called 0 returned 0% blocks executed 0%
#####: 342: const char *file) {
-: 343: int ret, fd;
-: 344: xmlDocPtr xml;
-: 345:
#####: 346: if ((fd = open(file, O_RDONLY)) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 347: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot load domain definition");
call 0 never executed
#####: 348: return -1;
-: 349: }
-: 350:
#####: 351: if (!(xml = xmlReadFd(fd, file, NULL,
call 0 never executed
branch 1 never executed
branch 2 never executed
-: 352: XML_PARSE_NOENT | XML_PARSE_NONET |
-: 353: XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
#####: 354: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot parse domain definition");
call 0 never executed
#####: 355: close(fd);
call 0 never executed
#####: 356: return -1;
-: 357: }
#####: 358: close(fd);
call 0 never executed
-: 359:
#####: 360: ret = testLoadDomain(conn, domid, xml);
call 0 never executed
-: 361:
#####: 362: xmlFreeDoc(xml);
call 0 never executed
-: 363:
#####: 364: return ret;
-: 365:}
-: 366:
-: 367:
-: 368:static int testOpenDefault(virConnectPtr conn,
function testOpenDefault called 0 returned 0% blocks executed 0%
#####: 369: int connid) {
-: 370: int u;
-: 371: struct timeval tv;
-: 372:
#####: 373: if (gettimeofday(&tv, NULL) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 374: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot get timeofday");
call 0 never executed
#####: 375: return -1;
-: 376: }
-: 377:
#####: 378: conn->handle = connid;
#####: 379: node->connections[connid].active = 1;
#####: 380: memmove(&node->connections[connid].nodeInfo, &defaultNodeInfo, sizeof(defaultNodeInfo));
call 0 never executed
-: 381:
#####: 382: node->connections[connid].numDomains = 1;
#####: 383: node->connections[connid].domains[0].active = 1;
#####: 384: strcpy(node->connections[connid].domains[0].name, "Domain-0");
call 0 never executed
#####: 385: for (u = 0 ; u < 16 ; u++) {
branch 0 never executed
branch 1 never executed
#####: 386: node->connections[connid].domains[0].uuid[u] = (u * 75)%255;
-: 387: }
#####: 388: node->connections[connid].domains[0].info.maxMem = 8192 * 1024;
#####: 389: node->connections[connid].domains[0].info.memory = 2048 * 1024;
#####: 390: node->connections[connid].domains[0].info.state = VIR_DOMAIN_RUNNING;
#####: 391: node->connections[connid].domains[0].info.nrVirtCpu = 2;
#####: 392: node->connections[connid].domains[0].info.cpuTime = ((tv.tv_sec * 1000ll * 1000ll * 1000ll) + (tv.tv_usec * 1000ll));
#####: 393: return 0;
-: 394:}
-: 395:
-: 396:
-: 397:static char *testBuildFilename(const char *relativeTo,
function testBuildFilename called 0 returned 0% blocks executed 0%
#####: 398: const char *filename) {
-: 399: char *offset;
-: 400: int baseLen;
#####: 401: if (!filename || filename[0] == '\0')
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 402: return NULL;
#####: 403: if (filename[0] == '/')
branch 0 never executed
branch 1 never executed
#####: 404: return strdup(filename);
call 0 never executed
-: 405:
#####: 406: offset = rindex(relativeTo, '/');
call 0 never executed
#####: 407: if ((baseLen = (offset-relativeTo+1))) {
branch 0 never executed
branch 1 never executed
#####: 408: char *absFile = malloc(baseLen + strlen(filename) + 1);
call 0 never executed
call 1 never executed
#####: 409: strncpy(absFile, relativeTo, baseLen);
call 0 never executed
#####: 410: absFile[baseLen] = '\0';
#####: 411: strcat(absFile, filename);
call 0 never executed
#####: 412: return absFile;
-: 413: } else {
#####: 414: return strdup(filename);
call 0 never executed
-: 415: }
-: 416:}
-: 417:
-: 418:static int testOpenFromFile(virConnectPtr conn,
-: 419: int connid,
function testOpenFromFile called 0 returned 0% blocks executed 0%
#####: 420: const char *file) {
-: 421: int fd, i;
-: 422: xmlDocPtr xml;
#####: 423: xmlNodePtr root = NULL;
#####: 424: xmlXPathContextPtr ctxt = NULL;
#####: 425: xmlXPathObjectPtr obj = NULL;
-: 426: virNodeInfoPtr nodeInfo;
-: 427:
#####: 428: if ((fd = open(file, O_RDONLY)) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 429: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot load host definition");
call 0 never executed
#####: 430: return -1;
-: 431: }
-: 432:
#####: 433: if (!(xml = xmlReadFd(fd, file, NULL,
call 0 never executed
branch 1 never executed
branch 2 never executed
-: 434: XML_PARSE_NOENT | XML_PARSE_NONET |
-: 435: XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
#####: 436: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot parse host definition");
call 0 never executed
#####: 437: goto error;
-: 438: }
#####: 439: close(fd);
call 0 never executed
#####: 440: fd = -1;
-: 441:
#####: 442: root = xmlDocGetRootElement(xml);
call 0 never executed
#####: 443: if ((root == NULL) || (!xmlStrEqual(root->name, BAD_CAST "node"))) {
branch 0 never executed
branch 1 never executed
call 2 never executed
branch 3 never executed
branch 4 never executed
#####: 444: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "malformed root element");
call 0 never executed
#####: 445: goto error;
-: 446: }
-: 447:
#####: 448: ctxt = xmlXPathNewContext(xml);
call 0 never executed
#####: 449: if (ctxt == NULL) {
branch 0 never executed
branch 1 never executed
#####: 450: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot create xpath context");
call 0 never executed
#####: 451: goto error;
-: 452: }
-: 453:
#####: 454: conn->handle = connid;
#####: 455: node->connections[connid].active = 1;
#####: 456: node->connections[connid].numDomains = 0;
#####: 457: memmove(&node->connections[connid].nodeInfo, &defaultNodeInfo, sizeof(defaultNodeInfo));
call 0 never executed
-: 458:
#####: 459: nodeInfo = &node->connections[connid].nodeInfo;
#####: 460: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/nodes[1])", ctxt);
call 0 never executed
#####: 461: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 462: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 463: char *conv = NULL;
#####: 464: nodeInfo->nodes = strtol((const char*)obj->stringval, &conv, 10);
#####: 465: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 466: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed nodes value for node cpu");
call 0 never executed
#####: 467: goto error;
-: 468: }
#####: 469: xmlXPathFreeObject(obj);
call 0 never executed
-: 470: }
-: 471:
#####: 472: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/sockets[1])", ctxt);
call 0 never executed
#####: 473: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 474: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 475: char *conv = NULL;
#####: 476: nodeInfo->sockets = strtol((const char*)obj->stringval, &conv, 10);
#####: 477: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 478: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed sockets value for node cpu");
call 0 never executed
#####: 479: goto error;
-: 480: }
#####: 481: xmlXPathFreeObject(obj);
call 0 never executed
-: 482: }
-: 483:
#####: 484: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/cores[1])", ctxt);
call 0 never executed
#####: 485: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 486: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 487: char *conv = NULL;
#####: 488: nodeInfo->cores = strtol((const char*)obj->stringval, &conv, 10);
#####: 489: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 490: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed cores value for node cpu");
call 0 never executed
#####: 491: goto error;
-: 492: }
#####: 493: xmlXPathFreeObject(obj);
call 0 never executed
-: 494: }
-: 495:
#####: 496: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/threads[1])", ctxt);
call 0 never executed
#####: 497: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 498: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 499: char *conv = NULL;
#####: 500: nodeInfo->threads = strtol((const char*)obj->stringval, &conv, 10);
#####: 501: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 502: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed threads value for node cpu");
call 0 never executed
#####: 503: goto error;
-: 504: }
#####: 505: xmlXPathFreeObject(obj);
call 0 never executed
-: 506: }
#####: 507: nodeInfo->cpus = nodeInfo->cores * nodeInfo->threads * nodeInfo->sockets * nodeInfo->nodes;
#####: 508: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/active[1])", ctxt);
call 0 never executed
#####: 509: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 510: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 511: char *conv = NULL;
#####: 512: unsigned int active = strtol((const char*)obj->stringval, &conv, 10);
#####: 513: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 514: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed active value for node cpu");
call 0 never executed
#####: 515: goto error;
-: 516: }
#####: 517: if (active < nodeInfo->cpus) {
branch 0 never executed
branch 1 never executed
#####: 518: nodeInfo->cpus = active;
-: 519: }
#####: 520: xmlXPathFreeObject(obj);
call 0 never executed
-: 521: }
#####: 522: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/mhz[1])", ctxt);
call 0 never executed
#####: 523: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 524: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 525: char *conv = NULL;
#####: 526: nodeInfo->mhz = strtol((const char*)obj->stringval, &conv, 10);
#####: 527: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 528: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed threads value for node cpu");
call 0 never executed
#####: 529: goto error;
-: 530: }
#####: 531: xmlXPathFreeObject(obj);
call 0 never executed
-: 532: }
#####: 533: obj = xmlXPathEval(BAD_CAST "string(/node/cpu/model[1])", ctxt);
call 0 never executed
#####: 534: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 535: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 536: strncpy(nodeInfo->model, (const char *)obj->stringval, sizeof(nodeInfo->model)-1);
call 0 never executed
#####: 537: nodeInfo->model[sizeof(nodeInfo->model)-1] = '\0';
#####: 538: xmlXPathFreeObject(obj);
call 0 never executed
-: 539: }
-: 540:
#####: 541: obj = xmlXPathEval(BAD_CAST "string(/node/memory[1])", ctxt);
call 0 never executed
#####: 542: if ((obj != NULL) && (obj->type == XPATH_STRING) &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
-: 543: (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
#####: 544: char *conv = NULL;
#####: 545: nodeInfo->memory = strtol((const char*)obj->stringval, &conv, 10);
#####: 546: if (conv == (const char*)obj->stringval) {
branch 0 never executed
branch 1 never executed
#####: 547: testError(conn, NULL, VIR_ERR_INTERNAL_ERROR, "malformed memory value for node");
call 0 never executed
#####: 548: goto error;
-: 549: }
#####: 550: xmlXPathFreeObject(obj);
call 0 never executed
-: 551: }
-: 552:
#####: 553: obj = xmlXPathEval(BAD_CAST "/node/domain", ctxt);
call 0 never executed
#####: 554: if ((obj == NULL) || (obj->type != XPATH_NODESET) ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
-: 555: (obj->nodesetval == NULL)) {
#####: 556: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot extract domain list");
call 0 never executed
#####: 557: goto error;
-: 558: }
-: 559:
#####: 560: for (i = 0 ; i < obj->nodesetval->nodeNr ; i++) {
branch 0 never executed
branch 1 never executed
#####: 561: xmlChar *domFile = xmlGetProp(obj->nodesetval->nodeTab[i], BAD_CAST "file");
call 0 never executed
#####: 562: char *absFile = testBuildFilename(file, (const char *)domFile);
call 0 never executed
#####: 563: free(domFile);
call 0 never executed
#####: 564: if (!absFile) {
branch 0 never executed
branch 1 never executed
#####: 565: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot resolve filename");
call 0 never executed
#####: 566: goto error;
-: 567: }
#####: 568: if (testLoadDomainFromFile(conn, i, absFile) != 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 569: free(absFile);
call 0 never executed
#####: 570: goto error;
-: 571: }
#####: 572: free(absFile);
call 0 never executed
#####: 573: node->connections[connid].numDomains++;
-: 574: }
-: 575:
#####: 576: xmlXPathFreeObject(obj);
call 0 never executed
#####: 577: xmlFreeDoc(xml);
call 0 never executed
-: 578:
#####: 579: return 0;
-: 580:
#####: 581: error:
#####: 582: if (node->connections[connid].active) {
branch 0 never executed
branch 1 never executed
#####: 583: for (i = 0 ; i <node->connections[connid].numDomains ; i++) {
branch 0 never executed
branch 1 never executed
#####: 584: node->connections[connid].domains[i].active = 0;
-: 585: }
#####: 586: node->connections[connid].numDomains = 0;
#####: 587: node->connections[connid].active = 0;
-: 588: }
#####: 589: if (obj)
branch 0 never executed
branch 1 never executed
#####: 590: xmlXPathFreeObject(obj);
call 0 never executed
#####: 591: if (xml)
branch 0 never executed
branch 1 never executed
#####: 592: xmlFreeDoc(xml);
call 0 never executed
#####: 593: if (fd != -1)
branch 0 never executed
branch 1 never executed
#####: 594: close(fd);
call 0 never executed
#####: 595: return -1;
-: 596:}
-: 597:
function getNextConnection called 0 returned 0% blocks executed 0%
#####: 598:static int getNextConnection(void) {
-: 599: int i;
#####: 600: if (node == NULL) {
branch 0 never executed
branch 1 never executed
#####: 601: node = calloc(1, sizeof(testNode));
call 0 never executed
#####: 602: if (!node) {
branch 0 never executed
branch 1 never executed
#####: 603: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot allocate memory");
call 0 never executed
#####: 604: return -1;
-: 605: }
-: 606: }
-: 607:
#####: 608: for (i = 0 ; i < MAX_CONNECTIONS ; i++) {
branch 0 never executed
branch 1 never executed
#####: 609: if (!node->connections[i].active) {
branch 0 never executed
branch 1 never executed
#####: 610: return i;
-: 611: }
-: 612: }
#####: 613: return -1;
-: 614:}
-: 615:
-: 616:int testOpen(virConnectPtr conn,
-: 617: const char *name,
-: 618: int flags)
function testOpen called 0 returned 0% blocks executed 0%
#####: 619:{
-: 620: xmlURIPtr uri;
-: 621: int ret, connid;
-: 622:
#####: 623: if (!name) {
branch 0 never executed
branch 1 never executed
#####: 624: return -1;
-: 625: }
-: 626:
#####: 627: uri = xmlParseURI(name);
call 0 never executed
#####: 628: if (uri == NULL) {
branch 0 never executed
branch 1 never executed
#####: 629: if (!(flags & VIR_DRV_OPEN_QUIET))
branch 0 never executed
branch 1 never executed
#####: 630: testError(conn, NULL, VIR_ERR_NO_SUPPORT, name);
call 0 never executed
#####: 631: return(-1);
-: 632: }
-: 633:
#####: 634: if (!uri->scheme ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 635: strcmp(uri->scheme, "test") ||
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
-: 636: !uri->path) {
#####: 637: xmlFreeURI(uri);
call 0 never executed
#####: 638: return -1;
-: 639: }
-: 640:
-: 641:
#####: 642: if ((connid = getNextConnection()) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 643: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "too many connections");
call 0 never executed
#####: 644: return -1;
-: 645: }
-: 646:
#####: 647: if (!strcmp(uri->path, "/default")) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
branch 6 never executed
branch 7 never executed
call 8 never executed
branch 9 never executed
branch 10 never executed
#####: 648: ret = testOpenDefault(conn,
call 0 never executed
-: 649: connid);
-: 650: } else {
#####: 651: ret = testOpenFromFile(conn,
call 0 never executed
-: 652: connid,
-: 653: uri->path);
-: 654: }
-: 655:
#####: 656: xmlFreeURI(uri);
call 0 never executed
-: 657:
#####: 658: return (ret);
-: 659:}
-: 660:
-: 661:int testClose(virConnectPtr conn)
function testClose called 0 returned 0% blocks executed 0%
#####: 662:{
#####: 663: testCon *con = &node->connections[conn->handle];
#####: 664: con->active = 0;
#####: 665: conn->handle = -1;
#####: 666: memset(con, 0, sizeof(testCon));
call 0 never executed
#####: 667: return 0;
-: 668:}
-: 669:
-: 670:int testGetVersion(virConnectPtr conn ATTRIBUTE_UNUSED,
-: 671: unsigned long *hvVer)
function testGetVersion called 0 returned 0% blocks executed 0%
#####: 672:{
#####: 673: *hvVer = 2;
#####: 674: return 0;
-: 675:}
-: 676:
-: 677:int testNodeGetInfo(virConnectPtr conn,
-: 678: virNodeInfoPtr info)
function testNodeGetInfo called 0 returned 0% blocks executed 0%
#####: 679:{
#####: 680: testCon *con = &node->connections[conn->handle];
#####: 681: memcpy(info, &con->nodeInfo, sizeof(virNodeInfo));
call 0 never executed
#####: 682: return 0;
-: 683:}
-: 684:
-: 685:int testNumOfDomains(virConnectPtr conn)
function testNumOfDomains called 0 returned 0% blocks executed 0%
#####: 686:{
#####: 687: testCon *con = &node->connections[conn->handle];
#####: 688: return con->numDomains;
-: 689:}
-: 690:
-: 691:virDomainPtr
-: 692:testDomainCreateLinux(virConnectPtr conn, const char *xmlDesc,
-: 693: unsigned int flags ATTRIBUTE_UNUSED)
function testDomainCreateLinux called 0 returned 0% blocks executed 0%
#####: 694:{
-: 695: testCon *con;
-: 696: int i;
-: 697: virDomainPtr dom;
-: 698:
#####: 699: if (!VIR_IS_CONNECT(conn)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 700: testError(conn, NULL, VIR_ERR_INVALID_CONN, __FUNCTION__);
call 0 never executed
#####: 701: return (NULL);
-: 702: }
#####: 703: if (xmlDesc == NULL) {
branch 0 never executed
branch 1 never executed
#####: 704: testError(conn, NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
call 0 never executed
#####: 705: return (NULL);
-: 706: }
#####: 707: if (conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 708: testError(conn, NULL, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 709: return (NULL);
-: 710: }
-: 711:
#####: 712: con = &node->connections[conn->handle];
-: 713:
#####: 714: for (i = 0 ; i < MAX_DOMAINS ; i++) {
branch 0 never executed
branch 1 never executed
#####: 715: if (!con->domains[i].active) {
branch 0 never executed
branch 1 never executed
#####: 716: if (testLoadDomainFromDoc(conn, i, xmlDesc) < 0)
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 717: return NULL;
#####: 718: dom = virGetDomain(conn, con->domains[i].name, con->domains[i].uuid);
call 0 never executed
#####: 719: if (dom == NULL) {
branch 0 never executed
branch 1 never executed
#####: 720: testError(conn, NULL, VIR_ERR_NO_MEMORY, "allocating domain");
call 0 never executed
#####: 721: return NULL;
-: 722: }
#####: 723: con->numDomains++;
#####: 724: return dom;
-: 725: }
-: 726: }
-: 727:
#####: 728: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "too many domains");
call 0 never executed
#####: 729: return (NULL);
-: 730:}
-: 731:
-: 732:
-: 733:virDomainPtr testLookupDomainByID(virConnectPtr conn,
-: 734: int id)
function testLookupDomainByID called 0 returned 0% blocks executed 0%
#####: 735:{
#####: 736: testCon *con = &node->connections[conn->handle];
-: 737: virDomainPtr dom;
-: 738:
#####: 739: if (!con->domains[id].active) {
branch 0 never executed
branch 1 never executed
#####: 740: return NULL;
-: 741: }
-: 742:
#####: 743: dom = virGetDomain(conn, con->domains[id].name, con->domains[id].uuid);
call 0 never executed
#####: 744: if (dom == NULL) {
branch 0 never executed
branch 1 never executed
#####: 745: testError(conn, NULL, VIR_ERR_NO_MEMORY, "Allocating domain");
call 0 never executed
#####: 746: return(NULL);
-: 747: }
#####: 748: dom->handle = id;
#####: 749: return dom;
-: 750:}
-: 751:
-: 752:virDomainPtr testLookupDomainByUUID(virConnectPtr conn,
-: 753: const unsigned char *uuid)
function testLookupDomainByUUID called 0 returned 0% blocks executed 0%
#####: 754:{
#####: 755: testCon *con = &node->connections[conn->handle];
#####: 756: virDomainPtr dom = NULL;
#####: 757: int i, id = -1;
#####: 758: for (i = 0 ; i < MAX_DOMAINS ; i++) {
branch 0 never executed
branch 1 never executed
#####: 759: if (con->domains[i].active &&
branch 0 never executed
branch 1 never executed
call 2 never executed
branch 3 never executed
branch 4 never executed
-: 760: memcmp(uuid, con->domains[i].uuid, 16) == 0) {
#####: 761: id = i;
#####: 762: break;
-: 763: }
-: 764: }
#####: 765: if (id >= 0) {
branch 0 never executed
branch 1 never executed
#####: 766: dom = virGetDomain(conn, con->domains[id].name, con->domains[id].uuid);
call 0 never executed
#####: 767: if (dom == NULL) {
branch 0 never executed
branch 1 never executed
#####: 768: testError(conn, NULL, VIR_ERR_NO_MEMORY, "Allocating domain");
call 0 never executed
#####: 769: return(NULL);
-: 770: }
#####: 771: dom->handle = id;
-: 772: }
#####: 773: return dom;
-: 774:}
-: 775:
-: 776:virDomainPtr testLookupDomainByName(virConnectPtr conn,
-: 777: const char *name)
function testLookupDomainByName called 0 returned 0% blocks executed 0%
#####: 778:{
#####: 779: testCon *con = &node->connections[conn->handle];
#####: 780: virDomainPtr dom = NULL;
#####: 781: int i, id = -1;
#####: 782: for (i = 0 ; i < MAX_DOMAINS ; i++) {
branch 0 never executed
branch 1 never executed
#####: 783: if (con->domains[i].active &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
#####: 784: strcmp(name, con->domains[i].name) == 0) {
call 0 never executed
#####: 785: id = i;
#####: 786: break;
-: 787: }
-: 788: }
#####: 789: if (id >= 0) {
branch 0 never executed
branch 1 never executed
#####: 790: dom = virGetDomain(conn, con->domains[id].name, con->domains[id].uuid);
call 0 never executed
#####: 791: if (dom == NULL) {
branch 0 never executed
branch 1 never executed
#####: 792: testError(conn, NULL, VIR_ERR_NO_MEMORY, "Allocating domain");
call 0 never executed
#####: 793: return(NULL);
-: 794: }
#####: 795: dom->handle = id;
-: 796: }
#####: 797: return dom;
-: 798:}
-: 799:
-: 800:int testListDomains (virConnectPtr conn,
-: 801: int *ids,
-: 802: int maxids)
function testListDomains called 0 returned 0% blocks executed 0%
#####: 803:{
#####: 804: testCon *con = &node->connections[conn->handle];
-: 805: int n, i;
-: 806:
#####: 807: for (i = 0, n = 0 ; i < MAX_DOMAINS && n < maxids ; i++) {
branch 0 never executed
branch 1 never executed
#####: 808: if (con->domains[i].active) {
branch 0 never executed
branch 1 never executed
#####: 809: ids[n++] = i;
-: 810: }
-: 811: }
#####: 812: return n;
-: 813:}
-: 814:
-: 815:int testDestroyDomain (virDomainPtr domain)
function testDestroyDomain called 0 returned 0% blocks executed 0%
#####: 816:{
-: 817: testCon *con;
#####: 818: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 819: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 820: __FUNCTION__);
#####: 821: return(-1);
-: 822: }
#####: 823: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 824: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 825: return (-1);
-: 826: }
-: 827:
#####: 828: con = &node->connections[domain->conn->handle];
#####: 829: con->domains[domain->handle].active = 0;
#####: 830: return (0);
-: 831:}
-: 832:
-: 833:int testResumeDomain (virDomainPtr domain)
function testResumeDomain called 0 returned 0% blocks executed 0%
#####: 834:{
-: 835: testCon *con;
#####: 836: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 837: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 838: __FUNCTION__);
#####: 839: return(-1);
-: 840: }
#####: 841: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 842: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 843: return (-1);
-: 844: }
-: 845:
#####: 846: con = &node->connections[domain->conn->handle];
#####: 847: con->domains[domain->handle].info.state = VIR_DOMAIN_RUNNING;
#####: 848: return 0;
-: 849:}
-: 850:
-: 851:int testPauseDomain (virDomainPtr domain)
function testPauseDomain called 0 returned 0% blocks executed 0%
#####: 852:{
-: 853: testCon *con;
#####: 854: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 855: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 856: __FUNCTION__);
#####: 857: return(-1);
-: 858: }
#####: 859: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 860: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 861: return (-1);
-: 862: }
-: 863:
#####: 864: con = &node->connections[domain->conn->handle];
#####: 865: con->domains[domain->handle].info.state = VIR_DOMAIN_PAUSED;
#####: 866: return (0);
-: 867:}
-: 868:
-: 869:/* We don't do an immediate shutdown. We basically pretend that
-: 870: out shutdown sequence takes 'n' seconds to complete. SO, here
-: 871: we just set state to shutdown, and subsquent calls to getDomainInfo
-: 872: will check to see if shutdown ought to be marked complete. */
-: 873:int testShutdownDomain (virDomainPtr domain)
function testShutdownDomain called 0 returned 0% blocks executed 0%
#####: 874:{
-: 875: testCon *con;
-: 876: struct timeval tv;
#####: 877: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 878: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 879: __FUNCTION__);
#####: 880: return (-1);
-: 881: }
#####: 882: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 883: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 884: return (-1);
-: 885: }
-: 886:
#####: 887: con = &node->connections[domain->conn->handle];
-: 888:
#####: 889: if (gettimeofday(&tv, NULL) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 890: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot get timeofday");
call 0 never executed
#####: 891: return (-1);
-: 892: }
-: 893:
#####: 894: con->domains[domain->handle].info.state = VIR_DOMAIN_SHUTDOWN;
#####: 895: con->domains[domain->handle].onRestart = VIR_DOMAIN_DESTROY;
#####: 896: con->domains[domain->handle].shutdownStartedAt = tv.tv_sec;
#####: 897: return (0);
-: 898:}
-: 899:
-: 900:/* Similar behaviour as shutdown */
-: 901:int testRebootDomain (virDomainPtr domain, virDomainRestart action)
function testRebootDomain called 0 returned 0% blocks executed 0%
#####: 902:{
-: 903: testCon *con;
-: 904: struct timeval tv;
#####: 905: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 906: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 907: __FUNCTION__);
#####: 908: return(-1);
-: 909: }
#####: 910: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 911: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 912: return (-1);
-: 913: }
-: 914:
#####: 915: con = &node->connections[domain->conn->handle];
-: 916:
#####: 917: if (gettimeofday(&tv, NULL) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 918: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot get timeofday");
call 0 never executed
#####: 919: return (-1);
-: 920: }
-: 921:
#####: 922: if (!action)
branch 0 never executed
branch 1 never executed
#####: 923: action = VIR_DOMAIN_RESTART;
-: 924:
#####: 925: con->domains[domain->handle].info.state = VIR_DOMAIN_SHUTDOWN;
#####: 926: con->domains[domain->handle].onRestart = action;
#####: 927: con->domains[domain->handle].shutdownStartedAt = tv.tv_sec;
#####: 928: return (0);
-: 929:}
-: 930:
-: 931:int testGetDomainInfo (virDomainPtr domain,
-: 932: virDomainInfoPtr info)
function testGetDomainInfo called 0 returned 0% blocks executed 0%
#####: 933:{
-: 934: struct timeval tv;
-: 935: testCon *con;
#####: 936: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 937: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 938: __FUNCTION__);
#####: 939: return(-1);
-: 940: }
-: 941:
#####: 942: con = &node->connections[domain->conn->handle];
-: 943:
#####: 944: if (gettimeofday(&tv, NULL) < 0) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 945: testError(NULL, NULL, VIR_ERR_INTERNAL_ERROR, "cannot get timeofday");
call 0 never executed
#####: 946: return (-1);
-: 947: }
-: 948:
-: 949: /* Check to see if there is an in-progresss shutdown/reboot that
-: 950: needs to be marked completed now */
#####: 951: if (con->domains[domain->handle].info.state == VIR_DOMAIN_SHUTDOWN &&
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
-: 952: (tv.tv_sec - con->domains[domain->handle].shutdownStartedAt) > SHUTDOWN_DURATION) {
-: 953:
#####: 954: switch (con->domains[domain->handle].onRestart) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
-: 955: case VIR_DOMAIN_DESTROY:
#####: 956: con->domains[domain->handle].info.state = VIR_DOMAIN_SHUTOFF;
#####: 957: break;
-: 958:
-: 959: case VIR_DOMAIN_RESTART:
#####: 960: con->domains[domain->handle].info.state = VIR_DOMAIN_RUNNING;
#####: 961: break;
-: 962:
-: 963: case VIR_DOMAIN_PRESERVE:
#####: 964: con->domains[domain->handle].info.state = VIR_DOMAIN_SHUTOFF;
#####: 965: break;
-: 966:
-: 967: case VIR_DOMAIN_RENAME_RESTART:
#####: 968: con->domains[domain->handle].info.state = VIR_DOMAIN_RUNNING;
#####: 969: break;
-: 970:
-: 971: default:
#####: 972: con->domains[domain->handle].info.state = VIR_DOMAIN_SHUTOFF;
-: 973: break;
-: 974: }
-: 975: }
-: 976:
#####: 977: if (con->domains[domain->handle].info.state == VIR_DOMAIN_SHUTOFF) {
branch 0 never executed
branch 1 never executed
#####: 978: con->domains[domain->handle].info.cpuTime = 0;
#####: 979: con->domains[domain->handle].info.memory = 0;
-: 980: } else {
#####: 981: con->domains[domain->handle].info.cpuTime = ((tv.tv_sec * 1000ll * 1000ll * 1000ll) + (tv.tv_usec * 1000ll));
-: 982: }
#####: 983: memcpy(info, &con->domains[domain->handle].info, sizeof(virDomainInfo));
call 0 never executed
#####: 984: return (0);
-: 985:}
-: 986:
function testGetMaxMemory called 0 returned 0% blocks executed 0%
#####: 987:unsigned long testGetMaxMemory(virDomainPtr domain) {
-: 988: testCon *con;
#####: 989: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 990: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 991: __FUNCTION__);
#####: 992: return(-1);
-: 993: }
-: 994:
#####: 995: con = &node->connections[domain->conn->handle];
#####: 996: return con->domains[domain->handle].info.maxMem;
-: 997:}
-: 998:
-: 999:int testSetMaxMemory (virDomainPtr domain,
-: 1000: unsigned long memory)
function testSetMaxMemory called 0 returned 0% blocks executed 0%
#####: 1001:{
-: 1002: testCon *con;
#####: 1003: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 1004: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 1005: __FUNCTION__);
#####: 1006: return(-1);
-: 1007: }
#####: 1008: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1009: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1010: return (-1);
-: 1011: }
-: 1012:
#####: 1013: con = &node->connections[domain->conn->handle];
-: 1014: /* XXX validate not over host memory wrt to other domains */
#####: 1015: con->domains[domain->handle].info.maxMem = memory;
#####: 1016: return (0);
-: 1017:}
-: 1018:
-: 1019:int testSetMemory (virDomainPtr domain,
-: 1020: unsigned long memory)
function testSetMemory called 0 returned 0% blocks executed 0%
#####: 1021:{
-: 1022: testCon *con;
#####: 1023: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 1024: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 1025: __FUNCTION__);
#####: 1026: return(-1);
-: 1027: }
#####: 1028: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1029: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1030: return (-1);
-: 1031: }
-: 1032:
#####: 1033: con = &node->connections[domain->conn->handle];
-: 1034:
#####: 1035: if (memory > con->domains[domain->handle].info.maxMem) {
branch 0 never executed
branch 1 never executed
#####: 1036: testError(domain->conn, domain, VIR_ERR_INVALID_ARG, "memory over maximum limit");
call 0 never executed
#####: 1037: return (-1);
-: 1038: }
-: 1039:
#####: 1040: con->domains[domain->handle].info.memory = memory;
#####: 1041: return (0);
-: 1042:}
-: 1043:
-: 1044:int testSetVcpus(virDomainPtr domain,
function testSetVcpus called 0 returned 0% blocks executed 0%
#####: 1045: unsigned int nrCpus) {
-: 1046: testCon *con;
-: 1047:
#####: 1048: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 1049: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 1050: __FUNCTION__);
#####: 1051: return(-1);
-: 1052: }
#####: 1053: if (domain->conn->flags & VIR_CONNECT_RO) {
branch 0 never executed
branch 1 never executed
#####: 1054: testError(domain->conn, domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
call 0 never executed
#####: 1055: return (-1);
-: 1056: }
-: 1057:
#####: 1058: con = &node->connections[domain->conn->handle];
-: 1059:
-: 1060: /* We allow more cpus in guest than host */
#####: 1061: if (nrCpus > 32) {
branch 0 never executed
branch 1 never executed
#####: 1062: testError(domain->conn, domain, VIR_ERR_INVALID_ARG, "too many virtual cpus");
call 0 never executed
#####: 1063: return (-1);
-: 1064: }
-: 1065:
#####: 1066: con->domains[domain->handle].info.nrVirtCpu = nrCpus;
#####: 1067: return (0);
-: 1068:}
-: 1069:
-: 1070:char * testDomainDumpXML(virDomainPtr domain, int flags ATTRIBUTE_UNUSED)
function testDomainDumpXML called 0 returned 0% blocks executed 0%
#####: 1071:{
-: 1072: virBufferPtr buf;
-: 1073: char *xml;
-: 1074: unsigned char *uuid;
-: 1075: testCon *con;
#####: 1076: if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
branch 0 never executed
branch 1 never executed
branch 2 never executed
branch 3 never executed
branch 4 never executed
branch 5 never executed
#####: 1077: testError((domain ? domain->conn : NULL), domain, VIR_ERR_INVALID_ARG,
branch 0 never executed
branch 1 never executed
call 2 never executed
-: 1078: __FUNCTION__);
#####: 1079: return(NULL);
-: 1080: }
-: 1081:
#####: 1082: con = &node->connections[domain->conn->handle];
-: 1083:
#####: 1084: if (!(buf = virBufferNew(4000))) {
call 0 never executed
branch 1 never executed
branch 2 never executed
#####: 1085: return (NULL);
-: 1086: }
-: 1087:
#####: 1088: virBufferVSprintf(buf, "<domain type='test' id='%d'>\n", domain->handle);
call 0 never executed
#####: 1089: virBufferVSprintf(buf, " <name>%s</name>\n", domain->name);
call 0 never executed
#####: 1090: uuid = domain->uuid;
#####: 1091: virBufferVSprintf(buf,
call 0 never executed
-: 1092: " <uuid>%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x</uuid>\n",
-: 1093: uuid[0], uuid[1], uuid[2], uuid[3],
-: 1094: uuid[4], uuid[5], uuid[6], uuid[7],
-: 1095: uuid[8], uuid[9], uuid[10], uuid[11],
-: 1096: uuid[12], uuid[13], uuid[14], uuid[15]);
-: 1097:
#####: 1098: virBufferVSprintf(buf, " <memory>%d</memory>\n", con->domains[domain->handle].info.maxMem);
call 0 never executed
#####: 1099: virBufferVSprintf(buf, " <vcpu>%d</vcpu>\n", con->domains[domain->handle].info.nrVirtCpu);
call 0 never executed
#####: 1100: virBufferVSprintf(buf, " <on_reboot>%s</on_reboot>\n", testRestartFlagToString(con->domains[domain->handle].onReboot));
call 0 never executed
call 1 never executed
#####: 1101: virBufferVSprintf(buf, " <on_poweroff>%s</on_poweroff>\n", testRestartFlagToString(con->domains[domain->handle].onPoweroff));
call 0 never executed
call 1 never executed
#####: 1102: virBufferVSprintf(buf, " <on_crash>%s</on_crash>\n", testRestartFlagToString(con->domains[domain->handle].onCrash));
call 0 never executed
call 1 never executed
-: 1103:
#####: 1104: virBufferAdd(buf, "</domain>\n", -1);
call 0 never executed
-: 1105:
#####: 1106: xml = buf->content;
#####: 1107: free(buf);
call 0 never executed
#####: 1108: return xml;
-: 1109:}