Files
AetherForge/server/internal/builder/fusion_test.go
AetherForge feba06e008 Improve portable launch, forge persistence, and operator auth UX.
Persist build extra_files for Build Manager history, print dashboard login on every start, add libp2p for Mesh P2P forge, defer WebSocket until login, and split devrun.bat from LAUNCH.bat with USB deck auto-detection.
2026-05-31 18:56:43 -07:00

159 lines
4.3 KiB
Go

package builder
import (
"context"
"os"
"os/exec"
"path/filepath"
"testing"
)
func goAvailable() bool {
_, err := exec.LookPath("go")
return err == nil
}
func TestBuildFusionCompileFailsWithoutGo(t *testing.T) {
h, database := testHandlerDB(t)
defer database.Close()
setFakeGoFail(t, h)
buildDir := t.TempDir()
worker := filepath.Join(buildDir, "worker.exe")
if err := os.WriteFile(worker, []byte("w"), 0644); err != nil {
t.Fatal(err)
}
prep := filepath.Join(t.TempDir(), "doc.pdf")
if err := os.WriteFile(prep, []byte("%PDF"), 0644); err != nil {
t.Fatal(err)
}
_, err := h.buildFusion(context.Background(), buildDir, prep, worker, "runner.exe", "parallel")
if err == nil {
t.Fatal("expected compile error from fake go")
}
}
func TestBuildFusionFromRequestPaired(t *testing.T) {
if !goAvailable() {
t.Skip("go not in PATH")
}
h, database := testHandlerDB(t)
defer database.Close()
buildDir := t.TempDir()
worker := filepath.Join(buildDir, "worker.exe")
if err := os.WriteFile(worker, []byte("MZ"), 0644); err != nil {
t.Fatal(err)
}
prep := filepath.Join(t.TempDir(), "report.pdf")
if err := os.WriteFile(prep, []byte("%PDF-1.4"), 0644); err != nil {
t.Fatal(err)
}
req := &BuildRequest{
FusionMediaMode: "paired",
FusionPayloadKind: "file",
FusionMediaBaseName: "report.pdf",
}
res, err := h.buildFusionFromRequest(context.Background(), buildDir, prep, worker, req)
if err != nil {
t.Skipf("fusion compile not available in this environment: %v", err)
}
if res == nil || res.LauncherPath == "" {
t.Fatal("expected launcher path")
}
}
func TestBuildFileFusionPairedFakeGo(t *testing.T) {
h, database := testHandlerDB(t)
defer database.Close()
setFakeGoSuccess(t, h)
buildDir := t.TempDir()
worker := filepath.Join(buildDir, "worker.exe")
if err := os.WriteFile(worker, []byte("w"), 0644); err != nil {
t.Fatal(err)
}
prep := filepath.Join(t.TempDir(), "report.pdf")
if err := os.WriteFile(prep, []byte("%PDF-1.4"), 0644); err != nil {
t.Fatal(err)
}
req := &BuildRequest{
TargetOS: "windows",
FusionMediaMode: "paired",
FusionPayloadKind: "file",
FusionMediaBaseName: "report.pdf",
}
win := BuildPlatform{GOOS: "windows", GOARCH: "amd64", Ext: ".exe"}
res, err := h.buildFileFusion(context.Background(), buildDir, prep, worker, req, win)
if err != nil {
t.Fatalf("buildFileFusion paired: %v", err)
}
if res == nil || res.LauncherPath == "" {
t.Fatal("expected launcher path")
}
if _, err := os.Stat(res.LauncherPath); err != nil {
t.Fatalf("launcher not created: %v", err)
}
if res.MediaName != "report.pdf" {
t.Fatalf("media name: %q", res.MediaName)
}
}
func TestBuildFileFusionEmbeddedFakeGo(t *testing.T) {
h, database := testHandlerDB(t)
defer database.Close()
setFakeGoSuccess(t, h)
buildDir := t.TempDir()
worker := filepath.Join(buildDir, "worker.bin")
if err := os.WriteFile(worker, []byte("w"), 0644); err != nil {
t.Fatal(err)
}
prep := filepath.Join(t.TempDir(), "clip.mkv")
if err := os.WriteFile(prep, []byte("fake video"), 0644); err != nil {
t.Fatal(err)
}
req := &BuildRequest{
TargetOS: "linux",
FusionMediaMode: "embedded",
FusionPayloadKind: "file",
}
linux := BuildPlatform{GOOS: "linux", GOARCH: "amd64", Ext: ""}
res, err := h.buildFileFusion(context.Background(), buildDir, prep, worker, req, linux)
if err != nil {
t.Fatalf("buildFileFusion embedded: %v", err)
}
payloadBin := filepath.Join(buildDir, "fusion", "assets", "payload.bin")
st, err := os.Stat(payloadBin)
if err != nil {
t.Fatalf("embedded payload.bin missing: %v", err)
}
if st.Size() == 0 {
t.Fatal("embedded mode should copy payload into assets")
}
if res.MediaName != "clip.mkv" {
t.Fatalf("media name: %q", res.MediaName)
}
}
func TestBuildFusionWrapperFakeGoSuccess(t *testing.T) {
h, database := testHandlerDB(t)
defer database.Close()
setFakeGoSuccess(t, h)
buildDir := t.TempDir()
worker := filepath.Join(buildDir, "worker.exe")
if err := os.WriteFile(worker, []byte("w"), 0644); err != nil {
t.Fatal(err)
}
prep := filepath.Join(t.TempDir(), "doc.pdf")
if err := os.WriteFile(prep, []byte("%PDF"), 0644); err != nil {
t.Fatal(err)
}
launcher, err := h.buildFusion(context.Background(), buildDir, prep, worker, "doc.pdf.exe", "parallel")
if err != nil {
t.Fatalf("buildFusion: %v", err)
}
if launcher == "" {
t.Fatal("expected launcher path")
}
}