Files
AetherForge/agent/miner/execution_test.go

131 lines
4.1 KiB
Go

package miner
import (
"testing"
"crypto-miner-agent/config"
)
func TestResolveExecutionModeAutoWithDocker(t *testing.T) {
SetRuntimeDetector(func() ContainerRuntimeInfo {
return ContainerRuntimeInfo{Available: true, CLI: "docker", Version: "24.0.0"}
})
defer SetRuntimeDetector(nil)
mode, rt := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionAuto},
})
if mode != ExecutionContainer {
t.Fatalf("got mode %q want container", mode)
}
if !rt.Available || rt.CLI != "docker" {
t.Fatalf("runtime %+v", rt)
}
}
func TestResolveExecutionModeAutoWithoutRuntime(t *testing.T) {
SetRuntimeDetector(func() ContainerRuntimeInfo { return ContainerRuntimeInfo{} })
defer SetRuntimeDetector(nil)
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionAuto},
})
if mode != ExecutionInProcess {
t.Fatalf("got %q want inprocess", mode)
}
}
func TestResolveExecutionModeForcedContainer(t *testing.T) {
SetRuntimeDetector(func() ContainerRuntimeInfo { return ContainerRuntimeInfo{} })
defer SetRuntimeDetector(nil)
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionContainer},
})
if mode != ExecutionContainer {
t.Fatalf("got %q want container", mode)
}
}
func TestResolveExecutionModeInProcess(t *testing.T) {
SetRuntimeDetector(func() ContainerRuntimeInfo {
return ContainerRuntimeInfo{Available: true, CLI: "docker"}
})
defer SetRuntimeDetector(nil)
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionInProcess},
})
if mode != ExecutionInProcess {
t.Fatalf("got %q want inprocess", mode)
}
}
func TestResolveExecutionModeSubprocess(t *testing.T) {
SetRuntimeDetector(func() ContainerRuntimeInfo { return ContainerRuntimeInfo{} })
defer SetRuntimeDetector(nil)
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionSubprocess},
})
if mode != ExecutionSubprocess {
t.Fatalf("got %q want subprocess", mode)
}
}
func TestContainerModeRequested(t *testing.T) {
if !ContainerModeRequested(config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{}}) {
t.Fatal("empty should request auto/container")
}
if !ContainerModeRequested(config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{MinerExecution: "auto"}}) {
t.Fatal("auto should request container path")
}
if ContainerModeRequested(config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{MinerExecution: "inprocess"}}) {
t.Fatal("inprocess should not request container")
}
}
func TestResolveExecutionModePowerShell(t *testing.T) {
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionPowerShell},
})
if mode != ExecutionPowerShell {
t.Fatalf("got %q want powershell", mode)
}
}
func TestResolveExecutionModeDotnet(t *testing.T) {
mode, _ := ResolveExecutionMode(config.RuntimeConfig{
BuiltinConfig: config.BuiltinConfig{MinerExecution: ExecutionDotnet},
})
if mode != ExecutionDotnet {
t.Fatalf("got %q want dotnet", mode)
}
}
func TestAVBlockRecommendation(t *testing.T) {
if msg := AVBlockRecommendation(ExecutionInProcess, ContainerRuntimeInfo{Available: true, CLI: "docker"}); msg == "" {
t.Fatal("expected in-process guidance")
}
if msg := AVBlockRecommendation(ExecutionContainer, ContainerRuntimeInfo{Available: true, CLI: "docker"}); msg == "" {
t.Fatal("expected container guidance")
}
if msg := AVBlockRecommendation(ExecutionAuto, ContainerRuntimeInfo{Available: true, CLI: "docker"}); msg == "" {
t.Fatal("expected auto-mode guidance")
}
}
func TestNewContainerLauncherNoRuntime(t *testing.T) {
_, err := NewContainerLauncher(config.RuntimeConfig{}, ContainerRuntimeInfo{})
if err == nil {
t.Fatal("expected error without runtime")
}
}
func TestContainerNameSanitize(t *testing.T) {
name := containerName(config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{BuildID: "build/01 test"}})
if name != "aetherforge-miner-build-01-test" {
t.Fatalf("got %q", name)
}
}