diff options
author | Petr Štetiar <ynezz@true.cz> | 2019-12-08 15:12:47 +0300 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2019-12-25 12:31:58 +0300 |
commit | bf680707acfdadcd6301657448dcf3bd8c8fa60c (patch) | |
tree | 1deb2ca4557f56f2e89f87d5987b47dc2b1b489b /tests/cram/test_jshn.t | |
parent | f804578847de49112d414841df928921e62cc216 (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.t | 144 |
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] |