+ ctx, cancel := context.WithCancel(context.Background())
+ dispatcher := dispatch.Dispatcher{
+ Arv: arv,
+ PollPeriod: time.Second,
+ }
+
+ startCmd := func(container arvados.Container, cmd *exec.Cmd) error {
+ dispatcher.UpdateState(container.UUID, "Running")
+ dispatcher.UpdateState(container.UUID, "Complete")
+ return cmd.Start()
+ }
+
+ dispatcher.RunContainer = func(d *dispatch.Dispatcher, c arvados.Container, s <-chan arvados.Container) {
+ (&LocalRun{startCmd, make(chan bool, 8), ctx}).run(d, c, s)
+ cancel()
+ }
+
+ err = dispatcher.Run(ctx)
+ c.Assert(err, Equals, context.Canceled)
+
+ // Wait for all running crunch jobs to complete / terminate
+ waitGroup.Wait()