X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=test%2Fparser%2Futils.c;h=8ac2060e033a1ca1f03518e99aa8e5d5601b1d04;hp=16c415a1ebd7477f27baa2fcfbd96cf5362fab0a;hb=b391345ddd4d0fb3c3b6a627d834242ca14fed28;hpb=5d16719922866622fc0f42c570b9934f595e3c33 diff --git a/test/parser/utils.c b/test/parser/utils.c index 16c415a..8ac2060 100644 --- a/test/parser/utils.c +++ b/test/parser/utils.c @@ -85,6 +85,13 @@ void test_fini(struct parser_test *test) talloc_free(test); } +void __test_read_conf_data(struct parser_test *test, + const char *buf, size_t len) +{ + test->conf.size = len; + test->conf.buf = talloc_memdup(test, buf, len); +} + void test_read_conf_file(struct parser_test *test, const char *filename) { struct stat stat; @@ -124,7 +131,86 @@ int test_run_parser(struct parser_test *test, const char *parser_name) continue; test->ctx->parser = parser; rc = parser->parse(test->ctx, test->conf.buf, test->conf.size); + break; } + if (i == n_parsers) + errx(EXIT_FAILURE, "%s: parser '%s' not found", + __func__, parser_name); + return rc; } + +struct discover_boot_option *get_boot_option(struct discover_context *ctx, + int idx) +{ + struct discover_boot_option *opt; + int i = 0; + + list_for_each_entry(&ctx->boot_options, opt, list) { + if (i++ == idx) + return opt; + } + + assert(0); + + return NULL; +} + +void __check_boot_option_count(struct discover_context *ctx, int count, + const char *file, int line) +{ + struct discover_boot_option *opt; + int i = 0; + + list_for_each_entry(&ctx->boot_options, opt, list) + i++; + + if (i == count) + return; + + fprintf(stderr, "%s:%d: boot option count check failed\n", file, line); + fprintf(stderr, "expected %d options, got %d:\n", count, i); + + i = 1; + list_for_each_entry(&ctx->boot_options, opt, list) + fprintf(stderr, " %2d: %s [%s]\n", i++, opt->option->name, + opt->option->id); + + exit(EXIT_FAILURE); +} + +void __check_args(struct discover_boot_option *opt, const char *args, + const char *file, int line) +{ + int rc; + + if (!opt->option->boot_args) { + fprintf(stderr, "%s%d: arg check failed\n", file, line); + fprintf(stderr, " no arguments parsed\n"); + fprintf(stderr, " expected '%s'\n", args); + exit(EXIT_FAILURE); + } + + rc = strcmp(opt->option->boot_args, args); + if (rc) { + fprintf(stderr, "%s%d: arg check failed\n", file, line); + fprintf(stderr, " got '%s'\n", opt->option->boot_args); + fprintf(stderr, " expected '%s'\n", args); + exit(EXIT_FAILURE); + } +} + +void __check_name(struct discover_boot_option *opt, const char *name, + const char *file, int line) +{ + int rc; + + rc = strcmp(opt->option->name, name); + if (rc) { + fprintf(stderr, "%s%d: name check failed\n", file, line); + fprintf(stderr, " got '%s'\n", opt->option->name); + fprintf(stderr, " expected '%s'\n", name); + exit(EXIT_FAILURE); + } +}