Example #1
0
				})

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