feat: Add manual testing of bindings with Valgrind
(cherry picked from commit 12fed067bf230d3258db172afe648ec690ba584c)
This commit is contained in:
parent
7ef434a6d7
commit
290f2654e1
2 changed files with 30 additions and 0 deletions
25
doc/hacking/test-ffi.md
Normal file
25
doc/hacking/test-ffi.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
# Testing FFI code
|
||||
|
||||
If `cargo-valgrind` is broken, you may run `valgrind` manually.
|
||||
|
||||
1. `cd rust; cargo test -v`
|
||||
2. find the relevant test suite executable in the log
|
||||
- example: `/home/user/src/nix-bindings-rust/rust/target/debug/deps/nix_util-036ec381a9e3fd6d`
|
||||
3. `valgrind --leak-check=full <paste the test exe>`
|
||||
4. check that
|
||||
- `definitely lost: 0 bytes in 0 blocks`
|
||||
|
||||
## Paranoid check
|
||||
|
||||
Although normal valgrind tends to catch things, you may choose to enable `--show-leak-kinds=all`.
|
||||
This will print a few false positive.
|
||||
|
||||
Acceptable leaks are those involving (and this may be Linux-specific)
|
||||
- `call_init`: static initializers
|
||||
- `nix::GlobalConfig::Register::Register`
|
||||
- `_GLOBAL__sub_I_logging.cc`
|
||||
- ...
|
||||
- `new<test::test_main::{closure_env#0}>`: a leak in the rust test framework
|
||||
|
||||
When in doubt, compare the log to a run with your new test case commented out.
|
||||
|
|
@ -55,6 +55,11 @@
|
|||
pkgs.rustfmt
|
||||
pkgs.pkg-config
|
||||
pkgs.clang-tools # clangd
|
||||
pkgs.valgrind
|
||||
# TODO: set up cargo-valgrind in shell and build
|
||||
# currently both this and `cargo install cargo-valgrind`
|
||||
# produce a binary that says ENOENT.
|
||||
# pkgs.cargo-valgrind
|
||||
];
|
||||
shellHook = ''
|
||||
${config.pre-commit.installationScript}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue