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; +} |