diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2014-10-26 12:33:50 +0400 |
commit | 47e6e7c84f008a53061e661f31ae96629bc694ef (patch) | |
tree | 648a07f3b5b9d67ce19b0fd72e8caa1175c98f1a /qa/src/779246.c | |
download | pcp-debian/3.9.10.tar.gz |
Debian 3.9.10debian/3.9.10debian
Diffstat (limited to 'qa/src/779246.c')
-rw-r--r-- | qa/src/779246.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/qa/src/779246.c b/qa/src/779246.c new file mode 100644 index 0000000..13752ac --- /dev/null +++ b/qa/src/779246.c @@ -0,0 +1,131 @@ +/* + * Copyright (c) 1997-2002 Silicon Graphics, Inc. All Rights Reserved. + */ + +/* + * pv 779246 - check sample pmda returns type on sample.sysinfo + */ + +#include <ctype.h> +#include <string.h> +#include <pcp/pmapi.h> +#include <pcp/impl.h> +#ifdef HAVE_SYS_SYSINFO_H +#include <sys/sysinfo.h> +#endif + +#define NUM 1 + +static int +dometric(void) +{ + int n; + pmID pmid; + pmDesc desc; + pmResult *result; + char *namelist[NUM] = { "sample.sysinfo" }; + pmID pmidlist[NUM] = { 0 }; + + if ((n = pmLookupName(NUM, namelist, pmidlist)) < 0) { + printf("pmLookupDesc: %s\n", pmErrStr(n)); + return 1; + } + + pmid=pmidlist[0]; + + if ((n = pmLookupDesc(pmid, &desc)) < 0) { + printf("pmLookupDesc: %s\n", pmErrStr(n)); + return 1; + } + __pmPrintDesc(stdout, &desc); + + if ((n = pmFetch(1, &pmid, &result)) < 0) + printf("pmFetch: %s\n", pmErrStr(n)); + + if (result->numpmid !=1 ) { + printf("pmFetch, numpmid == %d (1)\n", + result->numpmid); + return 1; + } + + if (result->vset[0]->numval < 0) { + printf("pmFetch, numval: %s\n", pmErrStr(result->vset[0]->numval)); + return 1; + } else if (result->vset[0]->numval != 1) { + printf("pmFetch, numval: == %d (1)\n", + result->vset[0]->numval); + return 1; + } + + if (result->vset[0]->valfmt==PM_VAL_INSITU) { + printf("sample.sysinfo is in-situ !?\n"); + return 1; + } + printf("sample.sysinfo vtype == %d\n", + result->vset[0]->vlist[0].value.pval->vtype); + + __pmDumpResult(stdout, result); + return 0; +} + +int +main(int argc, char *argv[]) +{ + int c; + int sts; + int errflag = 0; + char *host = "localhost"; + char *namespace = PM_NS_DEFAULT; + static char *debug = "[-D N] "; + static char *usage = "[-h hostname]"; + + __pmSetProgname(pmProgname); + + while ((c = getopt(argc, argv, "D:h:")) != 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 'h': /* hostname for PMCD to contact */ + host = optarg; + break; + + case '?': + default: + errflag++; + break; + } + } + + if (errflag || optind != argc) { + fprintf(stderr, "Usage: %s %s%s\n", pmProgname, debug, usage); + exit(1); + } + + if ((sts = pmLoadNameSpace(namespace)) < 0) { + printf("%s: Cannot load namespace from \"%s\": %s\n", pmProgname, namespace, pmErrStr(sts)); + exit(1); + } + + if ((sts = pmNewContext(PM_CONTEXT_HOST, host)) < 0) { + printf("%s: Cannot connect to PMCD on host \"%s\": %s\n", pmProgname, host, pmErrStr(sts)); + exit(1); + } + + /* Size of struct sysinfo is different on different platforms, so + * give a hint how many bytes are expected in the output */ +#ifdef HAVE_SYSINFO + printf("+++ Expect %d bytes\n", (int)sizeof(struct sysinfo)); +#else + printf("+++ Local struct sysinfo size unknown\n"); +#endif + return dometric(); +} |