Context("when a status request errors", func() {
			It("exits with an error message if it's waiting for services to no longer be pending", func() {
				client.StatusStatus = fakemonit.FakeMonitStatus{
					Services: []boshmonit.Service{
						{Monitored: true, Name: "foo", Status: "unknown", Pending: true},
					},
				}

				errchan := make(chan error)
				go func() {
					errchan <- monit.StopAndWait()
				}()

				Eventually(timeService.WatcherCount).Should(Equal(2)) // we hit the sleep
				client.StatusErr = errors.New("Error message")

				timeService.Increment(5 * time.Minute)

				Eventually(func() string {
					err := <-errchan
					return err.Error()
				}).Should(Equal("Getting monit status: Error message"))
				Expect(len(runner.RunCommands)).To(Equal(0)) // never called 'monit stop', the right loop is failing
			})

			It("exits with an error message if it's waiting for services to stop", func() {
				client.StatusStatus = fakemonit.FakeMonitStatus{
					Services: []boshmonit.Service{
						{Monitored: true, Name: "foo", Status: "unknown", Pending: false},
					},
		It("status returns start when at least one service is starting", func() {
			client.StatusStatus = fakemonit.FakeMonitStatus{
				Services: []boshmonit.Service{
					boshmonit.Service{Monitored: true, Status: "failing"},
					boshmonit.Service{Monitored: true, Status: "starting"},
					boshmonit.Service{Monitored: true, Status: "running"},
				},
			}

			status := monit.Status()
			Expect("starting").To(Equal(status))
		})

		It("status returns unknown when error", func() {
			client.StatusErr = errors.New("fake-monit-client-error")

			status := monit.Status()
			Expect("unknown").To(Equal(status))
		})
	})

	Describe("MonitorJobFailures", func() {
		It("monitor job failures", func() {
			var handledAlert boshalert.MonitAlert

			failureHandler := func(alert boshalert.MonitAlert) (err error) {
				handledAlert = alert
				return
			}