func (db *serviceClient) NewCellPresenceRunner(logger lager.Logger, cellPresence *models.CellPresence, retryInterval time.Duration, lockTTL time.Duration) ifrit.Runner { payload, err := models.ToJSON(cellPresence) if err != nil { panic(err) } return locket.NewPresence(logger, db.consulClient, CellSchemaPath(cellPresence.CellId), payload, db.clock, retryInterval, lockTTL) }
BeforeEach(func() { consulClient = consulRunner.NewClient() presenceKey = "some-key" presenceValue = []byte("some-value") retryInterval = 500 * time.Millisecond logger = lagertest.NewTestLogger("locket") presenceTTL = 5 * time.Second }) JustBeforeEach(func() { clock = fakeclock.NewFakeClock(time.Now()) presenceRunner = locket.NewPresence(logger, consulClient, presenceKey, presenceValue, clock, retryInterval, presenceTTL) }) AfterEach(func() { ginkgomon.Kill(presenceProcess) }) Context("When consul is running", func() { Context("an error occurs while acquiring the presence", func() { BeforeEach(func() { presenceKey = "" }) It("continues to retry", func() { presenceProcess = ifrit.Background(presenceRunner)
) BeforeEach(func() { consulClient = consulRunner.NewClient() logger = lagertest.NewTestLogger("test") clock := clock.NewClock() watcherRunner, disappearChan = locket.NewDisappearanceWatcher(logger, consulClient, "under", clock) watcherProcess = ifrit.Invoke(watcherRunner) }) AfterEach(func() { ginkgomon.Kill(watcherProcess) }) var addThenRemovePresence = func(presenceKey string) { presenceRunner := locket.NewPresence(logger, consulClient, presenceKey, []byte("value"), clock.NewClock(), retryInterval, 10*time.Second) presenceProcess := ifrit.Invoke(presenceRunner) Eventually(func() int { sessions, _, err := consulClient.Session().List(nil) Expect(err).NotTo(HaveOccurred()) return len(sessions) }).Should(Equal(1)) Eventually(logger).Should(gbytes.Say("presence.succeeded-setting-presence")) ginkgomon.Kill(presenceProcess) } Context("when the watch starts first", func() { Context("when there are keys", func() { It("detects removals of keys", func() {