summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2014-02-27 13:54:32 +0800
committerJeremy Kerr <jk@ozlabs.org>2014-02-27 13:54:32 +0800
commitf94ca3311758854670d25ba4e7853d76c2113402 (patch)
tree8ea7d571a5c986bb93f11b03f6a8eec8e74cd057 /test
parent922756a3aefd8ba5c5675efd37df9f43938cf432 (diff)
downloadtalos-petitboot-f94ca3311758854670d25ba4e7853d76c2113402.zip
talos-petitboot-f94ca3311758854670d25ba4e7853d76c2113402.tar.gz
discover/pxe: pxe parser should only treat "::" paths as absolute
PXELinux treats all paths as relative, requiring a "::/path" syntax for truly absolute URLs. This change implements the same behaviour in petitboot, and updates the testcases to suit. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'test')
-rw-r--r--test/parser/Makefile.am2
-rw-r--r--test/parser/test-pxe-non-url-pathprefix-with-conf.c3
-rw-r--r--test/parser/test-pxe-path-resolve-absolute.c36
-rw-r--r--test/parser/test-pxe-path-resolve-relative.c36
-rw-r--r--test/parser/test-pxe-pathprefix-discover-mac.c2
-rw-r--r--test/parser/test-pxe-pathprefix-discover.c2
-rw-r--r--test/parser/test-pxe-pathprefix-with-conf.c3
7 files changed, 80 insertions, 4 deletions
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am
index aeb16d8..62770d2 100644
--- a/test/parser/Makefile.am
+++ b/test/parser/Makefile.am
@@ -67,6 +67,8 @@ TESTS = \
test-pxe-non-url-pathprefix-with-conf \
test-pxe-pathprefix-discover \
test-pxe-pathprefix-discover-mac \
+ test-pxe-path-resolve-relative \
+ test-pxe-path-resolve-absolute \
test-unresolved-remove
$(TESTS): %: %.embedded-config.o
diff --git a/test/parser/test-pxe-non-url-pathprefix-with-conf.c b/test/parser/test-pxe-non-url-pathprefix-with-conf.c
index 36d4726..b8cc2c2 100644
--- a/test/parser/test-pxe-non-url-pathprefix-with-conf.c
+++ b/test/parser/test-pxe-non-url-pathprefix-with-conf.c
@@ -34,5 +34,6 @@ void run_test(struct parser_test *test)
check_resolved_url_resource(opt->boot_image,
"tftp://host/path/to/./kernel");
- check_resolved_url_resource(opt->initrd, "tftp://host/initrd");
+ check_resolved_url_resource(opt->initrd,
+ "tftp://host/path/to/initrd");
}
diff --git a/test/parser/test-pxe-path-resolve-absolute.c b/test/parser/test-pxe-path-resolve-absolute.c
new file mode 100644
index 0000000..04502fc
--- /dev/null
+++ b/test/parser/test-pxe-path-resolve-absolute.c
@@ -0,0 +1,36 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+label linux
+kernel ::vmlinux
+initrd ::/initrd
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded_url(test, "tftp://host/path/conf.txt");
+
+ test_set_event_source(test);
+ test_set_event_param(test->ctx->event, "siaddr", "host");
+ test_set_event_param(test->ctx->event, "pxeconffile", "path/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");
+
+ /* even though the initrd is specifed as /initrd, pxelinux treats
+ * this as relative. */
+ check_resolved_url_resource(opt->boot_image,
+ "tftp://host/vmlinux");
+ check_resolved_url_resource(opt->initrd,
+ "tftp://host/initrd");
+}
diff --git a/test/parser/test-pxe-path-resolve-relative.c b/test/parser/test-pxe-path-resolve-relative.c
new file mode 100644
index 0000000..920c139
--- /dev/null
+++ b/test/parser/test-pxe-path-resolve-relative.c
@@ -0,0 +1,36 @@
+
+#include "parser-test.h"
+
+#if 0 /* PARSER_EMBEDDED_CONFIG */
+label linux
+kernel vmlinux
+initrd /initrd
+#endif
+
+void run_test(struct parser_test *test)
+{
+ struct discover_boot_option *opt;
+ struct discover_context *ctx;
+
+ test_read_conf_embedded_url(test, "tftp://host/path/conf.txt");
+
+ test_set_event_source(test);
+ test_set_event_param(test->ctx->event, "siaddr", "host");
+ test_set_event_param(test->ctx->event, "pxeconffile", "path/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");
+
+ /* even though the initrd is specifed as /initrd, pxelinux treats
+ * this as relative. */
+ check_resolved_url_resource(opt->boot_image,
+ "tftp://host/path/vmlinux");
+ check_resolved_url_resource(opt->initrd,
+ "tftp://host/path/initrd");
+}
diff --git a/test/parser/test-pxe-pathprefix-discover-mac.c b/test/parser/test-pxe-pathprefix-discover-mac.c
index 1e5fa71..3c003fa 100644
--- a/test/parser/test-pxe-pathprefix-discover-mac.c
+++ b/test/parser/test-pxe-pathprefix-discover-mac.c
@@ -37,5 +37,5 @@ void run_test(struct parser_test *test)
check_resolved_url_resource(opt->boot_image,
"tftp://host/path/to/./kernel");
check_resolved_url_resource(opt->initrd,
- "tftp://host/initrd");
+ "tftp://host/path/to/initrd");
}
diff --git a/test/parser/test-pxe-pathprefix-discover.c b/test/parser/test-pxe-pathprefix-discover.c
index 9cb44c8..8048961 100644
--- a/test/parser/test-pxe-pathprefix-discover.c
+++ b/test/parser/test-pxe-pathprefix-discover.c
@@ -36,5 +36,5 @@ void run_test(struct parser_test *test)
check_resolved_url_resource(opt->boot_image,
"tftp://host/path/to/./kernel");
check_resolved_url_resource(opt->initrd,
- "tftp://host/initrd");
+ "tftp://host/path/to/initrd");
}
diff --git a/test/parser/test-pxe-pathprefix-with-conf.c b/test/parser/test-pxe-pathprefix-with-conf.c
index 57f942d..ce1d600 100644
--- a/test/parser/test-pxe-pathprefix-with-conf.c
+++ b/test/parser/test-pxe-pathprefix-with-conf.c
@@ -34,5 +34,6 @@ void run_test(struct parser_test *test)
check_resolved_url_resource(opt->boot_image,
"tftp://host/path/to/./kernel");
- check_resolved_url_resource(opt->initrd, "tftp://host/initrd");
+ check_resolved_url_resource(opt->initrd,
+ "tftp://host/path/to/initrd");
}
OpenPOWER on IntegriCloud