diff options
Diffstat (limited to 'qa/qt/qmc_context/qmc_context.cpp')
| -rw-r--r-- | qa/qt/qmc_context/qmc_context.cpp | 241 | 
1 files changed, 241 insertions, 0 deletions
| diff --git a/qa/qt/qmc_context/qmc_context.cpp b/qa/qt/qmc_context/qmc_context.cpp new file mode 100644 index 0000000..d7b7909 --- /dev/null +++ b/qa/qt/qmc_context/qmc_context.cpp @@ -0,0 +1,241 @@ +// +// Test QmcContext class +// + +#include <QTextStream> +#include <qmc_context.h> + +QTextStream cerr(stderr); +QTextStream cout(stdout); + +int +main(int argc, char* argv[]) +{ +    int		fail = 0, sts = 0; +    int		c; +    char	buf[MAXHOSTNAMELEN]; +    QString	source; + +    pmProgname = basename(argv[0]); + +    while ((c = getopt(argc, argv, "D:?")) != EOF) { +	switch (c) { +	case 'D': +	    sts = __pmParseDebug(optarg); +            if (sts < 0) { +		pmprintf("%s: unrecognized debug flag specification (%s)\n", +			 pmProgname, optarg); +                fail = 1; +            } +            else { +                pmDebug |= sts; +	    } +            break; +	case '?': +	default: +	    sts = 1; +	    break; +	} +    } + +    if (fail) { +	pmprintf("Usage: %s\n", pmProgname); +	pmflush(); +	exit(1); +    } + +    (void)gethostname(buf, MAXHOSTNAMELEN); +    buf[MAXHOSTNAMELEN-1] = '\0'; + +    fprintf(stderr, "*** Simple connection ***\n"); +    source = QString("oview-short"); + +    QmcSource *src1 = QmcSource::getSource(PM_CONTEXT_ARCHIVE, source, false); +    if (src1->status() < 0) { +	pmprintf("%s: Error: Unable to create context to \"%s\": %s\n", +		pmProgname, (const char *)source.toAscii(), +		pmErrStr(src1->status())); +	pmflush(); +	fail = 1; +    } + +    QmcContext context1(src1); +    if (context1.handle() < 0) { +	pmflush(); +	fail = 1; +    } + +    context1.dump(cout); + +    pmID pmid; +    uint_t indomIndex; + +    fprintf(stderr, "\n*** Cacheing of descriptors and indoms ***\n"); +    QmcDesc *desc; +    QmcIndom *indom = NULL; + +    sts = context1.lookupInDom("hinv.ncpu", indomIndex); +    if (sts < 0) { +	pmprintf("%s: Error: hinv.ncpu: %s\n", +		 pmProgname, pmErrStr(sts)); +	pmflush(); +	fail = 1; +    } +    else { +	sts = context1.lookupPMID("hinv.ncpu", pmid); +	if (sts < 0) { +	    pmprintf("%s: Error: hinv.ncpu PMID: %s\n", +		 pmProgname, pmErrStr(sts)); +	    pmflush(); +	    fail = 1; +	} +	desc = &context1.desc(pmid); +	if (desc->status() < 0) { +	    pmprintf("%s: Error: hinv.ncpu descriptor: %s\n", +		     pmProgname, pmErrStr(desc->status())); +	    pmflush(); +	    fail = 1; +	} +	else if (indomIndex < UINT_MAX) { +	    pmprintf("%s: Error: hinv.ncpu indom is not NULL\n", +		     pmProgname); +	    pmflush(); +	    fail = 1; +	} +    } + +    sts = context1.lookupInDom("hinv.cputype", indomIndex); +    if (sts < 0) { +	pmprintf("%s: Error: hinv.cputype: %s\n", +		 pmProgname, pmErrStr(sts)); +	pmflush(); +	fail = 1; +    } +    else { +	sts = context1.lookupPMID("hinv.cputype", pmid); +	if (sts < 0) { +	    pmprintf("%s: Error: hinv.cputype PMID: %s\n", +		pmProgname, pmErrStr(sts)); +	    pmflush(); +	    fail = 1; +	} +	desc = &context1.desc(pmid); +	indom = &context1.indom(indomIndex); +	if (desc->status() < 0) { +	    pmprintf("%s: Error: hinv.cputype descriptor: %s\n", +		     pmProgname, pmErrStr(desc->status())); +	    pmflush(); +	    fail = 1; +	} +	else if (indom->status() < 0) { +	    pmprintf("%s: Error: hinv.cputype indom: %s\n", +		     pmProgname, pmErrStr(indom->status())); +	    pmflush(); +	    fail = 1; +	} +    } + +    QmcIndom *indom2; + +    sts = context1.lookupInDom("hinv.map.cpu", indomIndex); +    if (sts < 0) { +	pmprintf("%s: Error: hinv.map.cpu: %s\n", +		 pmProgname, pmErrStr(sts)); +	pmflush(); +	fail = 1; +    } +    else { +	sts = context1.lookupPMID("hinv.map.cpu", pmid); +	if (sts < 0) { +	    pmprintf("%s: Error: hinv.map.cpu PMID: %s\n", +		pmProgname, pmErrStr(sts)); +	    pmflush(); +	    fail = 1; +	} + +	desc = &context1.desc(pmid); +	indom2 = &context1.indom(indomIndex); + +	if (desc->status() < 0) { +	    pmprintf("%s: Error: hinv.map.cpu descriptor: %s\n", +		     pmProgname, pmErrStr(desc->status())); +	    pmflush(); +	    fail = 1; +	} +	else if (indom2->status() < 0) { +	    pmprintf("%s: Error: hinv.map.cpu indom: %s\n", +		     pmProgname, pmErrStr(indom2->status())); +	    pmflush(); +	    fail = 1; +	} +	else if (indom != indom2) { +	    pmprintf("%s: Error: hinv.cputype and hinv.map.cpu indoms are not the same\n", +		     pmProgname); +	    pmflush(); +	    fail = 1; +	} +    } + +    sts = context1.lookupInDom("hinv.ncpu", indomIndex); +    if (sts < 0) { +	pmprintf("%s: Error: hinv.ncpu: %s\n", +		 pmProgname, pmErrStr(sts)); +	pmflush(); +	fail = 1; +    } +    else { +	sts = context1.lookupPMID("hinv.ncpu", pmid); +	if (sts < 0) { +	    pmprintf("%s: Error: hinv.ncpu PMID: %s\n", +		pmProgname, pmErrStr(sts)); +	    pmflush(); +	    fail = 1; +	} + +	desc = &context1.desc(pmid); + +	if (desc->status() < 0) { +	    pmprintf("%s: Error: hinv.ncpu descriptor: %s\n", +		     pmProgname, pmErrStr(desc->status())); +	    pmflush(); +	    fail = 1; +	} +	else if (indomIndex < UINT_MAX) { +	    pmprintf("%s: Error: hinv.ncpu indom is not NULL\n", +		     pmProgname); +	    pmflush(); +	    fail = 1; +	} +    } + +    context1.dump(cout); + +    fprintf(stderr, "\n*** Bad Context ***\n"); +    source = QString("no-such-host"); +    QmcSource *src2 = QmcSource::getSource(PM_CONTEXT_HOST, source); + +    if (src2->status() >= 0) { +	pmprintf("%s: Error: Able to create context to \"%s\": %s\n", +		pmProgname, (const char *)source.toAscii(), +		pmErrStr(src1->status())); +	pmflush(); +	fail = 1; +    } + +    QmcContext context2(src2); + +    if (context2.handle() >= 0) { +	pmprintf("%s: Error: Created a valid context to an invalid host\n", +		 pmProgname); +	fail = 1; +    } + +    pmflush(); + +    context2.dump(cout); + +    fprintf(stderr, "\n*** Exiting ***\n"); +     +    pmflush(); +    return fail; +} | 
