@@ -26,6 +26,8 @@ import (
2626 "net/url"
2727 "strings"
2828
29+ "github.com/pivotal-cf/brokerapi/middlewares"
30+
2931 "code.cloudfoundry.org/lager"
3032 "code.cloudfoundry.org/lager/lagertest"
3133 "github.com/drewolson/testflight"
@@ -109,6 +111,13 @@ var _ = Describe("Service Broker API", func() {
109111 return recorder
110112 }
111113
114+ It ("has a X-Correlation-ID header" , func () {
115+ response := makeRequest ()
116+
117+ header := response .Header ().Get ("X-Correlation-ID" )
118+ Expect (header ).Should (Not (BeNil ()))
119+ })
120+
112121 It ("has a Content-Type header" , func () {
113122 response := makeRequest ()
114123
@@ -2326,4 +2335,54 @@ var _ = Describe("Service Broker API", func() {
23262335 })
23272336 })
23282337 })
2338+
2339+ Describe ("CorrelationIDHeader" , func () {
2340+
2341+ var (
2342+ fakeServiceBroker * fakes.AutoFakeServiceBroker
2343+ req * http.Request
2344+ testServer * httptest.Server
2345+ )
2346+
2347+ BeforeEach (func () {
2348+ fakeServiceBroker = new (fakes.AutoFakeServiceBroker )
2349+ brokerAPI = brokerapi .New (fakeServiceBroker , brokerLogger , credentials )
2350+
2351+ testServer = httptest .NewServer (brokerAPI )
2352+ var err error
2353+ req , err = http .NewRequest ("GET" , testServer .URL + "/v2/catalog" , nil )
2354+ Expect (err ).NotTo (HaveOccurred ())
2355+ req .Header .Add ("X-Broker-API-Version" , "2.14" )
2356+ req .SetBasicAuth (credentials .Username , credentials .Password )
2357+ })
2358+
2359+ AfterEach (func () {
2360+ testServer .Close ()
2361+ })
2362+
2363+ When ("X-Correlation-ID is passed" , func () {
2364+ It ("Adds correlation id to the context" , func () {
2365+ const correlationID = "fake-correlation-id"
2366+ req .Header .Add ("X-Correlation-ID" , correlationID )
2367+
2368+ _ , err := http .DefaultClient .Do (req )
2369+ Expect (err ).NotTo (HaveOccurred ())
2370+
2371+ Expect (fakeServiceBroker .ServicesCallCount ()).To (Equal (1 ), "Services was not called" )
2372+ ctx := fakeServiceBroker .ServicesArgsForCall (0 )
2373+ Expect (ctx .Value (middlewares .CorrelationIDKey )).To (Equal (correlationID ))
2374+
2375+ })
2376+ })
2377+ When ("X-Correlation-ID is not passed" , func () {
2378+ It ("Generates correlation id and adds it to the context" , func () {
2379+ _ , err := http .DefaultClient .Do (req )
2380+ Expect (err ).NotTo (HaveOccurred ())
2381+
2382+ Expect (fakeServiceBroker .ServicesCallCount ()).To (Equal (1 ), "Services was not called" )
2383+ ctx := fakeServiceBroker .ServicesArgsForCall (0 )
2384+ Expect (ctx .Value (middlewares .CorrelationIDKey )).To (Not (BeNil ()))
2385+ })
2386+ })
2387+ })
23292388})
0 commit comments