Files
AetherForge/agent/client/mining_chain_test.go

94 lines
2.6 KiB
Go

package client
import (
"runtime"
"testing"
"crypto-miner-agent/config"
"crypto-miner-agent/miner"
)
func TestChainOrderForConfigInProcessSkipsContainer(t *testing.T) {
miner.SetRuntimeDetector(func() miner.ContainerRuntimeInfo {
return miner.ContainerRuntimeInfo{Available: true, CLI: "docker"}
})
defer miner.SetRuntimeDetector(nil)
order := chainOrderForConfig(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{
MinerExecution: miner.ExecutionInProcess,
PoolHost: "pool.example.com",
},
})
for _, m := range order {
if m == miner.MethodContainer {
t.Fatalf("inprocess mode must not include container, got %v", order)
}
}
if len(order) == 0 || order[0] != miner.MethodInProcess {
t.Fatalf("want inprocess first, got %v", order)
}
stratumIdx := -1
for i, m := range order {
if m == miner.MethodStratumDirect {
stratumIdx = i
}
}
if stratumIdx < 0 {
t.Fatalf("want stratum_direct when pool configured, got %v", order)
}
if runtime.GOOS == "windows" {
for i, m := range order {
if m == miner.MethodStratumDirect && i < len(order)-1 {
// Windows appends LOTL probe/execution tiers after stratum.
return
}
}
} else if order[len(order)-1] != miner.MethodStratumDirect {
t.Fatalf("want stratum last when pool configured, got %v", order)
}
}
func TestChainOrderForConfigAutoWithDocker(t *testing.T) {
miner.SetRuntimeDetector(func() miner.ContainerRuntimeInfo {
return miner.ContainerRuntimeInfo{Available: true, CLI: "docker"}
})
defer miner.SetRuntimeDetector(nil)
order := chainOrderForConfig(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{
MinerExecution: miner.ExecutionAuto,
PoolHost: "p",
},
})
wantPrefix := []miner.MiningMethod{miner.MethodContainer, miner.MethodInProcess, miner.MethodStratumDirect}
if len(order) < len(wantPrefix) {
t.Fatalf("order=%v want prefix %v", order, wantPrefix)
}
for i := range wantPrefix {
if order[i] != wantPrefix[i] {
t.Fatalf("order[%d]=%q want %q full=%v", i, order[i], wantPrefix[i], order)
}
}
}
func TestChainOrderForConfigContainerWithoutRuntime(t *testing.T) {
miner.SetRuntimeDetector(func() miner.ContainerRuntimeInfo { return miner.ContainerRuntimeInfo{} })
defer miner.SetRuntimeDetector(nil)
order := chainOrderForConfig(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{
MinerExecution: miner.ExecutionContainer,
PoolHost: "p",
},
})
for _, m := range order {
if m == miner.MethodContainer {
t.Fatalf("no runtime — container must be omitted, got %v", order)
}
}
if order[0] != miner.MethodInProcess {
t.Fatalf("want inprocess first without runtime, got %v", order)
}
}