예제 #1
0
				Ω(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() {
예제 #2
0
			))
		})

		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()))
			})
		})