Files
AetherForge/agent/deploy/spread_status_test.go
AetherForge 1551bd5dad feat: Emberwake, Crucible phases, Linux agent, musical dashboard, e2e
Emberwake spread/waterhole UI, campaign DB, spread handler, spread-kit web publisher, and SPREAD_TECHNIQUES doc. Crucible Phase A-C: expanded ops, port-forward matrix, remote dir browser, crucible help/tests.

Linux agent hardening: credential vault, persistence audit, firewall/defender deploy, SMB spread status, CPU stats, screenshots/crypt/file-ops split. Docker compose and agent/server images with e2e validation script and docs.

Musical dashboard: ambient music player, hover SFX, SoundContext/AmbientMusicContext, steampunk polish. Public builds API, dropper handler updates, SessionGate and fleet UX. README and PROBLEMS.md refresh.
2026-06-04 21:53:31 -07:00

44 lines
1017 B
Go

package deploy
import (
"encoding/json"
"testing"
)
func TestSpreadStatusLifecycle(t *testing.T) {
beginSpreadSweep("ssh", 2)
recordSpreadAttempt("10.0.0.2", true, "")
recordSpreadAttempt("10.0.0.3", false, "auth failed")
raw := GetSpreadStatusJSON()
var snap spreadStatusSnapshot
if err := json.Unmarshal([]byte(raw), &snap); err != nil {
t.Fatal(err)
}
if snap.HostsTried != 2 {
t.Fatalf("hosts_tried = %d", snap.HostsTried)
}
if snap.Successes != 1 || snap.Errors != 1 {
t.Fatalf("successes=%d errors=%d", snap.Successes, snap.Errors)
}
if snap.InProgress {
t.Fatal("expected sweep finished")
}
if len(snap.Hosts) != 2 {
t.Fatalf("hosts len = %d", len(snap.Hosts))
}
}
func TestSpreadStatusEmptySweep(t *testing.T) {
beginSpreadSweep("smb_scm", 0)
finishSpreadSweepImmediate()
raw := GetSpreadStatusJSON()
var snap spreadStatusSnapshot
if err := json.Unmarshal([]byte(raw), &snap); err != nil {
t.Fatal(err)
}
if snap.InProgress {
t.Fatal("expected not in progress")
}
}