static int check_number(kdump_ctx *ctx, const char *attrpath, long long expect) { kdump_attr_t attr; kdump_status status; status = kdump_get_attr(ctx, attrpath, &attr); if (status != kdump_ok) { fprintf(stderr, "%s: Cannot get value: %s\n", attrpath, kdump_err_str(ctx)); return TEST_ERR; } if (attr.type != kdump_number) { fprintf(stderr, "%s: Wrong attribute type: %d\n", attrpath, (int) attr.type); return TEST_FAIL; } if (attr.val.number != expect) { fprintf(stderr, "%s: Invalid attribute value: %lld != %lld\n", attrpath, (long long) attr.val.number, expect); return TEST_FAIL; } printf("%s: %lld\n", attrpath, (long long) attr.val.number); return TEST_OK; }
static int check_string(kdump_ctx *ctx, const char *attrpath, const char *expect) { kdump_attr_t attr; kdump_status status; status = kdump_get_attr(ctx, attrpath, &attr); if (status != kdump_ok) { fprintf(stderr, "%s: Cannot get value: %s\n", attrpath, kdump_err_str(ctx)); return TEST_ERR; } if (attr.type != kdump_string) { fprintf(stderr, "%s: Wrong attribute type: %d\n", attrpath, (int) attr.type); return TEST_FAIL; } if (strcmp(attr.val.string, expect)) { fprintf(stderr, "%s: Invalid attribute value: '%s' != '%s'\n", attrpath, attr.val.string, expect); return TEST_FAIL; } printf("%s: %s\n", attrpath, attr.val.string); return TEST_OK; }
static int check(kdump_ctx_t *ctx) { unsigned cnt; kdump_attr_t attr; kdump_status status; /* First value. */ cnt = 1; attr.type = KDUMP_STRING; attr.val.string = vmcore1; status = kdump_set_attr(ctx, "linux.vmcoreinfo.raw", &attr); if (status != KDUMP_OK) { fprintf(stderr, "#%d: Cannot set vmcoreinfo: %s\n", cnt, kdump_get_err(ctx)); return TEST_ERR; } status = kdump_get_attr(ctx, "linux.vmcoreinfo.lines.DIR.SUB.VAL", &attr); if (status != KDUMP_OK) { fprintf(stderr, "#%d: Cannot get vmcoreinfo: %s\n", cnt, kdump_get_err(ctx)); return TEST_ERR; } if (attr.type != KDUMP_STRING || strcmp(attr.val.string, "test1")) { fprintf(stderr, "#%d: Invalid attribute value\n", cnt); return TEST_FAIL; } printf("#%d: DIR.SUB.VAL=%s\n", cnt, attr.val.string); /* (Conflicting) second value */ cnt = 2; attr.type = KDUMP_STRING; attr.val.string = vmcore2; status = kdump_set_attr(ctx, "linux.vmcoreinfo.raw", &attr); if (status != KDUMP_OK) { fprintf(stderr, "#%d: Cannot set vmcoreinfo: %s\n", cnt, kdump_get_err(ctx)); return TEST_ERR; } status = kdump_get_attr(ctx, "linux.vmcoreinfo.lines.DIR.SUB", &attr); if (status != KDUMP_OK) { fprintf(stderr, "#%d: Cannot get vmcoreinfo: %s\n", cnt, kdump_get_err(ctx)); return TEST_ERR; } if (attr.type != KDUMP_STRING || strcmp(attr.val.string, "test2")) { fprintf(stderr, "#%d: Invalid attribute value\n", cnt); return TEST_FAIL; } printf("#%d: DIR.SUB=%s\n", cnt, attr.val.string); attr.type = KDUMP_NIL; status = kdump_set_attr(ctx, "linux.vmcoreinfo.raw", &attr); if (status != KDUMP_OK) { fprintf(stderr, "Cannot clear vmcoreinfo: %s\n", kdump_get_err(ctx)); return TEST_ERR; } status = kdump_get_attr(ctx, "linux.vmcoreinfo.lines.DIR.SUB", &attr); if (status == KDUMP_OK) { fprintf(stderr, "vmcoreinfo not cleared!\n"); return TEST_ERR; } else if (status != KDUMP_ERR_NOKEY) { fprintf(stderr, "Unexpected failure after unset: %s\n", kdump_get_err(ctx)); return TEST_ERR; } printf("DIR.SUB is now clear\n"); return TEST_OK; }