Files
ToastyFS/build_coverage.sh
T
Claude 4cac3a721e Add branch coverage build for simulation
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.
2026-01-16 16:47:58 +00:00

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