mirror of
https://github.com/lotabout/skim.git
synced 2026-09-10 07:16:23 -04:00
chore: add valgrind and thread sanitizer test profiles [skip ci]
This commit is contained in:
parent
b96c65507e
commit
015fd28db6
|
|
@ -1,13 +1,68 @@
|
|||
experimental = ["setup-scripts"]
|
||||
experimental = ["setup-scripts", "wrapper-scripts"]
|
||||
|
||||
[scripts.setup.stop-tmux]
|
||||
command = "sh -c 'tmux kill-session -t skim_e2e || true'"
|
||||
[scripts.setup.start-tmux]
|
||||
command = "tmux new-session -d -s skim_e2e -n skim_e2e"
|
||||
|
||||
# Valgrind wrapper for memory leak detection
|
||||
[scripts.wrapper.valgrind]
|
||||
command = [
|
||||
"valgrind",
|
||||
"--leak-check=full",
|
||||
"--show-leak-kinds=all",
|
||||
"--track-origins=yes",
|
||||
"--error-exitcode=1",
|
||||
"--suppressions=.config/valgrind.supp"
|
||||
]
|
||||
|
||||
[profile.default]
|
||||
fail-fast = false
|
||||
retries = 9
|
||||
[[profile.default.scripts]]
|
||||
platform = "cfg(unix)"
|
||||
setup = ["stop-tmux", "start-tmux"]
|
||||
|
||||
# Valgrind profile for memory leak detection
|
||||
# Usage: cargo nextest run --profile valgrind --features test-utils
|
||||
#
|
||||
# Note: Valgrind can detect memory leaks but does NOT detect dangling threads.
|
||||
# For thread leak detection, use ThreadSanitizer instead (see below).
|
||||
[profile.valgrind]
|
||||
fail-fast = false
|
||||
retries = 2
|
||||
test-threads = 1 # Run tests serially to avoid interleaved valgrind output
|
||||
[[profile.valgrind.scripts]]
|
||||
platform = "cfg(unix)"
|
||||
setup = ["stop-tmux", "start-tmux"]
|
||||
run-wrapper = "valgrind"
|
||||
|
||||
# ThreadSanitizer profile for detecting data races and thread issues
|
||||
# Usage:
|
||||
# 1. First build with sanitizer (rebuilds stdlib and all deps):
|
||||
# RUSTFLAGS="-Zsanitizer=thread" cargo +nightly build --tests --features test-utils -Zbuild-std --target x86_64-unknown-linux-gnu
|
||||
# 2. Then run tests:
|
||||
# TSAN_OPTIONS="detect_deadlocks=1" cargo +nightly nextest run --profile tsan --features test-utils --target x86_64-unknown-linux-gnu
|
||||
#
|
||||
# Note: ThreadSanitizer can detect:
|
||||
# - Data races (concurrent unsynchronized access to memory)
|
||||
# - Deadlocks (with TSAN_OPTIONS=detect_deadlocks=1)
|
||||
# - Thread leaks (threads not joined before program exit)
|
||||
#
|
||||
# Requirements:
|
||||
# - Rust nightly (for -Zsanitizer and -Zbuild-std flags)
|
||||
# - The -Zbuild-std flag rebuilds the standard library with ThreadSanitizer
|
||||
# instrumentation to avoid ABI mismatch errors
|
||||
#
|
||||
# Important: This takes a long time on first build as it recompiles everything
|
||||
# including the standard library with ThreadSanitizer instrumentation.
|
||||
#
|
||||
# Environment variables:
|
||||
# TSAN_OPTIONS="detect_deadlocks=1 second_deadlock_stack=1"
|
||||
[profile.tsan]
|
||||
fail-fast = false
|
||||
retries = 3
|
||||
test-threads = 1 # TSan requires running tests serially
|
||||
[[profile.tsan.scripts]]
|
||||
platform = "cfg(unix)"
|
||||
setup = ["stop-tmux", "start-tmux"]
|
||||
|
|
|
|||
53
.config/valgrind.supp
Normal file
53
.config/valgrind.supp
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
# Valgrind suppressions for skim tests
|
||||
# This file suppresses known false positives from Rust stdlib and system libraries
|
||||
|
||||
# Rust std allocations that are intentionally not freed at program exit
|
||||
{
|
||||
rust_std_exit_cleanup
|
||||
Memcheck:Leak
|
||||
...
|
||||
fun:*std*
|
||||
}
|
||||
|
||||
# Thread-local storage cleanup
|
||||
{
|
||||
thread_local_cleanup
|
||||
Memcheck:Leak
|
||||
...
|
||||
fun:pthread_create*
|
||||
}
|
||||
|
||||
# Tokio runtime allocations
|
||||
{
|
||||
tokio_runtime
|
||||
Memcheck:Leak
|
||||
...
|
||||
fun:*tokio*runtime*
|
||||
}
|
||||
|
||||
# Crossterm/terminal allocations
|
||||
{
|
||||
crossterm_terminal
|
||||
Memcheck:Leak
|
||||
...
|
||||
fun:*crossterm*
|
||||
}
|
||||
|
||||
# Libc thread initialization
|
||||
{
|
||||
libc_thread_init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
...
|
||||
fun:calloc
|
||||
fun:allocate_dtv
|
||||
}
|
||||
|
||||
# DL allocations
|
||||
{
|
||||
dl_init
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
...
|
||||
fun:*dl_*
|
||||
}
|
||||
|
|
@ -6,6 +6,10 @@
|
|||
- Test (all): `cargo nextest --features test-utils`
|
||||
- Test (single): `cargo nextest test_name --features test-utils`
|
||||
- Integration/E2E tests: `cargo nextest --tests --features test-utils` (will need tmux under the hood)
|
||||
- Memory leak detection: `cargo nextest run --profile valgrind --features test-utils`
|
||||
- Thread leak/race detection:
|
||||
1. Build: `RUSTFLAGS="-Zsanitizer=thread" cargo +nightly build --tests --features test-utils -Zbuild-std --target x86_64-unknown-linux-gnu`
|
||||
2. Run: `TSAN_OPTIONS="detect_deadlocks=1" cargo +nightly nextest run --profile tsan --features test-utils --target x86_64-unknown-linux-gnu`
|
||||
- Lint: `cargo clippy`
|
||||
- Format: `cargo fmt` (check only: `cargo fmt --check`)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue