Ω(stopMessages()).Should(ContainElement(EqualPendingStopMessage(expectedMessageForEvacuatingInstance))) }) }) }) }) Describe("Handling crashed instances", func() { var heartbeat models.Heartbeat Context("When there are multiple crashed instances on the same index", func() { JustBeforeEach(func() { err := analyzer.Analyze() Ω(err).ShouldNot(HaveOccurred()) }) BeforeEach(func() { heartbeat = dea.HeartbeatWith(app.CrashedInstanceHeartbeatAtIndex(0), app.CrashedInstanceHeartbeatAtIndex(0)) store.SyncHeartbeats(heartbeat) }) Context("when the app is desired", func() { BeforeEach(func() { store.SyncDesiredState( app.DesiredState(1), ) }) It("should not try to stop crashed instances", func() { Ω(stopMessages()).Should(BeEmpty()) }) It("should try to start the instance immediately", func() {
dea appfixture.DeaFixture a appfixture.AppFixture crashingHeartbeat models.Heartbeat ) BeforeEach(func() { dea = appfixture.NewDeaFixture() a = dea.GetApp(0) }) Describe("when all instances are crashed", func() { BeforeEach(func() { simulator.SetDesiredState(a.DesiredState(3)) crashingHeartbeat = dea.HeartbeatWith( a.CrashedInstanceHeartbeatAtIndex(0), a.CrashedInstanceHeartbeatAtIndex(1), a.CrashedInstanceHeartbeatAtIndex(2), ) simulator.SetCurrentHeartbeats(crashingHeartbeat) simulator.Tick(simulator.TicksToAttainFreshness) }) It("should only try to start instance at index 0", func() { Ω(startStopListener.Starts).Should(HaveLen(1)) Ω(startStopListener.Starts[0].AppVersion).Should(Equal(a.AppVersion)) Ω(startStopListener.Starts[0].InstanceIndex).Should(Equal(0)) }) It("should never try to stop crashes", func() {
}) Context("when there is no running instance reporting at that index", func() { BeforeEach(func() { store.SyncHeartbeats(dea.HeartbeatWith( app.InstanceAtIndex(1).Heartbeat(), app.InstanceAtIndex(2).Heartbeat(), )) }) assertMessageWasSent() }) Context("when there are crashed instances reporting at that index", func() { BeforeEach(func() { store.SyncHeartbeats(dea.HeartbeatWith( app.CrashedInstanceHeartbeatAtIndex(0), app.CrashedInstanceHeartbeatAtIndex(0), app.InstanceAtIndex(1).Heartbeat(), app.InstanceAtIndex(2).Heartbeat(), )) }) assertMessageWasSent() }) Context("when there *is* a running instance reporting at that index", func() { BeforeEach(func() { store.SyncHeartbeats(dea.HeartbeatWith( app.InstanceAtIndex(0).Heartbeat(), )) })