package cli import ( "strings" "testing" ) func TestJudgesGoOnTheirOwnMachinesWhenTheInstallHasSome(t *testing.T) { in := newDefaultServerInit() if _, sel := in.judgePlacement(); sel != nil { t.Errorf("no judge machines, yet a selector: %v", sel) } if err := (judgeMachineFlag{&in.judgeMachines}).Set("ubuntu@10.0.0.21"); err != nil { t.Fatal(err) } _ = (judgeMachineFlag{&in.judgeMachines}).Set("ubuntu@10.0.0.22") in.judge.Replicas, in.judgeCPUs = 2, []int{4, 4} cores, sel := in.judgePlacement() if sel[judgeRoleLabel] != judgeRoleValue || cores != refitCores(2, []int{4, 4}) { t.Errorf("cores %d, selector %v", cores, sel) } m := guardModel("http://x/g.gguf", 2, cores, sel) if m.Profiles[0].NodeSelector[judgeRoleLabel] != judgeRoleValue { t.Errorf("the judge's profile does not select its machines: %+v", m.Profiles[0]) } // The same from a script. flags := strings.Join(in.initFlags(), " ") if !strings.Contains(flags, "--judge-node ubuntu@10.0.0.21") || !strings.Contains(flags, "--judge-node ubuntu@10.0.0.22") { t.Errorf("flags %s", flags) } if err := (judgeMachineFlag{&in.judgeMachines}).Set(" "); err == nil { t.Error("an empty --judge-node was taken") } } func TestTheSetupAsksForJudgeMachinesWhenChosen(t *testing.T) { m := newSetupModel("ctl", []string{"10.0.0.5"}) m.choice, m.page = 1, pMachines m.mfocus = m.shown() * mfCount // the judges' choice m = press(m, "right").(setupModel) if m.judges != 1 || m.shown() != 3 || m.mfocus != 3*mfCount { t.Fatalf("judges %d, shown %d, focus %d", m.judges, m.shown(), m.mfocus) } if v := m.machinesView(); !strings.Contains(v, "Judge machine 1") || !strings.Contains(v, "Check the 4 machines") { t.Errorf("the page lacks the judge machine:\n%s", v) } for i, addr := range []string{"10.0.0.11", "10.0.0.12", ""} { m.db[i].addr.SetValue(addr) m.db[i].user.SetValue("ubuntu") m.db[i].auth = authAgent } if err := m.validateMachines(); !strings.Contains(err, "judge machine 1 has no address") { t.Errorf("err %q", err) } m.db[2].addr.SetValue("10.0.0.21") if err := m.validateMachines(); err != "" { t.Errorf("err %q", err) } if cmd := m.command(); !strings.Contains(cmd, "--judge-node ubuntu@10.0.0.21") || strings.Contains(cmd, "--patroni ubuntu@10.0.0.21") { t.Errorf("command %s", cmd) } // None again: the judge machine is no longer asked for. m = press(m, "left").(setupModel) if m.judges != 0 || strings.Contains(m.machinesView(), "Judge machine 1") { t.Errorf("judges %d after choosing none", m.judges) } }