94 lines
2.6 KiB
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)
|
|
}
|
|
}
|