diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2014-12-11 09:42:58 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2014-12-11 15:11:42 +0800 |
commit | e330e3f5adf78d3ba77217995a4bc3cd1fd16f4c (patch) | |
tree | 5fe430243b363f991692f5e0929a5cf9a270fa88 /test | |
parent | 9c33c54f7b431074a7d0daddce34140044aaadf6 (diff) | |
download | talos-petitboot-e330e3f5adf78d3ba77217995a4bc3cd1fd16f4c.tar.gz talos-petitboot-e330e3f5adf78d3ba77217995a4bc3cd1fd16f4c.zip |
discover/grub2: Allow unset and invalid defaults
If the default environment variable is unset or invalid (i.e.,
references a non-existent boot option), then GRUB2 will fallback to the
first boot option present. This is preventing petitboot from autobooting
where no default is explicitly set, or is stale.
This change adds this fallback behaviour to petitboot. Because we don't
know if the first option will be a default at parse time (as no other
options matched the default env var), we need to keep options in a list,
and register them with the discover server once the parse is complete.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/parser/Makefile.am | 2 | ||||
-rw-r--r-- | test/parser/test-grub2-implicit-default-invalid.c | 26 | ||||
-rw-r--r-- | test/parser/test-grub2-implicit-default-unset.c | 25 |
3 files changed, 53 insertions, 0 deletions
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am index 1bb45e8..d69ca7f 100644 --- a/test/parser/Makefile.am +++ b/test/parser/Makefile.am @@ -21,6 +21,8 @@ parser_TESTS = \ test/parser/test-grub2-if-formats \ test/parser/test-grub2-default-index \ test/parser/test-grub2-default-multiword \ + test/parser/test-grub2-implicit-default-unset \ + test/parser/test-grub2-implicit-default-invalid \ test/parser/test-grub2-multiple-resolve \ test/parser/test-grub2-multiple-id \ test/parser/test-grub2-single-line-if \ diff --git a/test/parser/test-grub2-implicit-default-invalid.c b/test/parser/test-grub2-implicit-default-invalid.c new file mode 100644 index 0000000..72902db --- /dev/null +++ b/test/parser/test-grub2-implicit-default-invalid.c @@ -0,0 +1,26 @@ + +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +default=missing +menuentry 'test.1' { + linux /vmlinux +} +menuentry 'test.2' { + linux /vmlinux +} +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + + test_read_conf_embedded(test, "/grub2/grub.cfg"); + test_run_parser(test, "grub2"); + + check_boot_option_count(test->ctx, 2); + opt = get_boot_option(test->ctx, 0); + + check_name(opt, "test.1"); + check_is_default(opt); +} diff --git a/test/parser/test-grub2-implicit-default-unset.c b/test/parser/test-grub2-implicit-default-unset.c new file mode 100644 index 0000000..ecc4c00 --- /dev/null +++ b/test/parser/test-grub2-implicit-default-unset.c @@ -0,0 +1,25 @@ + +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +menuentry 'test.1' { + linux /vmlinux +} +menuentry 'test.2' { + linux /vmlinux +} +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + + test_read_conf_embedded(test, "/grub2/grub.cfg"); + test_run_parser(test, "grub2"); + + check_boot_option_count(test->ctx, 2); + opt = get_boot_option(test->ctx, 0); + + check_name(opt, "test.1"); + check_is_default(opt); +} |