summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-10-04 11:10:18 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-10-04 12:21:02 +0800
commitccacb83a030da564c59c8e0f081fe967fba5a3eb (patch)
tree0e907080c670d0437591fedd9eadb6de62406346 /test
parent1b646fb733ef99b1dc1862276ae3595bdeaf355b (diff)
downloadtalos-petitboot-ccacb83a030da564c59c8e0f081fe967fba5a3eb.tar.gz
talos-petitboot-ccacb83a030da564c59c8e0f081fe967fba5a3eb.zip
discover/grub2: Implement save_env command
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'test')
-rw-r--r--test/parser/Makefile.am1
-rw-r--r--test/parser/test-grub2-save-env.c109
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);
+ }
+}
OpenPOWER on IntegriCloud