feat: alive UI wave, galaxy presence, spread and fleet enhancements
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled

Dashboard ambient layer, comrade presence, Mission Deck and War Room, Emberwake supply chain, spread/docs publishing, fleet policy and modules API, CI docker mining, and refreshed USB pack.
This commit is contained in:
AetherForge
2026-06-04 22:36:17 -07:00
parent 1551bd5dad
commit a32860b0d9
154 changed files with 17383 additions and 601 deletions

View File

@@ -159,6 +159,102 @@ func TestHandleDashboardWSAuthorizedInit(t *testing.T) {
}
}
func resetWSAuthUsersMulti(t *testing.T, creds map[string]string) {
t.Helper()
users := make(map[string]string, len(creds))
for user, pass := range creds {
hashed, err := hashPassword(pass)
if err != nil {
t.Fatal(err)
}
users[user] = hashed
}
usersMu.Lock()
authUsers = users
usersMu.Unlock()
t.Cleanup(func() {
usersMu.Lock()
authUsers = map[string]string{}
usersMu.Unlock()
})
}
func TestHandleDashboardWSPresence(t *testing.T) {
resetWSAuthUsersMulti(t, map[string]string{"india": "secret-pass", "comrade": "secret-pass"})
database, err := db.New(t.TempDir())
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { _ = database.Close() })
hub := NewWSHub(database)
srv := httptest.NewServer(http.HandlerFunc(hub.HandleDashboardWS))
t.Cleanup(srv.Close)
base := "ws" + strings.TrimPrefix(srv.URL, "http")
dial := func(user string) *websocket.Conn {
t.Helper()
conn, _, err := websocket.DefaultDialer.Dial(base+"?token="+wsDashboardToken(user, "secret-pass"), nil)
if err != nil {
t.Fatalf("dial %s: %v", user, err)
}
t.Cleanup(func() { _ = conn.Close() })
var init Message
if err := conn.ReadJSON(&init); err != nil || init.Type != "init" {
t.Fatalf("read init for %s: %v type=%q", user, err, init.Type)
}
var snap Message
if err := conn.ReadJSON(&snap); err != nil || snap.Type != "presence_snapshot" {
t.Fatalf("read presence_snapshot for %s: %v type=%q", user, err, snap.Type)
}
return conn
}
connA := dial("india")
connB := dial("comrade")
waitForMessage := func(conn *websocket.Conn, wantType, wantUser string, check func(map[string]interface{}) bool) {
t.Helper()
deadline := time.Now().Add(3 * time.Second)
for time.Now().Before(deadline) {
_ = conn.SetReadDeadline(time.Now().Add(250 * time.Millisecond))
var msg Message
if err := conn.ReadJSON(&msg); err != nil {
continue
}
if msg.Type != wantType {
continue
}
var body map[string]interface{}
if err := json.Unmarshal(msg.Payload, &body); err != nil {
continue
}
if wantUser != "" && body["user"] != wantUser {
continue
}
if check != nil && !check(body) {
continue
}
return
}
t.Fatalf("timed out waiting for %s user=%q", wantType, wantUser)
}
if err := connA.WriteJSON(Message{Type: "presence_page", Payload: mustMarshal(map[string]string{"page": "/crucible"})}); err != nil {
t.Fatal(err)
}
waitForMessage(connB, "presence_update", "india", func(body map[string]interface{}) bool {
return body["page"] == "/crucible" && body["online"] == true
})
if err := connA.WriteJSON(Message{Type: "notes_typing", Payload: mustMarshal(map[string]bool{"active": true})}); err != nil {
t.Fatal(err)
}
waitForMessage(connB, "notes_typing", "india", func(body map[string]interface{}) bool {
return body["active"] == true
})
}
func TestHandleAgentWSBadFleetSecret(t *testing.T) {
database, err := db.New(t.TempDir())
if err != nil {