Adds build_coverage.sh script that: - Builds the simulation with GCC branch coverage instrumentation - Supports --report flag to run simulation and generate lcov HTML report - Uses 60 second timeout with SIGINT for graceful shutdown Also adds SIGINT handler to simulation to exit cleanly and flush coverage data.
41 lines
1.9 KiB
Bash
41 lines
1.9 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Build simulation with branch coverage instrumentation
|
|
gcc src/sha256.c src/basic.c src/file_system.c src/byte_queue.c src/file_tree.c src/message.c src/tcp.c src/wal.c src/hash_set.c src/client.c src/metadata_server.c src/chunk_server.c src/random_client.c src/main.c quakey/src/lfs.c quakey/src/lfs_util.c quakey/src/quakey.c -o toasty_simulation_coverage -Iquakey/include -Iinclude -Wall -Wextra -ggdb -O0 -DMAIN_SIMULATION --coverage -fprofile-arcs -ftest-coverage
|
|
|
|
echo "Coverage build complete: toasty_simulation_coverage"
|
|
echo ""
|
|
echo "To generate HTML coverage report:"
|
|
echo " 1. Run: ./toasty_simulation_coverage"
|
|
echo " 2. Run: ./build_coverage.sh --report"
|
|
|
|
if [ "$1" = "--report" ]; then
|
|
# Reset previous coverage data
|
|
lcov --zerocounters --directory .
|
|
|
|
# Capture baseline coverage (before running)
|
|
lcov --capture --initial --directory . --output-file coverage_base.info --rc lcov_branch_coverage=1
|
|
|
|
# Run the simulation with a 60 second time limit
|
|
# Use SIGINT for graceful shutdown (allows coverage data to be flushed)
|
|
# Falls back to SIGKILL after 5 seconds if process doesn't exit
|
|
echo "Running simulation (60 second limit)..."
|
|
timeout --signal=INT --kill-after=5 60 ./toasty_simulation_coverage || true
|
|
|
|
# Capture coverage after running
|
|
lcov --capture --directory . --output-file coverage_test.info --rc lcov_branch_coverage=1
|
|
|
|
# Combine baseline and test coverage
|
|
lcov --add-tracefile coverage_base.info --add-tracefile coverage_test.info --output-file coverage.info --rc lcov_branch_coverage=1
|
|
|
|
# Remove external/system headers from report
|
|
lcov --remove coverage.info '/usr/*' --output-file coverage.info --rc lcov_branch_coverage=1
|
|
|
|
# Generate HTML report
|
|
genhtml coverage.info --output-directory coverage_html --branch-coverage
|
|
|
|
echo ""
|
|
echo "HTML coverage report generated in: coverage_html/index.html"
|
|
fi
|