}) It("should not schedule anything", func() { err := analyzer.Analyze() Ω(err).ShouldNot(HaveOccurred()) Ω(startMessages()).Should(BeEmpty()) Ω(stopMessages()).Should(BeEmpty()) }) }) Context("and the evacuating index's crash count is greater than 0", func() { BeforeEach(func() { store.SaveCrashCounts(models.CrashCount{ AppGuid: app.AppGuid, AppVersion: app.AppVersion, InstanceIndex: 1, CrashCount: 1, }) }) It("should schedule an immediate start message *and* a stop message for the EVACUATING instance", func() { err := analyzer.Analyze() Ω(err).ShouldNot(HaveOccurred()) Ω(startMessages()).Should(HaveLen(1)) expectedMessageForIndex1 := models.NewPendingStartMessage(clock.Now(), 0, conf.GracePeriod(), app.AppGuid, app.AppVersion, 1, 2.0, models.PendingStartMessageReasonEvacuating) Ω(startMessages()).Should(ContainElement(EqualPendingStartMessage(expectedMessageForIndex1))) Ω(stopMessages()).Should(HaveLen(1)) expectedMessageForEvacuatingInstance := models.NewPendingStopMessage(clock.Now(), 0, conf.GracePeriod(), app.AppGuid, app.AppVersion, evacuatingHeartbeat.InstanceGuid, models.PendingStopMessageReasonEvacuationComplete) Ω(stopMessages()).Should(ContainElement(EqualPendingStopMessage(expectedMessageForEvacuatingInstance)))
AppGuid: app.AppGuid, AppVersion: app.AppVersion, InstanceIndex: 1, CrashCount: 2, } expectedApp = models.NewApp( app.AppGuid, app.AppVersion, app.DesiredState(3), instanceHeartbeats, map[int]models.CrashCount{1: crashCount}, ) store.SyncDesiredState(app.DesiredState(3)) store.SyncHeartbeats(app.Heartbeat(3)) store.SaveCrashCounts(crashCount) validRequestPayload = fmt.Sprintf(`{"droplet":"%s","version":"%s"}`, app.AppGuid, app.AppVersion) }) Context("when the store is fresh", func() { BeforeEach(func() { store.BumpDesiredFreshness(time.Unix(0, 0)) store.BumpActualFreshness(time.Unix(0, 0)) }) Context("when the app query parameters do not correspond to an existing app", func() { It("should respond with an empty hash", func() { response := makeRequest(`{"droplet":"elephant","version":"pink-flamingo"}`) Ω(response).Should(Equal("{}")) }) })