diff options
Diffstat (limited to 'qa/src/disk_test.c')
-rw-r--r-- | qa/src/disk_test.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/qa/src/disk_test.c b/qa/src/disk_test.c new file mode 100644 index 0000000..bb24af9 --- /dev/null +++ b/qa/src/disk_test.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1997-2002 Silicon Graphics, Inc. All Rights Reserved. + */ + +#include <pcp/pmapi.h> +#include <pcp/impl.h> + +static int listOne[2]; +#define LEN(l) (sizeof(l)/sizeof(l[0])) + +static char *namelist[] = { + "disk.dev.read" +}; + +#define NCONTEXTS 2 + +int +main(int argc, char **argv) +{ + int e, i; + int h[NCONTEXTS]; + pmID metrics[2]; + pmResult *resp; + pmInDom diskindom; + pmDesc desc; + int *inst; + char **name; + int numinst; + int c; + int sts; + int errflag = 0; + + __pmSetProgname(argv[0]); + + while ((c = getopt(argc, argv, "D:?")) != EOF) { + switch (c) { + + case 'D': /* debug flag */ + sts = __pmParseDebug(optarg); + if (sts < 0) { + fprintf(stderr, "%s: unrecognized debug flag specification (%s)\n", + pmProgname, optarg); + errflag++; + } + else + pmDebug |= sts; + break; + + case '?': + default: + errflag++; + break; + } + } + + if (errflag || optind != argc) { + fprintf(stderr, "Usage: %s [-D n]\n", pmProgname); + exit(1); + } + + for (i=0; i < NCONTEXTS; i++) { + if ((h[i] = pmNewContext(PM_CONTEXT_HOST, "localhost")) < 0) { + printf("pmNewContext: %s\n", pmErrStr(h[i])); + exit(1); + } + + if ((e = pmLookupName(1, namelist, metrics)) < 0) { + printf("pmLookupName: %s\n", pmErrStr(e)); + exit(1); + } + + if ((e = pmLookupDesc(metrics[0], &desc)) < 0) { + printf("pmLookupDesc: %s\n", pmErrStr(e)); + exit(1); + } + } + + diskindom = desc.indom; + if ((numinst = pmGetInDom(diskindom, &inst, &name)) < 0) { + printf("pmGetInDom: %s\n", pmErrStr(numinst)); + exit(1); + } + printf("Disks:\n"); + for (i = 0; i < numinst; i++) + printf("\t[%d]: %d %s\n", i, inst[i], name[i]); + + for (i=0; i < NCONTEXTS; i++) { + pmUseContext(h[i]); + + listOne[0] = inst[0]; + listOne[1] = inst[numinst-1]; + + pmAddProfile(diskindom, 0, (int *)0); + printf("all drives should be included here\n"); + if ((e = pmFetch(1, metrics, &resp)) < 0) { + printf("pmFetch[2]: %s\n", pmErrStr(e)); + } + else + __pmDumpResult(stdout, resp); + + pmDelProfile(diskindom, 0, (int *)0); + putchar('\n'); + printf("no drives should be included here\n"); + if ((e = pmFetch(1, metrics, &resp)) < 0) { + printf("pmFetch[3]: %s\n", pmErrStr(e)); + } + else + __pmDumpResult(stdout, resp); + + pmDelProfile(diskindom, 0, (int *)0); + pmAddProfile(diskindom, LEN(listOne), listOne); + putchar('\n'); + printf("only the first and last drive should be included here\n"); + if ((e = pmFetch(1, metrics, &resp)) < 0) { + printf("pmFetch[0]: %s\n", pmErrStr(e)); + } + else + __pmDumpResult(stdout, resp); + + pmDelProfile(diskindom, 0, (int *)0); + pmAddProfile(diskindom, numinst, inst); + pmDelProfile(diskindom, 1, listOne); + putchar('\n'); + printf("all except drive zero should be included here\n"); + if ((e = pmFetch(1, metrics, &resp)) < 0) { + printf("pmFetch[1]: %s\n", pmErrStr(e)); + } + else + __pmDumpResult(stdout, resp); + + pmDelProfile(diskindom, 0, (int *)0); + pmAddProfile(diskindom, 1, inst); + putchar('\n'); + printf("drive zero ONLY should be included here\n"); + if ((e = pmFetch(1, metrics, &resp)) < 0) { + printf("pmFetch[1]: %s\n", pmErrStr(e)); + } + else + __pmDumpResult(stdout, resp); + } + + exit(0); +} + |