github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/metric/http_test.go (about) 1 package metric_test 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 7 "github.com/pf-qiu/concourse/v6/atc/metric" 8 "github.com/pf-qiu/concourse/v6/atc/metric/metricfakes" 9 10 . "github.com/pf-qiu/concourse/v6/atc/metric" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 func noopHandler(w http.ResponseWriter, r *http.Request) { 16 switch r.URL.Path { 17 case "/success": 18 return 19 case "/failure": 20 w.WriteHeader(500) 21 return 22 } 23 24 w.WriteHeader(404) 25 return 26 } 27 28 var _ = Describe("MetricsHandler", func() { 29 var ( 30 ts *httptest.Server 31 emitter *metricfakes.FakeEmitter 32 monitor *metric.Monitor 33 ) 34 35 BeforeEach(func() { 36 emitter = &metricfakes.FakeEmitter{} 37 monitor = metric.NewMonitor() 38 39 emitterFactory := &metricfakes.FakeEmitterFactory{} 40 emitterFactory.IsConfiguredReturns(true) 41 emitterFactory.NewEmitterReturns(emitter, nil) 42 43 monitor.RegisterEmitter(emitterFactory) 44 monitor.Initialize(testLogger, "test", map[string]string{}, 1000) 45 46 ts = httptest.NewServer( 47 WrapHandler( 48 testLogger, 49 monitor, 50 "ApiEndpoint", 51 http.HandlerFunc(noopHandler), 52 ), 53 ) 54 }) 55 56 AfterEach(func() { 57 ts.Close() 58 }) 59 60 Context("when serving requests", func() { 61 var ( 62 endpoint = "/" 63 event metric.Event 64 ) 65 66 JustBeforeEach(func() { 67 res, err := http.Get(ts.URL + endpoint) 68 Expect(err).ToNot(HaveOccurred()) 69 res.Body.Close() 70 71 Eventually(emitter.EmitCallCount).Should(BeNumerically("==", 1)) 72 _, event = emitter.EmitArgsForCall(0) 73 }) 74 75 It("captures request and response properties", func() { 76 Expect(event.Attributes).To(HaveKeyWithValue("status", "404")) 77 Expect(event.Attributes).To(HaveKeyWithValue("method", "GET")) 78 Expect(event.Attributes).To(HaveKeyWithValue("route", "ApiEndpoint")) 79 Expect(event.Attributes).To(HaveKeyWithValue("path", "/")) 80 }) 81 82 Context("to endpoint that returns success statuses", func() { 83 BeforeEach(func() { 84 endpoint = "/success" 85 }) 86 87 It("captures error code", func() { 88 Expect(event.Attributes).To(HaveKeyWithValue("status", "200")) 89 }) 90 91 It("captures route", func() { 92 Expect(event.Attributes).To(HaveKeyWithValue("path", "/success")) 93 }) 94 }) 95 96 Context("to faulty endpoint", func() { 97 BeforeEach(func() { 98 endpoint = "/failure" 99 }) 100 101 It("captures error code", func() { 102 Expect(event.Attributes).To(HaveKeyWithValue("status", "500")) 103 }) 104 105 It("captures route", func() { 106 Expect(event.Attributes).To(HaveKeyWithValue("path", "/failure")) 107 }) 108 }) 109 }) 110 })