Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"crypto-miner-server/internal/epidemiology"
|
|
)
|
|
|
|
func TestEpidemiologyAuthFixOneShot(t *testing.T) {
|
|
hub := NewWSHub(nil)
|
|
hub.WireDefaultEpidemiologyReporter()
|
|
|
|
hub.observeEpidemiologyFromStats("agent-fix", epidemiology.StatsInput{
|
|
ChainExhausted: true,
|
|
SpreadStrain: "#aabbcc",
|
|
FailedMethods: []epidemiology.MethodFailure{
|
|
{Method: "exe_subprocess", Reason: "blocked"},
|
|
},
|
|
})
|
|
|
|
resp := map[string]interface{}{}
|
|
hub.attachEpidemiologyFix(resp, "agent-fix")
|
|
if _, ok := resp["epidemiology_fix"]; !ok {
|
|
t.Fatal("expected epidemiology_fix on auth pass")
|
|
}
|
|
raw, _ := json.Marshal(resp["epidemiology_fix"])
|
|
var fix epidemiology.AgentFix
|
|
if err := json.Unmarshal(raw, &fix); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if fix.AgentID != "agent-fix" || !fix.RestartChain {
|
|
t.Fatalf("fix=%+v", fix)
|
|
}
|
|
|
|
resp2 := map[string]interface{}{}
|
|
hub.attachEpidemiologyFix(resp2, "agent-fix")
|
|
if _, ok := resp2["epidemiology_fix"]; ok {
|
|
t.Fatal("fix should be consumed after first auth pass")
|
|
}
|
|
}
|
|
|
|
func TestEpidemiologySeerEventBroadcast(t *testing.T) {
|
|
hub := NewWSHub(nil)
|
|
var seerKind string
|
|
hub.SetEpidemiologyReporter(epidemiology.Reporter{
|
|
OnSeer: func(ev epidemiology.SeerEvent) {
|
|
seerKind = ev.Kind
|
|
hub.broadcastSeerEvent(ev)
|
|
},
|
|
})
|
|
hub.observeEpidemiologyFromStats("seer-agent", epidemiology.StatsInput{
|
|
ChainExhausted: true,
|
|
FailedMethods: []epidemiology.MethodFailure{
|
|
{Method: "container", Reason: "no runtime"},
|
|
},
|
|
})
|
|
if seerKind != "mining_interrupt" {
|
|
t.Fatalf("seer kind=%q", seerKind)
|
|
}
|
|
}
|