Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion hancore.shibumi.network/Service.qml
Original file line number Diff line number Diff line change
Expand Up @@ -540,9 +540,17 @@ Item {
if (!/^(?:\d+(?:\.\d*)?|\.\d+)$/.test(raw)) return
const value = Number(raw)
if (!isFinite(value) || value < 0) return
if (speedTestPhase !== "down" && speedTestPhase !== "up") return
// The backend streams one sample per second for the whole phase and the
// early samples land while the transfer is still ramping. Keep the peak so
// the reported figure reflects the link rather than whichever sample
// happened to arrive last before the phase timer fired.
const current = speedTestPhase === "down"
? speedTestDownloadMbps : speedTestUploadMbps
if (current !== "" && Number(current) >= value) return
const normalized = String(value)
if (speedTestPhase === "down") speedTestDownloadMbps = normalized
else if (speedTestPhase === "up") speedTestUploadMbps = normalized
else speedTestUploadMbps = normalized
}

function startSpeedTestPhase(phaseValue) {
Expand Down
26 changes: 26 additions & 0 deletions tests/fixtures/omarchy-network-speedtest-ramp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash

# Emits a ramping sample stream whose final value is not the peak, mirroring a
# real transfer that starts in TCP slow-start and dips before the phase ends.

set -euo pipefail

case "${1:-}" in
down) samples=(120 880 210) ;;
up) samples=(45 310 90) ;;
*)
printf 'unexpected speed-test phase\n' >&2
exit 2
;;
esac

trap 'exit 0' TERM INT

for value in "${samples[@]}"; do
printf '%s\n' "$value"
sleep 0.05
done

while true; do
sleep 0.1
done
3 changes: 2 additions & 1 deletion tests/network-plugin-regression.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ install -m 0755 "$repo_root/tests/fixtures/omarchy-network-speedtest" \
"$repo_root/tests/fixtures/omarchy-network-speedtest-fail" \
"$repo_root/tests/fixtures/omarchy-network-speedtest-empty" \
"$repo_root/tests/fixtures/omarchy-network-speedtest-malformed" \
"$repo_root/tests/fixtures/omarchy-network-speedtest-resistant" "$tmpdir/bin/"
"$repo_root/tests/fixtures/omarchy-network-speedtest-resistant" \
"$repo_root/tests/fixtures/omarchy-network-speedtest-ramp" "$tmpdir/bin/"
install -m 0755 "$repo_root/tests/fixtures/network-bin/omarchy-network-status" \
"$repo_root/tests/fixtures/network-bin/nmcli" "$tmpdir/bin/"

Expand Down
21 changes: 21 additions & 0 deletions tests/network-plugin-smoke.qml
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@ ShellRoot {
speedTestPhaseDuration: 10000
}

Network.Service {
id: rampSpeedService
bar: fakeBar
panelComponent: currentNetworkPanelComponent
speedTestExecutable: "omarchy-network-speedtest-ramp"
speedTestPhaseDuration: 1500
}

Loader {
id: immediateDestructionLoader
active: false
Expand Down Expand Up @@ -364,6 +372,19 @@ ShellRoot {
|| destructionSpeedLoader.item !== null)
return root.fail("active speed-test service survived Loader teardown")
if (root.destructionTicks < 140 || !root.restartContractPassed) return
if (!rampSpeedService.ready || !rampSpeedService.runSpeedTest())
return root.fail("ramping inline speed-test startup")
root.speedPhase = 11
return
}

if (root.speedPhase === 11) {
if (rampSpeedService.speedTestRunning) return
if (rampSpeedService.speedTestPhase !== ""
|| rampSpeedService.speedTestDownloadMbps !== "880"
|| rampSpeedService.speedTestUploadMbps !== "310"
|| rampSpeedService.speedTestError !== "")
return root.fail("ramping inline speed-test peak retention")
root.speedContractPassed = true
}
}
Expand Down