}
type lsfstub struct {
+ sudoUser string
errorRate float64
}
-func (stub lsfstub) stubCommand(c *check.C) func(prog string, args ...string) *exec.Cmd {
+func (stub lsfstub) stubCommand(s *suite, c *check.C) func(prog string, args ...string) *exec.Cmd {
mtx := sync.Mutex{}
nextjobid := 100
fakejobq := map[int]string{}
if rand.Float64() < stub.errorRate {
return exec.Command("bash", "-c", "echo >&2 'stub random failure' && false")
}
+ if stub.sudoUser != "" && len(args) > 3 &&
+ prog == "sudo" &&
+ args[0] == "-E" &&
+ args[1] == "-u" &&
+ args[2] == stub.sudoUser {
+ prog, args = args[3], args[4:]
+ }
switch prog {
case "bsub":
- c.Assert(args, check.HasLen, 4)
+ defaultArgs := s.disp.Cluster.Containers.LSF.BsubArgumentsList
+ c.Assert(args, check.HasLen, 4+len(defaultArgs))
+ c.Check(args[:len(defaultArgs)], check.DeepEquals, defaultArgs)
+ args = args[len(defaultArgs):]
+
c.Check(args[0], check.Equals, "-J")
switch args[1] {
case arvadostest.LockedContainerUUID:
}
return exec.Command("echo", "submitted job")
case "bjobs":
- c.Check(args, check.DeepEquals, []string{"-noheader", "-o", "jobid stat job_name:30"})
+ c.Check(args, check.DeepEquals, []string{"-u", "all", "-noheader", "-o", "jobid stat job_name:30"})
out := ""
for jobid, uuid := range fakejobq {
out += fmt.Sprintf(`%d %s %s\n`, jobid, "RUN", uuid)
}
func (s *suite) TestSubmit(c *check.C) {
- s.disp.lsfcli.stubCommand = lsfstub{errorRate: 0.1}.stubCommand(c)
+ s.disp.lsfcli.stubCommand = lsfstub{
+ errorRate: 0.1,
+ sudoUser: s.disp.Cluster.Containers.LSF.BsubSudoUser,
+ }.stubCommand(s, c)
s.disp.Start()
deadline := time.Now().Add(20 * time.Second)
for range time.NewTicker(time.Second).C {