Ship live alerts, pool status, AI monitor, remote agent commands, build manager, and uninstall flow; wire Calibrate settings (WS ping, pool traffic log, retention limits) at runtime and exclude server/data from git.
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package api
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"crypto-miner-server/internal/db"
|
|
"crypto-miner-server/internal/ollama"
|
|
)
|
|
|
|
func TestHandleReportSingleAndArray(t *testing.T) {
|
|
database, err := db.New(t.TempDir())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer database.Close()
|
|
|
|
h := NewAIHandler(database)
|
|
|
|
single := ollama.Report{
|
|
AgentID: "agent-1",
|
|
Tool: "sleep",
|
|
Success: true,
|
|
Output: "ok",
|
|
}
|
|
body, _ := json.Marshal(single)
|
|
req := httptest.NewRequest(http.MethodPost, "/api/v1/agent/report", bytes.NewReader(body))
|
|
w := httptest.NewRecorder()
|
|
h.HandleReport(w, req)
|
|
if w.Code != http.StatusOK {
|
|
t.Fatalf("single report status %d body %s", w.Code, w.Body.String())
|
|
}
|
|
|
|
arr := []ollama.Report{{
|
|
AgentID: "agent-2",
|
|
Tool: "check_log",
|
|
Success: false,
|
|
Output: "fail",
|
|
}}
|
|
body, _ = json.Marshal(arr)
|
|
req = httptest.NewRequest(http.MethodPost, "/api/v1/agent/report", bytes.NewReader(body))
|
|
w = httptest.NewRecorder()
|
|
h.HandleReport(w, req)
|
|
if w.Code != http.StatusOK {
|
|
t.Fatalf("array report status %d body %s", w.Code, w.Body.String())
|
|
}
|
|
|
|
activity := h.ActivitySnapshot()
|
|
if len(activity) < 2 {
|
|
t.Fatalf("expected activity entries, got %d", len(activity))
|
|
}
|
|
}
|
|
|
|
func TestEstimateXMRPerDay(t *testing.T) {
|
|
out := EstimateXMRPerDay(3_000_000_000)
|
|
xmr, ok := out["xmr_per_day"].(float64)
|
|
if !ok || xmr <= 0 {
|
|
t.Fatalf("expected positive xmr estimate at network hashrate, got %v", out)
|
|
}
|
|
}
|