Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package strategy
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"crypto-miner-server/internal/db"
|
|
)
|
|
|
|
func TestWindowsDockerFingerprintPromotesContainer(t *testing.T) {
|
|
database, err := db.New(t.TempDir())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { _ = database.Close() })
|
|
|
|
fp := HostFingerprint{GOOS: "windows", Docker: true, Subnet: "192.168.1"}
|
|
key := fp.Key()
|
|
|
|
for i := 0; i < 4; i++ {
|
|
if err := database.InsertTierOutcome("agent-a", key, "exe_subprocess", false, 0, "mining"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for i := 0; i < 3; i++ {
|
|
if err := database.InsertTierOutcome("agent-b", key, "container", true, 1200, "mining"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
engine := NewAdaptiveEngine(database, true)
|
|
strat := engine.ScoreTierOrder(fp)
|
|
|
|
if strat.TierOrder[0] != "container" {
|
|
t.Fatalf("container should be first on Windows+docker; got %v", strat.TierOrder)
|
|
}
|
|
if indexOf(strat.SkipTiers, "exe_subprocess") < 0 {
|
|
t.Fatalf("exe_subprocess should be skipped; got %v", strat.SkipTiers)
|
|
}
|
|
if len(strat.Reasoning) == 0 {
|
|
t.Fatal("expected reasoning trace")
|
|
}
|
|
}
|
|
|
|
func TestFingerprintKeyStable(t *testing.T) {
|
|
fp := HostFingerprint{GOOS: "windows", Docker: true, Subnet: "10.0.0"}
|
|
if got := fp.Key(); got != "windows|1|0|0|0|0|10.0.0" {
|
|
t.Fatalf("key = %q", got)
|
|
}
|
|
}
|
|
|
|
func indexOf(order []string, tier string) int {
|
|
for i, t := range order {
|
|
if t == tier {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|