]> git.ozlabs.org Git - petitboot/blobdiff - test/parser/utils.c
pb-config: Move config storage modules to "platform" modules in discover code
[petitboot] / test / parser / utils.c
index b80e0e102025430f4ebaece59540481d44fb5814..8a6314b442673751eb2dc329d691713b4dd98435 100644 (file)
@@ -16,6 +16,7 @@
 #include "parser.h"
 #include "resource.h"
 #include "event.h"
+#include "platform.h"
 
 #include "parser-test.h"
 
@@ -26,6 +27,10 @@ struct p_item {
 
 struct test_file {
        struct discover_device  *dev;
+       enum {
+               TEST_FILE,
+               TEST_DIR,
+       }                       type;
        const char              *name;
        void                    *data;
        int                     size;
@@ -91,14 +96,26 @@ static struct discover_context *test_create_context(struct parser_test *test)
        return ctx;
 }
 
-extern struct config *test_config_init(struct parser_test *test);
+/* define our own test platform */
+static bool test_platform_probe(struct platform *p __attribute__((unused)),
+               void *ctx __attribute__((unused)))
+{
+       return true;
+}
+
+struct platform test_platform = {
+       .name = "test",
+       .probe = test_platform_probe,
+};
+
+register_platform(test_platform);
 
 struct parser_test *test_init(void)
 {
        struct parser_test *test;
 
        test = talloc_zero(NULL, struct parser_test);
-       test->config = test_config_init(test);
+       platform_init(NULL);
        test->handler = device_handler_init(NULL, NULL, 0);
        test->ctx = test_create_context(test);
        list_init(&test->files);
@@ -110,12 +127,14 @@ void test_fini(struct parser_test *test)
 {
        device_handler_destroy(test->handler);
        talloc_free(test);
+       platform_fini();
 }
 
-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 +176,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 +184,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 +220,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 +236,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 +292,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 +357,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)
 {