Files
AetherForge/agent/main_test.go
AetherForge ea6f54ad03 Expand test coverage across server, agent, and web; fix bugs found during audit.
Adds hundreds of unit/integration/e2e tests, fixes WS bcrypt auth, config merge, fleet analytics, agent schedule/log tail, and documents stale PROBLEMS items. Updates PROBLEMS.md, README, and test scripts; ignores local spread-kits and coverage dirs.
2026-05-31 01:13:58 -07:00

125 lines
3.0 KiB
Go

package main
import (
"io"
"log"
"os"
"path/filepath"
"strings"
"testing"
"crypto-miner-agent/config"
)
func TestShortIDLong(t *testing.T) {
if got := shortID("abcdef1234567890"); got != "abcdef12" {
t.Fatalf("shortID long = %q", got)
}
}
func TestShortIDShort(t *testing.T) {
if got := shortID("abc"); got != "abc" {
t.Fatalf("shortID short = %q", got)
}
}
func TestShortIDEmpty(t *testing.T) {
if got := shortID(""); got != "pending" {
t.Fatalf("shortID empty = %q", got)
}
}
func TestMustInstallPathUnknown(t *testing.T) {
cfg := config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{
InstallBase: "custom",
}}
if got := mustInstallPath(cfg); got != "unknown" {
t.Fatalf("mustInstallPath invalid cfg = %q, want unknown", got)
}
}
func TestMustInstallPathTemp(t *testing.T) {
cfg := config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{
InstallBase: "temp",
InstallRelativePath: "test-miner-install",
WorkerName: "w1",
BuildID: "build12345678",
}}
got := mustInstallPath(cfg)
if got == "unknown" || !strings.Contains(got, "test-miner-install") {
t.Fatalf("mustInstallPath temp = %q", got)
}
}
func TestSetupLoggingStealthDiscards(t *testing.T) {
prev := log.Writer()
t.Cleanup(func() { log.SetOutput(prev) })
cfg := config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{StealthMode: true, FileLogging: true}}
setupLogging(cfg)
if log.Writer() != io.Discard {
t.Fatal("stealth mode should discard log output")
}
}
func TestSetupLoggingFileLoggingDisabled(t *testing.T) {
prev := log.Writer()
t.Cleanup(func() { log.SetOutput(prev) })
cfg := config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{FileLogging: false}}
setupLogging(cfg)
if log.Writer() != io.Discard {
t.Fatal("file logging disabled should discard output")
}
}
func closeLogFileWriter() {
if f, ok := log.Writer().(*os.File); ok {
_ = f.Close()
}
}
func TestSetupLoggingEnvLogFile(t *testing.T) {
prev := log.Writer()
dir := t.TempDir()
logPath := filepath.Join(dir, "nested", "agent.log")
t.Setenv("MINER_LOG_FILE", logPath)
t.Cleanup(func() {
closeLogFileWriter()
log.SetOutput(prev)
_ = os.Unsetenv("MINER_LOG_FILE")
})
cfg := config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{FileLogging: true}}
setupLogging(cfg)
if log.Writer() == io.Discard {
t.Fatal("MINER_LOG_FILE should enable file logging")
}
if _, err := os.Stat(logPath); err != nil {
t.Fatalf("expected log file at %s: %v", logPath, err)
}
}
func TestRedirectLogCreatesFile(t *testing.T) {
prev := log.Writer()
dir := t.TempDir()
path := filepath.Join(dir, "logs", "redirect.log")
t.Cleanup(func() {
closeLogFileWriter()
log.SetOutput(prev)
})
redirectLog(path)
log.Print("redirect test line")
if _, err := os.Stat(path); err != nil {
t.Fatalf("redirectLog should create %s: %v", path, err)
}
data, err := os.ReadFile(path)
if err != nil {
t.Fatal(err)
}
if !strings.Contains(string(data), "redirect test line") {
t.Fatalf("log file contents: %q", data)
}
}