BeforeEach(func() { logger := boshlog.NewLogger(boshlog.LevelNone) fakeHTTPClient = fakehttpclient.NewFakeHTTPClient() toleratedErrorCount := 2 agentClient = NewAgentClient("http://localhost:6305", "fake-uuid", 0, toleratedErrorCount, fakeHTTPClient, logger) }) Describe("get_task", func() { Context("when the http client errors", func() { It("should retry", func() { fakeHTTPClient.SetPostBehavior(`{"value":{"agent_task_id":"fake-agent-task-id","state":"running"}}`, 200, nil) fakeHTTPClient.SetPostBehavior("", 0, errors.New("connection reset by peer")) fakeHTTPClient.SetPostBehavior("", 0, errors.New("connection reset by peer")) fakeHTTPClient.SetPostBehavior(`{"value":{"agent_task_id":"fake-agent-task-id","state":"running"}}`, 200, nil) fakeHTTPClient.SetPostBehavior(`{"value":"stopped"}`, 200, nil) err := agentClient.Stop() Expect(err).ToNot(HaveOccurred()) }) Context("when the http client errors more times than the error retry count", func() { It("should return the error", func() { fakeHTTPClient.SetPostBehavior(`{"value":{"agent_task_id":"fake-agent-task-id","state":"running"}}`, 200, nil) fakeHTTPClient.SetPostBehavior("", 0, errors.New("connection reset by peer 1")) fakeHTTPClient.SetPostBehavior("", 0, errors.New("connection reset by peer 2")) fakeHTTPClient.SetPostBehavior("", 0, errors.New("connection reset by peer 3")) err := agentClient.Stop() Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("connection reset by peer 3")) }) })