examples: add shunit2 tests for json_script
Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
This commit is contained in:
parent
02db6d71b6
commit
5326ce1046
4 changed files with 1358 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -8,3 +8,4 @@ CMakeFiles
|
|||
install_manifest.txt
|
||||
jshn
|
||||
*-example
|
||||
tests.*
|
||||
|
|
|
@ -16,10 +16,10 @@ static void handle_command(struct json_script_ctx *ctx, const char *name,
|
|||
struct blob_attr *cur;
|
||||
int rem;
|
||||
|
||||
fprintf(stderr, "Command: %s", name);
|
||||
fprintf(stdout, "%s", name);
|
||||
blobmsg_for_each_attr(cur, data, rem)
|
||||
fprintf(stderr, " %s", (char *) blobmsg_data(cur));
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stdout, " %s", (char *) blobmsg_data(cur));
|
||||
fprintf(stdout, "\n");
|
||||
}
|
||||
|
||||
static struct json_script_file *
|
||||
|
|
287
examples/json_script-tests.sh
Normal file
287
examples/json_script-tests.sh
Normal file
|
@ -0,0 +1,287 @@
|
|||
JSON_SCRIPT=tests.json
|
||||
JSON_SCRIPT_BIN=./json_script-example
|
||||
FILE_STDOUT=tests.stdout
|
||||
FILE_STDERR=tests.stderr
|
||||
FILE_EXPECTED=tests.expected
|
||||
|
||||
call_json_script() {
|
||||
#export LD_PRELOAD=../libjson_script.so
|
||||
$JSON_SCRIPT_BIN "$@" "$JSON_SCRIPT" >"$FILE_STDOUT" 2>"$FILE_STDERR"
|
||||
}
|
||||
|
||||
assertStdioEquals() {
|
||||
local expected="$1"
|
||||
local file_stdio="$2"
|
||||
|
||||
echo "$expected" >"$FILE_EXPECTED"
|
||||
if [ -z "$expected" ]; then
|
||||
# we are expecting empty output, but we deliberately added a newline
|
||||
# with echo above, so adding another echo to compensate for that
|
||||
echo >>"$file_stdio"
|
||||
fi
|
||||
diff -up "$FILE_EXPECTED" "$file_stdio" >/dev/null 2>&1 || {
|
||||
cat >&2 <<EOF
|
||||
|--- expecting
|
||||
$expected<
|
||||
|--- actual
|
||||
$(cat $file_stdio)<
|
||||
|--- END
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
assertStdoutEquals() {
|
||||
assertStdioEquals "$1" "$FILE_STDOUT"
|
||||
}
|
||||
|
||||
assertStderrEquals() {
|
||||
assertStdioEquals "$1" "$FILE_STDERR"
|
||||
}
|
||||
|
||||
test_bad_json() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ ]
|
||||
[ ]
|
||||
]
|
||||
EOF
|
||||
call_json_script
|
||||
assertStderrEquals "load JSON data from $JSON_SCRIPT failed."
|
||||
}
|
||||
|
||||
test_expr_eq() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "eq", "VAR", "foo" ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=foo"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=xxx"
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_has() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "has", "VAR" ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=foo"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_regex_single() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "regex", "VAR", ".ell." ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=hello"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=.ell."
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script "VAR="
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script "VAR=hell"
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_regex_multi() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "regex", "VAR", [ ".ell.", "w.rld" ] ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=hello"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=world"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=.ell."
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=w.rld"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script "VAR="
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script "VAR=hell"
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_not() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "not", [ "has", "VAR" ] ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=foo"
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo bar"
|
||||
}
|
||||
|
||||
test_expr_and() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "and", [ "eq", "EQVAR", "eqval" ],
|
||||
[ "regex", "REGEXVAR", "regex..." ]
|
||||
],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "EQVAR=foo"
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script "REGEXVAR=regex***"
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_or() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "or", [ "not", [ "eq", "EQVAR", "eqval" ] ],
|
||||
[ "regex", "REGEXVAR", [ "regexva.[0-9]", "regexva.[a-z]" ] ]
|
||||
],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "EQVAR=eqval" "REGEXVAR=regexval1"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "EQVAR=neq" "REGEXVAR=sxc"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "REGEXVAR=sxc"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "EQVAR=foo"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "EQVAR=eqval" "REGEXVAR=regexval"
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_expr_isdir() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "isdir", "%VAR%" ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=/"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=$(mktemp -u)"
|
||||
assertStdoutEquals "echo baz"
|
||||
call_json_script
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_cmd_case() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "case", "CASEVAR", {
|
||||
"0": [ "echo", "foo" ],
|
||||
"1": [
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
],
|
||||
"%VAR%": [ "echo", "quz" ]
|
||||
} ]
|
||||
]
|
||||
EOF
|
||||
call_json_script "CASEVAR=0"
|
||||
assertStdoutEquals "echo foo"
|
||||
call_json_script "CASEVAR=1"
|
||||
assertStdoutEquals "echo bar
|
||||
echo baz"
|
||||
call_json_script "CASEVAR=%VAR%"
|
||||
assertStdoutEquals "echo quz"
|
||||
call_json_script "CASEVAR="
|
||||
assertStdoutEquals ""
|
||||
call_json_script
|
||||
assertStdoutEquals ""
|
||||
call_json_script "CASEVAR=xxx" "VAR=xxx"
|
||||
assertStdoutEquals ""
|
||||
}
|
||||
|
||||
test_cmd_if() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "if",
|
||||
[ "eq", "VAR", "foo" ],
|
||||
[ "echo", "bar" ],
|
||||
[ "echo", "baz" ]
|
||||
]
|
||||
]
|
||||
EOF
|
||||
call_json_script "VAR=foo"
|
||||
assertStdoutEquals "echo bar"
|
||||
call_json_script "VAR=xxx"
|
||||
assertStdoutEquals "echo baz"
|
||||
}
|
||||
|
||||
test_cmd_cb() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "exec", "%VAR%", "/%VAS%%%/" ]
|
||||
]
|
||||
EOF
|
||||
call_json_script
|
||||
assertStdoutEquals "exec /%/"
|
||||
call_json_script "VAR="
|
||||
assertStdoutEquals "exec /%/"
|
||||
call_json_script "VAR=qux" "VAS=3"
|
||||
assertStdoutEquals "exec qux /3%/"
|
||||
}
|
||||
|
||||
test_cmd_return() {
|
||||
cat >"$JSON_SCRIPT" <<-EOF
|
||||
[
|
||||
[ "heh", "%HEHVAR%" ],
|
||||
[ "%VAR%", "%VAR%" ],
|
||||
[ "return" ],
|
||||
[ "exec_non_reachable", "Arghhh" ]
|
||||
]
|
||||
EOF
|
||||
call_json_script "HEHVAR=dude" "VAR=ow"
|
||||
assertStdoutEquals "heh dude
|
||||
%VAR% ow"
|
||||
}
|
||||
|
||||
. ./shunit2
|
1067
examples/shunit2
Normal file
1067
examples/shunit2
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue