]> git.ozlabs.org Git - petitboot/blobdiff - test/parser/utils.c
test/parser: check for multiple default options
[petitboot] / test / parser / utils.c
index 407ac80ba40e1184658f289e2f11df5801605118..7ebb411c0c9f6eb664991da10e75b7fb684a64c3 100644 (file)
@@ -41,25 +41,22 @@ static void __attribute__((destructor)) __cleanup_parsers(void)
 }
 
 static struct discover_device *test_create_device_simple(
-               struct discover_context *ctx)
+               struct parser_test *test)
 {
        static int dev_idx;
        char name[10];
 
        sprintf(name, "__test%d", dev_idx++);
 
-       return test_create_device(ctx, name);
+       return test_create_device(test, name);
 }
 
-struct discover_device *test_create_device(struct discover_context *ctx,
+struct discover_device *test_create_device(struct parser_test *test,
                const char *name)
 {
        struct discover_device *dev;
 
-       dev = talloc_zero(ctx, struct discover_device);
-       dev->device = talloc_zero(dev, struct device);
-
-       list_init(&dev->boot_options);
+       dev = discover_device_create(test->handler, name);
 
        dev->device->id = talloc_strdup(dev, name);
        dev->device_path = talloc_asprintf(dev, "/dev/%s", name);
@@ -76,16 +73,20 @@ static struct discover_context *test_create_context(struct parser_test *test)
        assert(ctx);
 
        list_init(&ctx->boot_options);
-       ctx->device = test_create_device_simple(ctx);
+       ctx->device = test_create_device_simple(test);
+       device_handler_add_device(test->handler, ctx->device);
 
        return ctx;
 }
 
+extern struct config *test_config_init(struct parser_test *test);
+
 struct parser_test *test_init(void)
 {
        struct parser_test *test;
 
        test = talloc_zero(NULL, struct parser_test);
+       test->config = test_config_init(test);
        test->handler = device_handler_init(NULL, NULL, 0);
        test->ctx = test_create_context(test);
 
@@ -175,9 +176,6 @@ void boot_option_resolve(struct device_handler *handler,
        resource_resolve(handler, opt->source, opt->icon);
 }
 
-extern void device_handler_add_device(struct device_handler *handler,
-               struct discover_device *dev);
-
 void test_hotplug_device(struct parser_test *test, struct discover_device *dev)
 {
        struct discover_boot_option *opt;
@@ -208,10 +206,19 @@ void __check_boot_option_count(struct discover_context *ctx, int count,
                const char *file, int line)
 {
        struct discover_boot_option *opt;
-       int i = 0;
+       int defaults = 0, i = 0;
 
-       list_for_each_entry(&ctx->boot_options, opt, list)
+       list_for_each_entry(&ctx->boot_options, opt, list) {
                i++;
+               if (opt->option->is_default)
+                       defaults++;
+       }
+
+       if (defaults > 1) {
+               fprintf(stderr, "%s:%d: parser returned multiple default "
+                               "options\n", file, line);
+               exit(EXIT_FAILURE);
+       }
 
        if (i == count)
                return;