Expect(err).NotTo(HaveOccurred()) node, err := fakeStore.Get("syslog_drain_binder/leader") Expect(err).NotTo(HaveOccurred()) Expect(node.Value).To(BeEquivalentTo("name")) Expect(node.TTL).To(Equal(uint64(1))) }) It("sets the IsLeader flag to true", func() { candidate.RunForElection() Expect(candidate.IsLeader()).To(BeTrue()) }) It("re-attempts on an interval if key already exists", func() { err := fakeStore.Create(storeadapter.StoreNode{ Key: "syslog_drain_binder/leader", Value: []byte("some-other-instance"), }) Expect(err).NotTo(HaveOccurred()) go candidate.RunForElection() Eventually(func() int { return len(testingSink.Records()) }, 3).Should(BeNumerically(">=", 2)) for _, record := range testingSink.Records() { Expect(record.Message).To(Equal("Elector: 'name' lost election for cluster leader.")) } }) It("returns an error if any other error occurs while setting key", func() { testError := errors.New("test error") fakeStore.CreateErrInjector = fakestoreadapter.NewFakeStoreAdapterErrorInjector("syslog_drain_binder", testError)
fakeStoreAdapter *fakestoreadapter.FakeStoreAdapter ) BeforeEach(func() { originalEtcdQueryInterval = main.EtcdQueryInterval fakeStoreAdapter = fakestoreadapter.New() main.EtcdQueryInterval = 1 * time.Millisecond }) AfterEach(func() { main.EtcdQueryInterval = originalEtcdQueryInterval }) It("gets loggregator addresses (with port) from the store", func() { stopChan := make(chan struct{}) defer close(stopChan) node := storeadapter.StoreNode{ Key: "healthstatus/loggregator/z1/loggregator/0", Value: []byte("1.2.3.4"), } fakeStoreAdapter.Create(node) provider := main.MakeProvider(fakeStoreAdapter, "healthstatus/loggregator", 3456, loggertesthelper.Logger()) Eventually(provider.ServerAddresses).Should(ConsistOf("1.2.3.4:3456")) }) })