Release validation: tests green, USB pack, fleet UX and API hardening.
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Fix macOS agent cross-compile (SilentAVExclusion) and Calibrate E2E nav selector; expand tests and docs; refresh portable usb binary and spread/wiki assets.
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"time"
|
||||
|
||||
"crypto-miner-server/internal/db"
|
||||
"crypto-miner-server/internal/models"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/gorilla/websocket"
|
||||
@@ -367,6 +368,52 @@ func TestPathTracerBuildClientConfig(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPathTracerStartResolvesAgentName(t *testing.T) {
|
||||
database, err := db.New(t.TempDir())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() { _ = database.Close() })
|
||||
|
||||
agentID := "trace-agent-named"
|
||||
if err := database.UpsertAgent(&models.Agent{
|
||||
ID: agentID,
|
||||
Name: "Edge Node Alpha",
|
||||
Status: "online",
|
||||
}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
hub := NewWSHub(database)
|
||||
handler := NewPathTracerHandler(hub)
|
||||
startPathTracerAgentResponder(t, hub, agentID, "NAMED_AGENT_PUB")
|
||||
// WS auth overwrites name with hostname; restore operator label for resolution test.
|
||||
if err := database.UpsertAgent(&models.Agent{ID: agentID, Name: "Edge Node Alpha", Status: "online"}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
body := `{"agent_ids":["` + agentID + `"]}`
|
||||
req := httptest.NewRequest(http.MethodPost, "/pathtrace/start", strings.NewReader(body))
|
||||
rec := httptest.NewRecorder()
|
||||
handler.Start(rec, req)
|
||||
if rec.Code != http.StatusOK {
|
||||
t.Fatalf("start status=%d body=%s", rec.Code, rec.Body.String())
|
||||
}
|
||||
|
||||
var startResp struct {
|
||||
Hops []HopInfo `json:"hops"`
|
||||
}
|
||||
if err := json.Unmarshal(rec.Body.Bytes(), &startResp); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(startResp.Hops) != 1 {
|
||||
t.Fatalf("expected 1 hop, got %d", len(startResp.Hops))
|
||||
}
|
||||
if startResp.Hops[0].AgentName != "Edge Node Alpha" {
|
||||
t.Fatalf("expected resolved agent name, got %q", startResp.Hops[0].AgentName)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPathTracerStartValidation(t *testing.T) {
|
||||
h := NewPathTracerHandler(NewWSHub(nil))
|
||||
req := httptest.NewRequest(http.MethodPost, "/pathtrace/start", bytes.NewReader([]byte(`{}`)))
|
||||
@@ -375,4 +422,20 @@ func TestPathTracerStartValidation(t *testing.T) {
|
||||
if rec.Code != http.StatusBadRequest {
|
||||
t.Fatalf("expected 400, got %d", rec.Code)
|
||||
}
|
||||
|
||||
dupBody := `{"agent_ids":["agent-a","agent-a"]}`
|
||||
req = httptest.NewRequest(http.MethodPost, "/pathtrace/start", strings.NewReader(dupBody))
|
||||
rec = httptest.NewRecorder()
|
||||
h.Start(rec, req)
|
||||
if rec.Code != http.StatusBadRequest {
|
||||
t.Fatalf("duplicate agent_ids: expected 400, got %d", rec.Code)
|
||||
}
|
||||
|
||||
offlineBody := `{"agent_ids":["offline-agent"]}`
|
||||
req = httptest.NewRequest(http.MethodPost, "/pathtrace/start", strings.NewReader(offlineBody))
|
||||
rec = httptest.NewRecorder()
|
||||
h.Start(rec, req)
|
||||
if rec.Code != http.StatusBadRequest {
|
||||
t.Fatalf("offline agent: expected 400, got %d body=%s", rec.Code, rec.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user