21449: Propagate max_run_time to LSF scheduler.
[arvados.git] / lib / lsf / dispatch_test.go
index cd41071d2cebc8bb62c96764ba767fa7da5e5835..e1e0bcae310ed2a52c9cfa4c8be281ba1ab96716 100644 (file)
@@ -34,6 +34,7 @@ type suite struct {
        crTooBig      arvados.ContainerRequest
        crPending     arvados.ContainerRequest
        crCUDARequest arvados.ContainerRequest
+       crMaxRunTime  arvados.ContainerRequest
 }
 
 func (s *suite) TearDownTest(c *check.C) {
@@ -116,6 +117,25 @@ func (s *suite) SetUpTest(c *check.C) {
        })
        c.Assert(err, check.IsNil)
 
+       err = arvados.NewClientFromEnv().RequestAndDecode(&s.crMaxRunTime, "POST", "arvados/v1/container_requests", nil, map[string]interface{}{
+               "container_request": map[string]interface{}{
+                       "runtime_constraints": arvados.RuntimeConstraints{
+                               RAM:   1000000,
+                               VCPUs: 1,
+                       },
+                       "scheduling_parameters": arvados.SchedulingParameters{
+                               MaxRunTime: 124,
+                       },
+                       "container_image":     arvadostest.DockerImage112PDH,
+                       "command":             []string{"sleep", "123"},
+                       "mounts":              map[string]arvados.Mount{"/mnt/out": {Kind: "tmp", Capacity: 1000}},
+                       "output_path":         "/mnt/out",
+                       "state":               arvados.ContainerRequestStateCommitted,
+                       "priority":            1,
+                       "container_count_max": 1,
+               },
+       })
+       c.Assert(err, check.IsNil)
 }
 
 type lsfstub struct {
@@ -141,12 +161,7 @@ func (stub lsfstub) stubCommand(s *suite, c *check.C) func(prog string, args ...
                }
                switch prog {
                case "bsub":
-                       defaultArgs := s.disp.Cluster.Containers.LSF.BsubArgumentsList
-                       if args[5] == s.crCUDARequest.ContainerUUID {
-                               c.Assert(len(args), check.Equals, len(defaultArgs)+len(s.disp.Cluster.Containers.LSF.BsubCUDAArguments))
-                       } else {
-                               c.Assert(len(args), check.Equals, len(defaultArgs))
-                       }
+                       c.Assert(len(args) > 5, check.Equals, true)
                        // %%J must have been rewritten to %J
                        c.Check(args[1], check.Equals, "/tmp/crunch-run.%J.out")
                        args = args[4:]
@@ -204,6 +219,21 @@ func (stub lsfstub) stubCommand(s *suite, c *check.C) func(prog string, args ...
                                fakejobq[nextjobid] = args[1]
                                nextjobid++
                                mtx.Unlock()
+                       case s.crMaxRunTime.ContainerUUID:
+                               c.Check(args, check.DeepEquals, []string{
+                                       "-J", s.crMaxRunTime.ContainerUUID,
+                                       "-n", "1",
+                                       "-D", "257MB",
+                                       "-R", "rusage[mem=257MB:tmp=2304MB] span[hosts=1]",
+                                       "-R", "select[mem>=257MB]",
+                                       "-R", "select[tmp>=2304MB]",
+                                       "-R", "select[ncpus>=1]",
+                                       "-We", "8", // 124s + 5m overhead + roundup = 8m
+                               })
+                               mtx.Lock()
+                               fakejobq[nextjobid] = args[1]
+                               nextjobid++
+                               mtx.Unlock()
                        default:
                                c.Errorf("unexpected uuid passed to bsub: args %q", args)
                                return exec.Command("false")