Files
AetherForge/server/internal/builder/estimate_test.go
AetherForge 8466c7aa9b fix: 2026-06-04 audit pass — README, USB pack, multi-area fixes
WS ticket dashboard auth, builder universal signing/size limits/fusion obfuscation/dropper bundles, Path Tracer WireGuard topology, SessionGate degraded mode and download timeouts, server bootstrap (data dir, cloudflared dedupe, config port precedence), agent mesh/miner/spread fixes. README refreshed; usb bundle repacked; PROBLEMS.md audit log updated.
2026-06-04 20:41:44 -07:00

233 lines
7.3 KiB
Go

package builder
import (
"path/filepath"
"strings"
"testing"
"time"
"crypto-miner-server/internal/db"
"crypto-miner-server/internal/models"
)
func TestEstimateFusionBuildTotals(t *testing.T) {
h := &Handler{
dataDir: t.TempDir(),
projectRoot: t.TempDir(),
}
req := &BuildRequest{
FusionEnabled: true,
FusionOutputName: "MyApp.exe",
FusionMediaMode: "embedded",
OutputDir: "exports",
Obfuscate: true,
}
got := h.estimateFusionBuild(req, "", 5*1024*1024, "MyApp.exe")
if got.PrepBytes != 5*1024*1024 {
t.Fatalf("prep bytes: got %d", got.PrepBytes)
}
if got.EstimatedTotalBytes <= got.PrepBytes {
t.Fatalf("embedded total should exceed prep: %d", got.EstimatedTotalBytes)
}
if got.OutputFileName != "MyApp.exe" {
t.Fatalf("output name: %s", got.OutputFileName)
}
if got.ExportPath == "" {
t.Fatal("expected export path")
}
}
func TestEstimateFusionBuildFilePaired(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{
FusionEnabled: true,
FusionPayloadKind: "file",
FusionMediaMode: "paired",
}
got := h.estimateFusionBuild(req, "", 100*1024*1024, "movie.mkv")
if got.EstimatedTotalBytes >= 100*1024*1024+defaultWorkerBytes {
t.Fatalf("paired file should not add full prep to total: %d", got.EstimatedTotalBytes)
}
if got.ExportPath == "" {
t.Fatal("expected export path for paired file")
}
}
func TestEstimateFusionBuildFileEmbedded(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{
FusionEnabled: true,
FusionPayloadKind: "file",
FusionMediaMode: "embedded",
}
prepSize := int64(50 * 1024 * 1024)
got := h.estimateFusionBuild(req, "", prepSize, "movie.mkv")
if got.EstimatedTotalBytes <= prepSize {
t.Fatalf("embedded file total should include prep: %d", got.EstimatedTotalBytes)
}
}
func TestEstimateFusionBuildGarbleNote(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir(), policy: BuildPolicy{DefaultObfuscate: true}}
req := &BuildRequest{FusionEnabled: true, Obfuscate: true}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
found := false
for _, n := range got.Notes {
if strings.Contains(n, "Garble") {
found = true
break
}
}
if !found {
t.Fatal("expected garble note when obfuscate requested without garble path")
}
}
func TestEstimateWorkerBytesDefault(t *testing.T) {
h := &Handler{}
if got := h.estimateWorkerBytes(); got != defaultWorkerBytes {
t.Fatalf("default worker bytes: %d", got)
}
}
func TestEstimateFusionBuildSignNote(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{FusionEnabled: true, SignBuild: true}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
found := false
for _, n := range got.Notes {
if strings.Contains(n, "sign") || strings.Contains(n, "Sign") || strings.Contains(n, "certificate") {
found = true
break
}
}
if !found {
t.Fatal("expected signing note when SignBuild without cert configured")
}
}
func TestEstimateFusionBuildDetectKindFromPrepPath(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{FusionEnabled: true, FusionMediaMode: "embedded"}
prep := filepath.Join(t.TempDir(), "payload.exe")
got := h.estimateFusionBuild(req, prep, 1024, "payload.exe")
if got.EstimatedTotalBytes <= 1024 {
t.Fatalf("embedded exe payload should add prep size: %d", got.EstimatedTotalBytes)
}
}
func TestEstimateFusionBuildDefaultRunnerName(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: "."}
req := &BuildRequest{FusionEnabled: true}
got := h.estimateFusionBuild(req, "", 0, "quarterly.pdf")
if got.OutputFileName == "" || !strings.HasSuffix(strings.ToLower(got.OutputFileName), ".exe") {
t.Fatalf("expected default runner .exe name, got %q", got.OutputFileName)
}
}
func TestEstimateFusionBuildOutputDirInvalid(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{FusionEnabled: true, OutputDir: "../escape"}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
for _, n := range got.Notes {
if strings.Contains(n, "Secondary export") {
t.Fatal("invalid output_dir should not add secondary export note")
}
}
}
func TestEstimateFusionBuildOutputDirSecondary(t *testing.T) {
root := t.TempDir()
h := &Handler{dataDir: t.TempDir(), projectRoot: root}
req := &BuildRequest{FusionEnabled: true, FusionPayloadKind: "file", OutputDir: "exports"}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
found := false
for _, n := range got.Notes {
if strings.Contains(n, "Secondary export") {
found = true
break
}
}
if !found {
t.Fatal("expected secondary export note for valid output_dir")
}
}
func TestEstimateFusionBuildNonVideoUsesOutputLabel(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: t.TempDir()}
req := &BuildRequest{FusionEnabled: true, FusionOutputName: "CustomRunner.exe"}
got := h.estimateFusionBuild(req, "", 1024, "prep.pdf")
if !strings.Contains(got.ProjectRootPath, "CustomRunner") {
t.Fatalf("project path should use output label: %q", got.ProjectRootPath)
}
}
func TestEstimateWorkerBytesFromHistory(t *testing.T) {
database, err := db.New(t.TempDir())
if err != nil {
t.Fatal(err)
}
defer database.Close()
h := &Handler{db: database}
buildPath := filepath.Join(t.TempDir(), "worker-test.exe")
if err := database.InsertBuild(&models.BuildRecord{
ID: "b1", WorkerName: "pc", FilePath: buildPath, FileSize: 8 * 1024 * 1024,
CreatedAt: time.Now(),
}); err != nil {
t.Fatal(err)
}
if got := h.estimateWorkerBytes(); got != 8*1024*1024 {
t.Fatalf("expected average from history, got %d", got)
}
}
func TestEstimateFusionBuildSignToolMissingNote(t *testing.T) {
h := &Handler{
dataDir: t.TempDir(),
projectRoot: t.TempDir(),
policy: BuildPolicy{Sign: SignPolicy{Enabled: true, CertThumbprint: "ABC123"}},
}
req := &BuildRequest{FusionEnabled: true, SignBuild: true}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
found := false
for _, n := range got.Notes {
if strings.Contains(strings.ToLower(n), "signtool") || strings.Contains(strings.ToLower(n), "osslsigncode") {
found = true
break
}
}
if !found {
t.Fatalf("expected signing tool missing note, got %v", got.Notes)
}
}
func TestEstimateFusionBuildSignEnabledWithCert(t *testing.T) {
h := &Handler{
dataDir: t.TempDir(),
projectRoot: t.TempDir(),
policy: BuildPolicy{Sign: SignPolicy{Enabled: true, CertThumbprint: "ABC123"}},
}
req := &BuildRequest{FusionEnabled: true, SignBuild: true}
got := h.estimateFusionBuild(req, "", 1024, "prep.exe")
for _, n := range got.Notes {
if strings.Contains(n, "certificate") || strings.Contains(n, "thumbprint") {
t.Fatal("should not warn when cert thumbprint configured")
}
}
if !got.SignBuild {
t.Fatal("SignBuild should be true in response")
}
}
func TestEstimateFusionBuildProjectRootResolved(t *testing.T) {
h := &Handler{dataDir: t.TempDir(), projectRoot: "."}
req := &BuildRequest{FusionEnabled: true}
got := h.estimateFusionBuild(req, "", 0, "x.pdf")
if got.ProjectRootPath == "" {
t.Fatal("project root . should resolve to absolute path")
}
if !filepath.IsAbs(got.ProjectRootPath) {
t.Fatalf("expected absolute project path: %q", got.ProjectRootPath)
}
}