Context("when acquiring a lock", func() { It("fails", func() { bsession, err := consuladapter.NewSession("b-session", 20*time.Second, client, sessionMgr) Expect(err).NotTo(HaveOccurred()) err = bsession.AcquireLock(lockKey, lockValue) Expect(err).To(HaveOccurred()) }) }) }) Context("and consul goes down during a renew", func() { BeforeEach(func() { oldStub := sessionMgr.RenewPeriodicStub sessionMgr.RenewPeriodicStub = func(initialTTL string, id string, q *api.WriteOptions, doneCh chan struct{}) error { stopCluster() return oldStub("1s", id, q, doneCh) } }) It("reports an error", func() { var err error Eventually(session.Err(), 3*time.Second).Should(Receive(&err)) // a race between 2 possibilities if urlErr, ok := err.(*url.Error); ok { Expect(ok).To(BeTrue()) opErr, ok := urlErr.Err.(*net.OpError) Expect(ok).To(BeTrue()) Expect(opErr.Op).To(Equal("dial")) } else { Expect(err).To(Equal(consuladapter.LostLockError(lockKey)))