Bugs fixed in production code: - compare.sh: Python truthiness on 0.0 — `if b_val` was False for 0.0 t/s, displaying it as a dash instead of "0.0". Fixed with `is not None` checks. - compare.sh: ZeroDivisionError when computing delta % with 0.0 baseline. Test improvements (review findings): - detect.bats: kernel param tests now use real detect_kernel_param logic pattern (not a separate reimplementation). Added non-GiB-aligned RAM test, device ID without 0x prefix, empty firmware version, llama-bench detection, detect_total_physical_ram_kb tests. - benchmark_compare.bats: assert delta percentages (+20.0%, -25.0%, 0.0%), test 0.0 t/s edge case, test per-directory error messages, test config change detection with specific field assertions. - log_metrics.bats: add assert_success, --help test, timestamp format validation. Remove unused mock sysfs setup. - common.bats: fix data_dir test, remove redundant assertion, add cleanup. - test_helper.sh: remove unused FIXTURES_DIR. - Remove empty tests/fixtures/ directory. 94 tests, all passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
53 lines
1.7 KiB
Bash
53 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
# Shared test helper — sets up mocked environment for BATS tests
|
|
|
|
BATS_SUPPORT="${BATS_SUPPORT:-$HOME/.local/share/bats-support}"
|
|
BATS_ASSERT="${BATS_ASSERT:-$HOME/.local/share/bats-assert}"
|
|
BATS_FILE="${BATS_FILE:-$HOME/.local/share/bats-file}"
|
|
|
|
load "$BATS_SUPPORT/load.bash"
|
|
load "$BATS_ASSERT/load.bash"
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "${BATS_TEST_FILENAME}")/.." && pwd)"
|
|
|
|
# Create a temporary mock sysfs tree for GPU detection tests
|
|
setup_mock_sysfs() {
|
|
MOCK_SYSFS="$(mktemp -d)"
|
|
local gpu_dir="$MOCK_SYSFS/class/drm/card0/device"
|
|
mkdir -p "$gpu_dir/hwmon/hwmon0"
|
|
|
|
echo "0x1002" > "$gpu_dir/vendor"
|
|
echo "0x1586" > "$gpu_dir/device"
|
|
echo "${MOCK_VRAM_TOTAL:-536870912}" > "$gpu_dir/mem_info_vram_total"
|
|
echo "${MOCK_VRAM_USED:-104857600}" > "$gpu_dir/mem_info_vram_used"
|
|
echo "${MOCK_GTT_TOTAL:-64424509440}" > "$gpu_dir/mem_info_gtt_total"
|
|
echo "${MOCK_GTT_USED:-209715200}" > "$gpu_dir/mem_info_gtt_used"
|
|
echo "${MOCK_GPU_BUSY:-5}" > "$gpu_dir/gpu_busy_percent"
|
|
echo "${MOCK_GPU_TEMP:-50000}" > "$gpu_dir/hwmon/hwmon0/temp1_input"
|
|
echo "${MOCK_GPU_POWER:-25000000}" > "$gpu_dir/hwmon/hwmon0/power1_average"
|
|
|
|
export GPU_SYSFS="$gpu_dir"
|
|
}
|
|
|
|
teardown_mock_sysfs() {
|
|
[[ -n "${MOCK_SYSFS:-}" ]] && rm -rf "$MOCK_SYSFS"
|
|
}
|
|
|
|
# Create a mock /proc/cmdline
|
|
setup_mock_cmdline() {
|
|
MOCK_PROC="$(mktemp -d)"
|
|
echo "${MOCK_CMDLINE:-BOOT_IMAGE=/boot/vmlinuz root=UUID=abc ro quiet}" > "$MOCK_PROC/cmdline"
|
|
}
|
|
|
|
teardown_mock_proc() {
|
|
[[ -n "${MOCK_PROC:-}" ]] && rm -rf "$MOCK_PROC"
|
|
}
|
|
|
|
# Source a lib file with PROJECT_ROOT set correctly
|
|
source_lib() {
|
|
local lib="$1"
|
|
# Disable color for predictable test output
|
|
export TERM=dumb
|
|
source "$PROJECT_ROOT/lib/$lib"
|
|
}
|