summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-12-12 14:05:40 +1100
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-12-12 16:15:59 +1100
commita2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50 (patch)
tree01779205e51f0e2870e6627873ad8158e0b3694d /test
parent865097ff2cbb64f4d5b3122ab09e7b1550ecd3dd (diff)
downloadtalos-petitboot-a2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50.zip
talos-petitboot-a2d5a3e3cb55fe3583acaae44fabc7c3d7f8df50.tar.gz
discover/pxe-parser: Fix relative parsing for manual config files
Manually specified config files are asynchronously downloaded by device_handler_process_url() before being parsed. This overwrites the 'pxeconffile' parameter, causing the parser to create relative paths relative to the downloaded file's path, not the original remote path. Work around this by setting 'pxeconffile-local' instead to differentiate between the original config file's location and the local copy. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'test')
-rw-r--r--test/parser/Makefile.am1
-rw-r--r--test/parser/test-pxe-discover-bootfile-async-file.c42
2 files changed, 43 insertions, 0 deletions
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index fa644fe..eb71a07 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -71,6 +71,7 @@ parser_TESTS = \
test/parser/test-pxe-discover-bootfile-pathprefix \
test/parser/test-pxe-discover-bootfile-relative-conffile \
test/parser/test-pxe-discover-bootfile-absolute-conffile \
+ test/parser/test-pxe-discover-bootfile-async-file \
test/parser/test-unresolved-remove
TESTS += $(parser_TESTS)
diff --git a/test/parser/test-pxe-discover-bootfile-async-file.c b/test/parser/test-pxe-discover-bootfile-async-file.c
new file mode 100644
index 0000000..af61659
--- /dev/null
+++ b/test/parser/test-pxe-discover-bootfile-async-file.c
@@ -0,0 +1,42 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+label linux
+kernel vmlinux
+initrd initrd
+#endif
+
+/**
+ * Manually specified conf files will be downloaded locally before being passed
+ * to the parser. Check that the parser correctly resolves relative paths to the
+ * actual source, rather than the local file path.
+ */
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded_url(test, "file://tmp/conf.txt");
+
+ test_set_event_source(test);
+ test_set_event_param(test->ctx->event, "pxeconffile",
+ "tftp://host/dir/fail.txt");
+ test_set_event_param(test->ctx->event, "pxeconffile-local",
+ "file://tmp/conf.txt");
+
+ test_run_parser(test, "pxe");
+
+ ctx = test->ctx;
+
+ check_boot_option_count(ctx, 1);
+ opt = get_boot_option(ctx, 0);
+
+ check_name(opt, "linux");
+
+ check_resolved_url_resource(opt->boot_image,
+ "tftp://host/dir/vmlinux");
+ check_resolved_url_resource(opt->initrd,
+ "tftp://host/dir/initrd");
+}
OpenPOWER on IntegriCloud