Files
vdi-cloud/platform/internal/server/gpu_agent_test.go
T

51 lines
1.7 KiB
Go

package server
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestGPUAgentHealthIsAuthenticatedAndVisibleInInventory(t *testing.T) {
f := newFixture(t)
f.server.Config.GPUAgentToken = "agent-token"
fakeGPUPVE(t, f, "normal")
status, out := f.request("POST", "/gpu-agent/health", "", map[string]any{
"node": "node-a",
"samples": []map[string]any{{
"address": "0000:01:00.0", "temperatureC": 61.5, "utilizationPercent": 42.0,
"memoryUsedBytes": 1024, "memoryTotalBytes": 4096, "driver": "nvidia", "driverBinding": "bound",
}},
}, "")
// f.request cannot attach the collector header, so the route must reject it.
expect(t, 401, status, out)
body, _ := json.Marshal(map[string]any{
"node": "node-a", "samples": []map[string]any{{"address": "0000:01:00.0", "temperatureC": 61.5, "driver": "nvidia", "driverBinding": "bound"}},
})
r := httptest.NewRequest(http.MethodPost, "/api/v1/gpu-agent/health", bytes.NewReader(body))
r.Header.Set("Content-Type", "application/json")
r.Header.Set("X-GPU-Agent-Token", "agent-token")
w := httptest.NewRecorder()
f.server.Router.ServeHTTP(w, r)
expect(t, 202, w.Code, w.Body.String())
status, out = f.request("GET", "/resources/gpus?node=node-a", f.login("admin"), nil, "")
expect(t, 200, status, out)
items := out["items"].([]any)
var found bool
for _, raw := range items {
item := raw.(map[string]any)
if item["address"] == "0000:01:00.0" {
health := item["health"].(map[string]any)
found = health["status"] == "collected" && health["driverBinding"] == "bound" && health["temperatureC"] == 61.5 && health["driver"] == "nvidia"
}
}
if !found {
t.Fatal("ingested GPU health was not visible in inventory", out)
}
}