github.com/chenbh/concourse/v6@v6.4.2/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/chenbh/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  })