177a282fd1 | 2 years ago | |
---|---|---|
.. | ||
avr | 3 years ago | |
fuzz | 3 years ago | |
messagepack | 6 years ago | |
pseudojson | 6 years ago | |
unit | 2 years ago | |
README.md | 3 years ago |
README.md
The MPack build process does not build MPack into a library; it is used to build and run various tests. You do not need to build MPack or the unit testing suite to use MPack.
Unit Tests
Dependencies
The unit test suite (on Linux and Windows) requires Python 3 (at least 3.5) and Ninja (at least 1.3). On Windows, it also requires Visual Studio with a version of native build tools. Ninja is included in the Visual Studio 2019 build tools but not in earlier versions.
The unit test suite can also make use of 32-bit cross-compiling support if on a 32-bit Linux system. To do this, install the appropriate package:
- On Arch, this is
gcc-multilib
orlib32-clang
- On Ubuntu, this is
gcc-multilib
andg++-multilib
In addition, if Valgrind is installed and the compiler supports 32-bit cross-compiling, you will need to install Valgrind's 32-bit support, e.g. valgrind-multilib
and/or libc6-dbg:i386
.
Running the unit tests
Run the build script:
tools/unit.sh
or on Windows:
tools\unit.bat
This will run a Python script which generates a Ninja file, then invoke Ninja on it in the default configuration.
Running more configurations
You can run additional tests by passing specific targets on the command-line:
- The "help" target lists all targets;
- The "more" target runs additional configurations (those run by the CI);
- The "all" target runs all tests (those run on various platforms and compilers before each release);
- Most targets take the form
run-{name}-{mode}
where{name}
is a configuration name and{mode}
is eitherdebug
orrelease
.
For example, to run all tests with the default compiler:
tools/unit.sh all
To run only a specific configuration, say, the debug noio
configuration where MPACK_STDIO
is disabled:
tools/unit.sh run-noio-debug
To list all targets:
tools/unit.sh help
The Windows script tools\unit.bat
takes the same arguments.
Choosing a compiler
On Linux or macOS, you can choose the compiler by passing a different CC
to the build script. For example, to build with TinyCC:
CC=tcc tools/unit.sh
On Windows, you can run it in a build tools command prompt or load the build tools yourself to use a specific toolset. If no build tools are loaded it will load the latest Visual Studio Native Build Tools automatically.
Fuzz Testing
MPack supports fuzzing with american fuzzy lop. Run tools/afl.sh
to fuzz MPack.
Fuzzing paths are limited right now. The fuzzer:
- decodes stdin with the dynamic Reader API;
- encodes the data to a growable buffer with the Write API;
- parses the resulting buffer with the Node API;
- and finally, prints a debug dump of the node tree to stdout.
It thus passes all data through three major components of MPack. Not tested currently are the Expect API (and its many functions like range helpers) nor the Builder API.
AVR / Arduino
MPack contains a Makefile for building the unit test suite for AVR. You'll need avr-gcc
and avr-libc
installed.
Build it like this:
make -f test/avr/Makefile
It doesn't actually link yet since the tests are too big. I don't have an Arduino to test it with anyway. But the object files compile at least.
Linux Kernel
The mpack-linux-kernel project contains a KBuild and shims to build the MPack unit test suite as a Linux kernel module. This is kept separate from MPack to avoid having to dual-license MPack under the GPL.