mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 21:27:02 +01:00
Shell tests went red on my last push. test_network_diagnostics.bats sourced its scripts through $REPO_DIR/scripts/diagnostics, a level the flatten removed, so setup() failed and all 30 tests errored. Latent rather than new: the previous run was green only because ci-mirror aborted before the bats stage. Fixing the concurrency OOM let the gate reach this suite for the first time since the flatten. Grepped the tree for the removed scripts/ and single_use/ levels; this was the last one in tracked code. Also rewrites the two handoff docs around the units that remain. CI_GREEN_SKIP=1 because this commit is the fix for the red baseline. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
156 lines
4.3 KiB
Bash
Executable File
156 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bats
|
|
# Unit tests for the pure helpers in diagnostics/.
|
|
#
|
|
# Requires: bats (extra/bats). Run with:
|
|
# bats linux_configuration/tests/test_network_diagnostics.bats
|
|
#
|
|
# Only the arithmetic and classification logic is covered. The sampling loops
|
|
# are deliberately untested: they read live NIC counters and sleep in real
|
|
# time, so testing them would assert against mocks rather than behaviour. The
|
|
# helpers below are where every off-by-one actually lives.
|
|
|
|
setup() {
|
|
REPO_DIR="$(cd -- "$(dirname -- "$BATS_TEST_FILENAME")/.." && pwd)"
|
|
DIAG_DIR="$REPO_DIR/diagnostics"
|
|
# Both scripts guard main() behind a BASH_SOURCE check, so sourcing them
|
|
# loads the helpers without starting a measurement run.
|
|
# shellcheck source=/dev/null
|
|
source "$DIAG_DIR/steam-download-duty.sh"
|
|
# shellcheck source=/dev/null
|
|
source "$DIAG_DIR/line-speed-probe.sh"
|
|
}
|
|
|
|
# --- bytes_to_mbps ---------------------------------------------------------
|
|
|
|
@test "bytes_to_mbps: 125MB in 1s is exactly 1000 Mbps" {
|
|
[ "$(bytes_to_mbps 125000000 1)" -eq 1000 ]
|
|
}
|
|
|
|
@test "bytes_to_mbps: averages over a multi-second window" {
|
|
[ "$(bytes_to_mbps 125000000 10)" -eq 100 ]
|
|
}
|
|
|
|
@test "bytes_to_mbps: no traffic yields zero" {
|
|
[ "$(bytes_to_mbps 0 5)" -eq 0 ]
|
|
}
|
|
|
|
@test "bytes_to_mbps: a zero-second window returns 0 instead of dividing by zero" {
|
|
[ "$(bytes_to_mbps 125000000 0)" -eq 0 ]
|
|
}
|
|
|
|
# --- duty_pct --------------------------------------------------------------
|
|
|
|
@test "duty_pct: reproduces the measured Steam run (22s of 60)" {
|
|
[ "$(duty_pct 22 60)" -eq 36 ]
|
|
}
|
|
|
|
@test "duty_pct: fully active is 100" {
|
|
[ "$(duty_pct 60 60)" -eq 100 ]
|
|
}
|
|
|
|
@test "duty_pct: fully stalled is 0" {
|
|
[ "$(duty_pct 0 60)" -eq 0 ]
|
|
}
|
|
|
|
@test "duty_pct: zero total returns 0 instead of dividing by zero" {
|
|
[ "$(duty_pct 5 0)" -eq 0 ]
|
|
}
|
|
|
|
# --- mean_of ---------------------------------------------------------------
|
|
|
|
@test "mean_of: averages several samples" {
|
|
[ "$(mean_of 100 200 300)" -eq 200 ]
|
|
}
|
|
|
|
@test "mean_of: no samples yields zero" {
|
|
[ "$(mean_of)" -eq 0 ]
|
|
}
|
|
|
|
@test "mean_of: a single sample is itself" {
|
|
[ "$(mean_of 7)" -eq 7 ]
|
|
}
|
|
|
|
@test "mean_of: integer division truncates rather than rounding" {
|
|
[ "$(mean_of 2 3)" -eq 2 ]
|
|
}
|
|
|
|
# --- classify --------------------------------------------------------------
|
|
|
|
@test "classify: high duty means the link is the ceiling (depotdownloader run)" {
|
|
[ "$(classify 97 712)" = "LINK_LIMITED" ]
|
|
}
|
|
|
|
@test "classify: duty boundary at 80 counts as link-limited" {
|
|
[ "$(classify 80 50)" = "LINK_LIMITED" ]
|
|
}
|
|
|
|
@test "classify: low duty with fast bursts is the Steam-client signature" {
|
|
[ "$(classify 36 474)" = "CLIENT_IDLE" ]
|
|
}
|
|
|
|
@test "classify: burst boundary at 400 counts as client-idle" {
|
|
[ "$(classify 79 400)" = "CLIENT_IDLE" ]
|
|
}
|
|
|
|
@test "classify: slow bursts and low duty is neither diagnosis" {
|
|
[ "$(classify 30 399)" = "MIXED" ]
|
|
}
|
|
|
|
# --- sustained_of ----------------------------------------------------------
|
|
|
|
@test "sustained_of: discards the first half (slow start and burst allowance)" {
|
|
[ "$(sustained_of 500 500 100 100)" -eq 100 ]
|
|
}
|
|
|
|
@test "sustained_of: odd counts keep 2 of 3, dropping only the first" {
|
|
[ "$(sustained_of 10 20 30)" -eq 25 ]
|
|
}
|
|
|
|
@test "sustained_of: a single sample is itself" {
|
|
[ "$(sustained_of 5)" -eq 5 ]
|
|
}
|
|
|
|
@test "sustained_of: no samples yields zero" {
|
|
[ "$(sustained_of)" -eq 0 ]
|
|
}
|
|
|
|
# --- max_of ----------------------------------------------------------------
|
|
|
|
@test "max_of: finds the peak" {
|
|
[ "$(max_of 100 986 400)" -eq 986 ]
|
|
}
|
|
|
|
@test "max_of: no samples yields zero" {
|
|
[ "$(max_of)" -eq 0 ]
|
|
}
|
|
|
|
@test "max_of: a single sample is itself" {
|
|
[ "$(max_of 42)" -eq 42 ]
|
|
}
|
|
|
|
# --- verdict_for -----------------------------------------------------------
|
|
|
|
@test "verdict_for: the depotdownloader result reads as a healthy line" {
|
|
[ "$(verdict_for 696)" = "LINE_OK" ]
|
|
}
|
|
|
|
@test "verdict_for: 600 is the healthy boundary" {
|
|
[ "$(verdict_for 600)" = "LINE_OK" ]
|
|
}
|
|
|
|
@test "verdict_for: just below the healthy boundary is partial" {
|
|
[ "$(verdict_for 599)" = "PARTIAL" ]
|
|
}
|
|
|
|
@test "verdict_for: 350 is the partial boundary" {
|
|
[ "$(verdict_for 350)" = "PARTIAL" ]
|
|
}
|
|
|
|
@test "verdict_for: just below the partial boundary is slow" {
|
|
[ "$(verdict_for 349)" = "SLOW" ]
|
|
}
|
|
|
|
@test "verdict_for: the measured Steam effective rate reads as slow" {
|
|
[ "$(verdict_for 170)" = "SLOW" ]
|
|
}
|