Ω(startStopListener.Starts[0].AppGuid).Should(Equal(app.AppGuid)) Ω(startStopListener.Starts[0].AppVersion).Should(Equal(app.AppVersion)) Ω(startStopListener.Starts[0].InstanceIndex).Should(Equal(0)) }) }) }) Describe("Deterministic evacuation", func() { Context("when an app enters the evacuation state", func() { var evacuatingHeartbeat models.InstanceHeartbeat BeforeEach(func() { Ω(startStopListener.Starts).Should(BeEmpty()) Ω(startStopListener.Stops).Should(BeEmpty()) evacuatingHeartbeat = app.InstanceAtIndex(0).Heartbeat() evacuatingHeartbeat.State = models.InstanceStateEvacuating simulator.SetCurrentHeartbeats(dea.HeartbeatWith(evacuatingHeartbeat)) simulator.Tick(1) }) It("should immediately start the app", func() { Ω(startStopListener.Starts).Should(HaveLen(1)) Ω(startStopListener.Starts[0].AppGuid).Should(Equal(app.AppGuid)) Ω(startStopListener.Starts[0].AppVersion).Should(Equal(app.AppVersion)) Ω(startStopListener.Starts[0].InstanceIndex).Should(Equal(0)) Ω(startStopListener.Stops).Should(BeEmpty()) }) Context("when the app starts", func() { BeforeEach(func() {
)) }) It("should save the instance heartbeats for the passed-in heartbeat", func() { results, err := store.GetInstanceHeartbeats() Ω(err).ShouldNot(HaveOccurred()) Ω(results).Should(HaveLen(2)) Ω(results).Should(ContainElement(dea.GetApp(0).InstanceAtIndex(1).Heartbeat())) Ω(results).Should(ContainElement(dea.GetApp(1).InstanceAtIndex(3).Heartbeat())) }) Context("when there are already instance heartbeats stored for the DEA in question", func() { var modifiedHeartbeat models.InstanceHeartbeat BeforeEach(func() { modifiedHeartbeat = dea.GetApp(1).InstanceAtIndex(3).Heartbeat() modifiedHeartbeat.State = models.InstanceStateEvacuating store.SyncHeartbeats(dea.HeartbeatWith( modifiedHeartbeat, dea.GetApp(2).InstanceAtIndex(2).Heartbeat(), )) }) It("should sync the heartbeats (add new ones, adjust ones that have changed state, and delete old ones)", func() { results, err := store.GetInstanceHeartbeats() Ω(err).ShouldNot(HaveOccurred()) Ω(results).Should(HaveLen(2)) Ω(results).Should(ContainElement(modifiedHeartbeat)) Ω(results).Should(ContainElement(dea.GetApp(2).InstanceAtIndex(2).Heartbeat())) }) })