X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=test%2Fparser%2Futils.c;h=838250b50dc1708fdd81578e5ac99b50fc1ad89a;hp=b80e0e102025430f4ebaece59540481d44fb5814;hb=4896183708855fbfd0aa892537fbcc17ed7eb971;hpb=cc28b17bb59411e6031a8273b784e9d1d3a9490d diff --git a/test/parser/utils.c b/test/parser/utils.c index b80e0e1..838250b 100644 --- a/test/parser/utils.c +++ b/test/parser/utils.c @@ -26,6 +26,10 @@ struct p_item { struct test_file { struct discover_device *dev; + enum { + TEST_FILE, + TEST_DIR, + } type; const char *name; void *data; int size; @@ -112,10 +116,11 @@ void test_fini(struct parser_test *test) talloc_free(test); } -void __test_read_conf_data(struct parser_test *test, const char *conf_file, +void __test_read_conf_data(struct parser_test *test, + struct discover_device *dev, const char *conf_file, const char *buf, size_t len) { - test_add_file_data(test, test->ctx->device, conf_file, buf, len); + test_add_file_data(test, dev, conf_file, buf, len); } void test_read_conf_file(struct parser_test *test, const char *filename, @@ -157,6 +162,7 @@ void test_add_file_data(struct parser_test *test, struct discover_device *dev, struct test_file *file; file = talloc_zero(test, struct test_file); + file->type = TEST_FILE; file->dev = dev; file->name = filename; file->data = talloc_memdup(test, data, size); @@ -164,6 +170,18 @@ void test_add_file_data(struct parser_test *test, struct discover_device *dev, list_add(&test->files, &file->list); } +void test_add_dir(struct parser_test *test, struct discover_device *dev, + const char *dirname) +{ + struct test_file *file; + + file = talloc_zero(test, struct test_file); + file->type = TEST_DIR; + file->dev = dev; + file->name = dirname; + list_add(&test->files, &file->list); +} + void test_set_event_source(struct parser_test *test) { test->ctx->event = talloc_zero(test->ctx, struct event); @@ -188,6 +206,8 @@ int parser_request_file(struct discover_context *ctx, continue; if (strcmp(file->name, filename)) continue; + if (file->type != TEST_FILE) + continue; /* the read_file() interface always adds a trailing null * for string-safety; do the same here */ @@ -202,6 +222,25 @@ int parser_request_file(struct discover_context *ctx, return -1; } +int parser_check_dir(struct discover_context *ctx, + struct discover_device *dev, const char *dirname) +{ + struct parser_test *test = ctx->test_data; + struct test_file *file; + + printf("%s: %s\n", __func__, dirname); + + list_for_each_entry(&test->files, file, list) { + if (file->dev != dev) + continue; + if (strcmp(file->name, dirname)) + continue; + return file->type == TEST_DIR ? 0 : -1; + } + + return -1; +} + int parser_replace_file(struct discover_context *ctx, struct discover_device *dev, const char *filename, char *buf, int len) @@ -239,7 +278,10 @@ int parser_request_url(struct discover_context *ctx, struct pb_url *url, char *tmp; list_for_each_entry(&test->files, file, list) { - if (strcmp(file->name, url->file)) + if (file->dev) + continue; + + if (strcmp(file->name, url->full)) continue; /* the read_file() interface always adds a trailing null @@ -301,6 +343,21 @@ void test_hotplug_device(struct parser_test *test, struct discover_device *dev) boot_option_resolve(test->handler, opt); } +void test_remove_device(struct parser_test *test, struct discover_device *dev) +{ + struct discover_boot_option *opt, *tmp; + + if (dev == test->ctx->device) { + list_for_each_entry_safe(&test->ctx->boot_options, + opt, tmp, list) { + list_remove(&opt->list); + talloc_free(opt); + } + } + + device_handler_remove(test->handler, dev); +} + struct discover_boot_option *get_boot_option(struct discover_context *ctx, int idx) {