diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-10-04 11:10:18 +0800 |
---|---|---|
committer | Jeremy Kerr <jk@ozlabs.org> | 2013-10-04 12:21:02 +0800 |
commit | ccacb83a030da564c59c8e0f081fe967fba5a3eb (patch) | |
tree | 0e907080c670d0437591fedd9eadb6de62406346 /test/parser | |
parent | 1b646fb733ef99b1dc1862276ae3595bdeaf355b (diff) | |
download | petitboot-ccacb83a030da564c59c8e0f081fe967fba5a3eb.zip petitboot-ccacb83a030da564c59c8e0f081fe967fba5a3eb.tar.gz |
discover/grub2: Implement save_env command
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'test/parser')
-rw-r--r-- | test/parser/Makefile.am | 1 | ||||
-rw-r--r-- | test/parser/test-grub2-save-env.c | 109 |
2 files changed, 110 insertions, 0 deletions
diff --git a/test/parser/Makefile.am b/test/parser/Makefile.am index 165b9ae..65dd7fc 100644 --- a/test/parser/Makefile.am +++ b/test/parser/Makefile.am @@ -34,6 +34,7 @@ TESTS = \ test-grub2-multiple-resolve \ test-grub2-single-line-if \ test-grub2-load-env \ + test-grub2-save-env \ test-grub2-f18-ppc64 \ test-grub2-ubuntu-13_04-x86 \ test-grub2-lexer-error \ diff --git a/test/parser/test-grub2-save-env.c b/test/parser/test-grub2-save-env.c new file mode 100644 index 0000000..7a2938f --- /dev/null +++ b/test/parser/test-grub2-save-env.c @@ -0,0 +1,109 @@ + +#include <string.h> + +#include <array-size/array-size.h> +#include <talloc/talloc.h> + +#include "parser-test.h" + +static const char *envsig = "# GRUB Environment Block\n"; + +struct env_test { + const char *name; + const char *env_before; + const char *script; + const char *env_after; +} tests[] = { + { + "init", + "######", + "a=xxx\nsave_env a\n", + "a=xxx\n" + }, + { + "append", + "q=q\nr=r\n######", + "a=xxx\nsave_env a\n", + "q=q\nr=r\na=xxx\n" + }, + { + "expand", + "q=q\na=x\nr=r\n##", + "a=xxx\nsave_env a\n", + "q=q\na=xxx\nr=r\n", + }, + { + "reduce", + "q=q\na=xxx\nr=r\n", + "a=x\nsave_env a\n", + "q=q\na=x\nr=r\n##", + }, + { + "invalid-insert", + "q=q\n---\nr=r\n", + "a=x\nsave_env a\n", + "q=q\na=x\nr=r\n", + }, + { + "invalid-shift", + "q=q\n--\nr=r\n#", + "a=x\nsave_env a\n", + "q=q\na=x\nr=r\n", + }, + { + "invalid-reduce", + "q=q\n----\nr=r\n", + "a=x\nsave_env a\n", + "q=q\na=x\nr=r\n#", + }, + { + "dup-replace-first", + "q=q\na=y\nr=r\na=z", + "a=x\nsave_env a\n", + "q=q\na=x\nr=r\na=z", + }, + { + "nospace-add", + "q=q\nr=r\n###", + "a=x\nsave_env a\n", + "q=q\nr=r\n###", + }, + { + "nospace-replace", + "q=q\na=x\nr=r\n#", + "a=xxx\nsave_env a\n", + "q=q\na=x\nr=r\n#", + }, +}; + +static void run_env_test(struct parser_test *test, struct env_test *envtest) +{ + const char *env_before, *env_after; + + env_before = talloc_asprintf(test, "%s%s", envsig, envtest->env_before); + env_after = talloc_asprintf(test, "%s%s", envsig, envtest->env_after); + + test_add_file_data(test, test->ctx->device, "/boot/grub/grubenv", + env_before, strlen(env_before)); + + __test_read_conf_data(test, envtest->script, strlen(envtest->script)); + test_run_parser(test, "grub2"); + + check_file_contents(test, test->ctx->device, "/boot/grub/grubenv", + env_after, strlen(env_after)); +} + +void run_test(struct parser_test *test) +{ + struct env_test *env_test; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(tests); i++) { + env_test = &tests[i]; + printf("test %s: ", env_test->name); + fflush(stdout); + run_env_test(test, env_test); + printf("OK\n"); + fflush(stdout); + } +} |