github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/worker/healthchecker_test.go (about) 1 package worker_test 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "time" 7 8 "code.cloudfoundry.org/lager/lagertest" 9 "github.com/onsi/gomega/ghttp" 10 11 . "github.com/pf-qiu/concourse/v6/worker" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("CheckHealth", func() { 17 var ( 18 healthchecker *httptest.Server 19 garden *ghttp.Server 20 baggageclaim *ghttp.Server 21 22 testLogger = lagertest.NewTestLogger("healthchecker") 23 ) 24 25 BeforeEach(func() { 26 garden = ghttp.NewServer() 27 baggageclaim = ghttp.NewServer() 28 29 hc := NewHealthChecker(testLogger, 30 "http://"+baggageclaim.Addr(), "http://"+garden.Addr(), 100*time.Millisecond) 31 32 healthchecker = httptest.NewServer( 33 http.HandlerFunc(hc.CheckHealth)) 34 }) 35 36 AfterEach(func() { 37 baggageclaim.Close() 38 garden.Close() 39 healthchecker.Close() 40 }) 41 42 Context("when receiving a request", func() { 43 var ( 44 resp *http.Response 45 err error 46 ) 47 48 JustBeforeEach(func() { 49 resp, err = http.Get(healthchecker.URL) 50 Expect(err).ToNot(HaveOccurred()) 51 }) 52 53 BeforeEach(func() { 54 garden.AppendHandlers( 55 ghttp.CombineHandlers( 56 ghttp.VerifyRequest("GET", "/ping"), 57 ghttp.RespondWithJSONEncoded(200, map[string]string{}), 58 ), 59 ) 60 61 baggageclaim.AppendHandlers( 62 ghttp.CombineHandlers( 63 ghttp.VerifyRequest("GET", "/volumes"), 64 ghttp.RespondWithJSONEncoded(200, []string{}), 65 ), 66 ) 67 }) 68 69 It("makes an underlying request to baggageclaim", func() { 70 Expect(baggageclaim.ReceivedRequests()).To(HaveLen(1)) 71 }) 72 73 It("makes an underlying request to garden", func() { 74 Expect(garden.ReceivedRequests()).To(HaveLen(1)) 75 }) 76 77 Context("having a very slow baggaclaim", func() { 78 BeforeEach(func() { 79 baggageclaim.Reset() 80 baggageclaim.AppendHandlers(func(w http.ResponseWriter, r *http.Request) { 81 time.Sleep(1 * time.Second) 82 }) 83 }) 84 85 It("doesn't wait forever", func() { 86 Expect(resp.StatusCode).To(Equal(503)) 87 }) 88 }) 89 90 Context("having baggageclaim down", func() { 91 BeforeEach(func() { 92 baggageclaim.Close() 93 }) 94 95 It("returns 503", func() { 96 Expect(resp.StatusCode).To(Equal(503)) 97 }) 98 }) 99 100 Context("having garden down", func() { 101 BeforeEach(func() { 102 garden.Close() 103 }) 104 105 It("returns 503", func() { 106 Expect(resp.StatusCode).To(Equal(503)) 107 }) 108 }) 109 110 Context("having baggageclaim AND garden up", func() { 111 It("returns 200", func() { 112 Expect(resp.StatusCode).To(Equal(200)) 113 }) 114 }) 115 }) 116 })