mirror of
https://github.com/henrygd/beszel.git
synced 2026-09-26 19:37:47 +02:00
Stats.WiFi is now map[string]int8 (json "wf") holding only available RSSI readings; SSID and unavailable signals stay in Info.WiFi. Averages are rounded to whole dBm. Wi-Fi is collected only on the default 60s interval; real-time requests reuse the last snapshot to avoid spawning osascript / dumping the BSS cache every second.
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package wifi
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/fxamacker/cbor/v2"
|
|
"github.com/henrygd/beszel/internal/entities/system"
|
|
)
|
|
|
|
func TestSSIDWireSafety(t *testing.T) {
|
|
for _, tc := range []struct{ input, want string }{
|
|
{"home", "home"}, {"网络 café", "网络 café"}, {"", ""},
|
|
{"raw\xffssid", ""}, {"truncated\xe2\x82", ""},
|
|
} {
|
|
t.Run(tc.input, func(t *testing.T) {
|
|
ssid := validSSID(tc.input)
|
|
if ssid != tc.want {
|
|
t.Fatalf("got %q, want %q", ssid, tc.want)
|
|
}
|
|
signal := -50.0
|
|
payload := map[string]system.WiFi{"wlan0": {SSID: ssid, Signal: &signal}}
|
|
wire, err := cbor.Marshal(payload)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var decoded map[string]system.WiFi
|
|
if err := cbor.Unmarshal(wire, &decoded); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if decoded["wlan0"].Signal == nil || *decoded["wlan0"].Signal != signal || decoded["wlan0"].SSID != tc.want {
|
|
t.Fatal(decoded)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestSignals(t *testing.T) {
|
|
strong, weak, rounded := -40.0, -200.0, -52.6
|
|
got := Signals(map[string]system.WiFi{
|
|
"wlan0": {SSID: "home", Signal: &strong},
|
|
"wlan1": {Signal: &weak},
|
|
"wlan2": {Signal: &rounded},
|
|
"wlan3": {SSID: "no rssi"},
|
|
})
|
|
want := map[string]int8{"wlan0": -40, "wlan1": -128, "wlan2": -53}
|
|
if len(got) != len(want) {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
for id, signal := range want {
|
|
if got[id] != signal {
|
|
t.Fatalf("got %v, want %v", got, want)
|
|
}
|
|
}
|
|
if Signals(map[string]system.WiFi{"wlan0": {}}) != nil || Signals(nil) != nil {
|
|
t.Fatal("expected nil without available readings")
|
|
}
|
|
}
|