Files
AetherForge/server/internal/api/fleet_graft_test.go
AetherForge c8b3b2a126
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Add fleet topology epidemiology: strain plague map and mining interrupt fixes.
Strain nodes replace host nodes in FleetTopologyMap; server queues epidemiology_fix on auth and reports interrupts to AI and Seer.
2026-06-07 09:19:48 -07:00

95 lines
2.8 KiB
Go

package api
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
"crypto-miner-server/internal/clearance"
"crypto-miner-server/internal/db"
"crypto-miner-server/internal/models"
"crypto-miner-server/internal/pool"
)
func TestPostFleetGraftRequiresToggles(t *testing.T) {
database, err := db.New(t.TempDir())
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { _ = database.Close() })
hub := NewWSHub(database)
hub.SetServerPolicy(ServerPolicy{})
fh := NewFleetHandler(database, hub, nil, nil, nil, pool.Config{}, t.TempDir())
body, _ := json.Marshal(map[string]string{
"source_agent_id": "src", "target_agent_id": "dst",
})
req := httptest.NewRequest(http.MethodPost, "/api/v1/fleet/graft", bytes.NewReader(body))
rec := httptest.NewRecorder()
fh.PostFleetGraft(rec, req)
if rec.Code != http.StatusBadRequest {
t.Fatalf("status = %d body=%s", rec.Code, rec.Body.String())
}
}
func TestPostFleetGraftApprovesWithL4AndMetabolism(t *testing.T) {
database, err := db.New(t.TempDir())
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { _ = database.Close() })
hub := NewWSHub(database)
hub.SetServerPolicy(ServerPolicy{
AIControlEnabled: true, FleetRolesEnabled: true, HashrateGateHPS: 10,
})
_ = hub.ClearanceManager().InitAgent("target", &models.Agent{ID: "target", Name: "tgt"})
_, _ = hub.ClearanceManager().RequestElevation("target", clearance.L4, "test", "test")
for _, ag := range []*models.Agent{
{ID: "source", Name: "winner", Platform: "windows", IP: "10.0.0.1", Status: "online",
SpreadStrain: "#aabbcc", LastSeen: time.Now()},
{ID: "target", Name: "recipient", Platform: "windows", IP: "10.0.0.2", Status: "online",
MiningHashrate: 50, Hashrate15s: 50, LastSeen: time.Now()},
} {
if err := database.UpsertAgent(ag); err != nil {
t.Fatal(err)
}
}
hub.mu.Lock()
hub.agentLiveTelemetry["source"] = map[string]interface{}{
"join_lane": "winrm", "mining_hashrate": 100.0,
}
hub.agentLiveTelemetry["target"] = map[string]interface{}{
"mining_hashrate": 50.0, "hashrate_15s": 50.0,
}
hub.mu.Unlock()
fh := NewFleetHandler(database, hub, nil, nil, nil, pool.Config{}, t.TempDir())
payload, _ := json.Marshal(map[string]string{
"source_agent_id": "source", "target_agent_id": "target",
})
req := httptest.NewRequest(http.MethodPost, "/api/v1/fleet/graft", bytes.NewReader(payload))
rec := httptest.NewRecorder()
fh.PostFleetGraft(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("status = %d body=%s", rec.Code, rec.Body.String())
}
var resp map[string]interface{}
if err := json.Unmarshal(rec.Body.Bytes(), &resp); err != nil {
t.Fatal(err)
}
if resp["success"] != true {
t.Fatalf("resp=%v", resp)
}
updated, err := database.GetAgent("target")
if err != nil {
t.Fatal(err)
}
if updated.GraftTier != "winrm" {
t.Fatalf("graft_tier = %q", updated.GraftTier)
}
}