rizin/test
Riccardo Schirone 187f314c49
Unwrap quoted strings when passing args to newer handlers ##newshell (#17732)
* Unwrap quoted strings when passing args to newer handlers ##newshell

When a user wraps an argument, it means like in SH that he wants the
command to consider the argument as one single arg, even if composed by
multiple words. The same applies for r2newshell. So far we did not
unwrap quoted strings to maintain compatibility with old shell, but
doing this unwrapping is one of the nice feature of newshell.

* Add tests for quoting/unquoting

* Adjust tests with `w` for newshell/oldshell
2020-09-30 14:25:38 +08:00
..
db Unwrap quoted strings when passing args to newer handlers ##newshell (#17732) 2020-09-30 14:25:38 +08:00
fuzz/scripts
notworking_db Move test/new/* into test/ ##tests (#16511) 2020-04-13 19:49:23 +02:00
scripts Do partial =h test on Windows (without /cmd and using curl) (#17729) 2020-09-29 21:23:26 +08:00
unit Add setters for CC self and error and Tests ##anal (#17704) 2020-09-30 13:39:20 +08:00
.gitignore
Makefile Move test/new/* into test/ ##tests (#16511) 2020-04-13 19:49:23 +02:00
README.md Add support for TIMEOUT key for cmd tests (#17582) ##r2r 2020-09-04 15:17:17 +02:00
run_unit.sh Many improvements in the V testsuite (#15722) ##test 2019-12-29 19:26:15 +01:00

Radare2 Regression Test Suite

A set of regression tests for Radare2 (http://radare.org).

Originally based on work by and now in collaboration with pancake.

Directory Hierarchy

  • db/: The tests sources
  • unit/: Unit tests (written in C, using minunit).
  • fuzz/: Fuzzing helper scripts
  • bins/: Sample binaries (fetched from the external repository)

Requirements

  • Radare2 installed (and in $PATH or set the R2 environment).
  • Valgrind (optional).

Usage

  • To run all tests, use make -k all.
  • To execute only the unit tests use make -k unit_tests.

Failure Levels

A test can have one of the following results:

  • success: The test passed, and that was expected.
  • fixed: The test passed, but failure was expeced.
  • broken: Failure was expected, and happened.
  • failed: The test failed unexpectedly. This is a regression.

Reporting Radare2 Bugs

Please do not post Radare2 bugs on the r2-regressions github tracker. Instead use the official r2 tracker:

https://github.com/radareorg/radare2/issues?state=open

Writing Assembly tests

Example tests for db/asm/*:

General format:
type "assembly" opcode [offset]

	type:
		* a stands for assemble
		* d stands for disassemble
		* B stands for broken
		* E stands for cfg.bigendian=true

	offset:
		Some architectures are going to assemble an instruction differently depending
		on the offset it's written to. Optional.

Examples:
a "ret" c3
d "ret" c3
a "nop" 90 # Assembly is correct
dB "nopppp" 90 # Disassembly test is broken

You can merge lines:

adB "nop" 90

acts the same as

aB "nop" 90
dB "nop" 90

    The filename is very important. It is used to tell radare which architecture to use.

    Format:
    arch[[_cpu]_bits]

Example:
x86_32 means -a x86 -b 32
    arm_v7_64 means what it means

Writing JSON tests

The JSON tests db/json are executed on 3 standard files (1 ELF, 1 MachO, 1 PE). The tests need to be working on the 3 files to pass.

Commands tests


Example commands tests for the other db/ folders:

NAME=test_db
FILE=bins/elf/ls
CMDS=<<EXPECT
pd 4
EXPECT=<<RUN
        ;-- main:
        ;-- entry0:
        ;-- func.100001174:
        0x100001174      55             Push rbp
        0x100001175      4889e5         Mov  rbp, rsp
        0x100001178      4157           Push r15
RUN
  • NAME is the name of the test, it must be unique
  • FILE is the path of the file used for the test
  • ARGS (optional) are the command line argument passed to r2 (e.g -b 16)
  • CMDS are the commands to be executed by the test
  • EXPECT is the expected output of the test
  • BROKEN (optional) is 1 if the tests is expected to be fail, 0 otherwise
  • TIMEOUT (optional) is the number of seconds to wait before considering the test timeout

You must end the test by adding RUN keyword

Advices

  • For portability reasons Do not use shell pipes, use ~
  • dont use pd if not necessary, use pi

License

The test files are licensed under GPL 3 (or later).