BeforeEach(func() { apiServerAddr = fmt.Sprintf("http://%s:%d", cliRunner.config.APIServerAddress, cliRunner.config.APIServerPort) requestGenerator = rata.NewRequestGenerator(apiServerAddr, apiserver.Routes) httpClient = &http.Client{ Transport: &http.Transport{}, } username = cliRunner.config.APIServerUsername password = cliRunner.config.APIServerPassword a = appfixture.NewAppFixture() b = appfixture.NewAppFixture() validRequest = fmt.Sprintf(`[{"droplet":"%s","version":"%s"}, {"droplet":"%s","version":"%s"}]`, a.AppGuid, a.AppVersion, b.AppGuid, b.AppVersion) simulator.SetDesiredState(a.DesiredState(2), b.DesiredState(3)) simulator.SetCurrentHeartbeats(a.Heartbeat(1), b.Heartbeat(1)) }) AfterEach(func() { cliRunner.StopAPIServer() }) Context("when the store is fresh", func() { BeforeEach(func() { simulator.Tick(simulator.TicksToAttainFreshness) cliRunner.StartAPIServer(simulator.currentTimestamp) }) It("returns the apps", func() { getAppstatus, err := requestGenerator.CreateRequest( "bulk_app_state",
Ω(messages).Should(HaveLen(1)) Ω(messageBus.PublishedMessages).ShouldNot(HaveKey("hm9000.start")) }) }) }) }) Context("when there are stop messages", func() { var keepAliveTime int var sentOn int64 var err error var pendingMessage models.PendingStopMessage var storeSetErrInjector *fakestoreadapter.FakeStoreAdapterErrorInjector JustBeforeEach(func() { store.SyncHeartbeats(app.Heartbeat(2)) pendingMessage = models.NewPendingStopMessage(time.Unix(100, 0), 30, keepAliveTime, app.AppGuid, app.AppVersion, app.InstanceAtIndex(0).InstanceGuid, models.PendingStopMessageReasonInvalid) pendingMessage.SentOn = sentOn store.SavePendingStopMessages( pendingMessage, ) storeAdapter.SetErrInjector = storeSetErrInjector err = sender.Send() }) BeforeEach(func() { keepAliveTime = 0 sentOn = 0 err = nil
It("should not send any start or stop messages", func() { err := analyzer.Analyze() Ω(err).ShouldNot(HaveOccurred()) Ω(startMessages()).Should(BeEmpty()) Ω(stopMessages()).Should(BeEmpty()) }) }) Context("When the desired number of instances and the running number of instances match", func() { BeforeEach(func() { desired := app.DesiredState(3) desired.State = models.AppStateStarted store.SyncDesiredState( desired, ) store.SyncHeartbeats(app.Heartbeat(3)) }) It("should not send any start or stop messages", func() { err := analyzer.Analyze() Ω(err).ShouldNot(HaveOccurred()) Ω(startMessages()).Should(BeEmpty()) Ω(stopMessages()).Should(BeEmpty()) }) }) }) Describe("Starting missing instances", func() { Context("where an app has desired instances", func() { BeforeEach(func() { store.SyncDesiredState(
"github.com/cloudfoundry/hm9000/testhelpers/appfixture" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Simple Cases Test", func() { var app1, app2 appfixture.AppFixture BeforeEach(func() { app1 = appfixture.NewAppFixture() app2 = appfixture.NewAppFixture() }) Context("when all running instances are desired", func() { BeforeEach(func() { simulator.SetCurrentHeartbeats(app1.Heartbeat(1), app2.Heartbeat(1)) simulator.SetDesiredState(app1.DesiredState(1), app2.DesiredState(1)) simulator.Tick(simulator.TicksToAttainFreshness) simulator.Tick(1) }) It("should not send any messages", func() { Ω(startStopListener.Starts).Should(BeEmpty()) Ω(startStopListener.Stops).Should(BeEmpty()) }) }) Context("when a desired app is pending staging", func() { Context("and it has a running instance", func() { BeforeEach(func() { desired := app1.DesiredState(1)