package api import ( "encoding/json" "testing" "crypto-miner-server/internal/db" ) func TestAuthResponseFleetRoleHintWhenEnabled(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = database.Close() }) hub := NewWSHub(database) hub.SetFleetSecret("test-secret") hub.SetServerPolicy(ServerPolicy{FleetRolesEnabled: true}) conn, _ := dialAgentWS(t, hub) resp := authAgentConn(t, conn, map[string]interface{}{ "agent_id": "agent-seed-aa", "fleet_secret": "test-secret", "wallet": "4" + repeatChar('C', 94), "hostname": "seed-host", "platform": "windows", "version": "test", "fleet_role": "auto", "seeder_mode": true, }) var payload map[string]interface{} if err := json.Unmarshal(resp.Payload, &payload); err != nil { t.Fatal(err) } if payload["success"] != true { t.Fatalf("auth failed: %v", payload["error"]) } hint, _ := payload["fleet_role_hint"].(string) if hint != "seeder" && hint != "miner" { t.Fatalf("expected fleet_role_hint, got %q", hint) } } func TestAuthResponseOmitsFleetRoleHintWhenDisabled(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = database.Close() }) hub := NewWSHub(database) hub.SetFleetSecret("test-secret") conn, _ := dialAgentWS(t, hub) resp := authAgentConn(t, conn, map[string]interface{}{ "agent_id": "agent-miner-1", "fleet_secret": "test-secret", "wallet": "4" + repeatChar('D', 94), "hostname": "miner-host", "platform": "windows", "version": "test", "fleet_role": "miner", }) var payload map[string]interface{} if err := json.Unmarshal(resp.Payload, &payload); err != nil { t.Fatal(err) } if _, ok := payload["fleet_role_hint"]; ok { t.Fatal("fleet_role_hint should be omitted when fleet roles disabled") } } func TestIngestFleetPressureSetsEmberwakeHeat(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } t.Cleanup(func() { _ = database.Close() }) hub := NewWSHub(database) b := map[string]interface{}{ "agent_id": "a1", "fleet_role": "miner", "hashrate_pressure": 0.75, } hub.ingestFleetPressure("a1", b) if b["emberwake_heat"] != 0.75 { t.Fatalf("broadcast heat=%v", b["emberwake_heat"]) } hub.mu.RLock() tel := hub.agentLiveTelemetry["a1"] hub.mu.RUnlock() if tel["emberwake_heat"] != 0.75 { t.Fatalf("stored heat=%v", tel["emberwake_heat"]) } }