Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Štetiar <ynezz@true.cz>2019-12-08 15:12:47 +0300
committerPetr Štetiar <ynezz@true.cz>2019-12-25 12:31:58 +0300
commitbf680707acfdadcd6301657448dcf3bd8c8fa60c (patch)
tree1deb2ca4557f56f2e89f87d5987b47dc2b1b489b /tests/cram/test_jshn.t
parentf804578847de49112d414841df928921e62cc216 (diff)
tests: add unit tests covered with Clang sanitizers
Currently we run all tests via Valgrind. This patch adds 2nd batch of tests which are compiled with Clang AddressSanitizer[1], LeakSanitizer[2] and UndefinedBehaviorSanitizer[3] in order to catch more issues during QA on CI. AddressSanitizer is a fast memory error detector. The tool can detect the following types of bugs: * Out-of-bounds accesses to heap, stack and globals * Use-after-free, use-after-return, use-after-scope * Double-free, invalid free LeakSanitizer is a run-time memory leak detector. It can be combined with AddressSanitizer to get both memory error and leak detection, or used in a stand-alone mode. UndefinedBehaviorSanitizer (UBSan) is a fast undefined behavior detector. UBSan modifies the program at compile-time to catch various kinds of undefined behavior during program execution, for example: * Using misaligned or null pointer * Signed integer overflow * Conversion to, from, or between floating-point types which would overflow the destination 1. http://clang.llvm.org/docs/AddressSanitizer.html 2. http://http://clang.llvm.org/docs/LeakSanitizer.html 3. http://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'tests/cram/test_jshn.t')
-rw-r--r--tests/cram/test_jshn.t144
1 files changed, 144 insertions, 0 deletions
diff --git a/tests/cram/test_jshn.t b/tests/cram/test_jshn.t
index 1881a3d..b2f2853 100644
--- a/tests/cram/test_jshn.t
+++ b/tests/cram/test_jshn.t
@@ -9,12 +9,20 @@ check usage:
Usage: jshn [-n] [-i] -r <message>|-R <file>|-o <file>|-p <prefix>|-w
[2]
+ $ jshn-san
+ Usage: jshn-san [-n] [-i] -r <message>|-R <file>|-o <file>|-p <prefix>|-w
+ [2]
+
test bad json:
$ jshn -r '[]'
Failed to parse message data
[1]
+ $ jshn-san -r '[]'
+ Failed to parse message data
+ [1]
+
test good json:
$ jshn -r '{"foo": "bar", "baz": {"next": "meep"}}'
@@ -24,16 +32,31 @@ test good json:
json_add_string 'next' 'meep';
json_close_object;
+ $ jshn-san -r '{"foo": "bar", "baz": {"next": "meep"}}'
+ json_init;
+ json_add_string 'foo' 'bar';
+ json_add_object 'baz';
+ json_add_string 'next' 'meep';
+ json_close_object;
+
test json from file:
$ echo '[]' > test.json; jshn -R test.json
Failed to parse message data
[1]
+ $ echo '[]' > test.json; jshn-san -R test.json
+ Failed to parse message data
+ [1]
+
$ jshn -R nada.json
Error opening nada.json
[3]
+ $ jshn-san -R nada.json
+ Error opening nada.json
+ [3]
+
$ echo '{"foo": "bar", "baz": {"next": "meep"}}' > test.json; jshn -R test.json
json_init;
json_add_string 'foo' 'bar';
@@ -41,38 +64,74 @@ test json from file:
json_add_string 'next' 'meep';
json_close_object;
+ $ echo '{"foo": "bar", "baz": {"next": "meep"}}' > test.json; jshn-san -R test.json
+ json_init;
+ json_add_string 'foo' 'bar';
+ json_add_object 'baz';
+ json_add_string 'next' 'meep';
+ json_close_object;
+
test json formatting without prepared environment:
$ jshn -p procd -w
{ }
+ $ jshn-san -p procd -w
+ { }
+
$ jshn -i -p procd -w
{
\t (esc)
}
+ $ jshn-san -i -p procd -w
+ {
+ \t (esc)
+ }
+
$ jshn -i -n -p procd -w
{
\t (esc)
} (no-eol)
+ $ jshn-san -i -n -p procd -w
+ {
+ \t (esc)
+ } (no-eol)
+
$ jshn -p procd -o test.json; cat test.json
{ }
+ $ jshn-san -p procd -o test.json; cat test.json
+ { }
+
$ jshn -i -p procd -o test.json; cat test.json
{
\t (esc)
}
+ $ jshn-san -i -p procd -o test.json; cat test.json
+ {
+ \t (esc)
+ }
+
$ jshn -i -n -p procd -o test.json; cat test.json
{
\t (esc)
} (no-eol)
+ $ jshn-san -i -n -p procd -o test.json; cat test.json
+ {
+ \t (esc)
+ } (no-eol)
+
$ chmod oug= test.json
$ jshn -i -n -p procd -o test.json
Error opening test.json
[3]
+ $ jshn-san -i -n -p procd -o test.json
+ Error opening test.json
+ [3]
$ rm -f test.json
test json formatting with prepared environment:
@@ -104,6 +163,9 @@ test json formatting with prepared environment:
$ jshn -p procd -w
{ "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
+ $ jshn-san -p procd -w
+ { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
+
$ jshn -i -p procd -w
{
\t"name": "urngd", (esc)
@@ -123,6 +185,25 @@ test json formatting with prepared environment:
\t} (esc)
}
+ $ jshn-san -i -p procd -w
+ {
+ \t"name": "urngd", (esc)
+ \t"script": "/etc/init.d/urngd", (esc)
+ \t"instances": { (esc)
+ \t\t"instance1": { (esc)
+ \t\t\t"command": [ (esc)
+ \t\t\t\t"/sbin/urngd" (esc)
+ \t\t\t] (esc)
+ \t\t} (esc)
+ \t}, (esc)
+ \t"triggers": [ (esc)
+ \t\t (esc)
+ \t], (esc)
+ \t"data": { (esc)
+ \t\t (esc)
+ \t} (esc)
+ }
+
$ jshn -n -i -p procd -w
{
\t"name": "urngd", (esc)
@@ -142,9 +223,31 @@ test json formatting with prepared environment:
\t} (esc)
} (no-eol)
+ $ jshn-san -n -i -p procd -w
+ {
+ \t"name": "urngd", (esc)
+ \t"script": "/etc/init.d/urngd", (esc)
+ \t"instances": { (esc)
+ \t\t"instance1": { (esc)
+ \t\t\t"command": [ (esc)
+ \t\t\t\t"/sbin/urngd" (esc)
+ \t\t\t] (esc)
+ \t\t} (esc)
+ \t}, (esc)
+ \t"triggers": [ (esc)
+ \t\t (esc)
+ \t], (esc)
+ \t"data": { (esc)
+ \t\t (esc)
+ \t} (esc)
+ } (no-eol)
+
$ jshn -p procd -o test.json; cat test.json
{ "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
+ $ jshn-san -p procd -o test.json; cat test.json
+ { "name": "urngd", "script": "\/etc\/init.d\/urngd", "instances": { "instance1": { "command": [ "\/sbin\/urngd" ] } }, "triggers": [ ], "data": { } }
+
$ jshn -i -p procd -o test.json; cat test.json
{
\t"name": "urngd", (esc)
@@ -164,6 +267,25 @@ test json formatting with prepared environment:
\t} (esc)
}
+ $ jshn-san -i -p procd -o test.json; cat test.json
+ {
+ \t"name": "urngd", (esc)
+ \t"script": "/etc/init.d/urngd", (esc)
+ \t"instances": { (esc)
+ \t\t"instance1": { (esc)
+ \t\t\t"command": [ (esc)
+ \t\t\t\t"/sbin/urngd" (esc)
+ \t\t\t] (esc)
+ \t\t} (esc)
+ \t}, (esc)
+ \t"triggers": [ (esc)
+ \t\t (esc)
+ \t], (esc)
+ \t"data": { (esc)
+ \t\t (esc)
+ \t} (esc)
+ }
+
$ jshn -n -i -p procd -o test.json; cat test.json
{
\t"name": "urngd", (esc)
@@ -183,7 +305,29 @@ test json formatting with prepared environment:
\t} (esc)
} (no-eol)
+ $ jshn-san -n -i -p procd -o test.json; cat test.json
+ {
+ \t"name": "urngd", (esc)
+ \t"script": "/etc/init.d/urngd", (esc)
+ \t"instances": { (esc)
+ \t\t"instance1": { (esc)
+ \t\t\t"command": [ (esc)
+ \t\t\t\t"/sbin/urngd" (esc)
+ \t\t\t] (esc)
+ \t\t} (esc)
+ \t}, (esc)
+ \t"triggers": [ (esc)
+ \t\t (esc)
+ \t], (esc)
+ \t"data": { (esc)
+ \t\t (esc)
+ \t} (esc)
+ } (no-eol)
+
$ chmod oug= test.json
$ jshn -n -i -p procd -o test.json
Error opening test.json
[3]
+ $ jshn-san -n -i -p procd -o test.json
+ Error opening test.json
+ [3]