func NewProxy(args ProxyArgs) Proxy { routeServiceConfig := routeservice.NewRouteServiceConfig(args.Logger, args.RouteServiceEnabled, args.RouteServiceTimeout, args.Crypto, args.CryptoPrev, args.RouteServiceRecommendHttps) p := &proxy{ accessLogger: args.AccessLogger, traceKey: args.TraceKey, ip: args.Ip, logger: args.Logger, registry: args.Registry, reporter: args.Reporter, transport: &http.Transport{ Dial: func(network, addr string) (net.Conn, error) { conn, err := net.DialTimeout(network, addr, 5*time.Second) if err != nil { return conn, err } if args.EndpointTimeout > 0 { err = conn.SetDeadline(time.Now().Add(args.EndpointTimeout)) } return conn, err }, DisableKeepAlives: true, DisableCompression: true, TLSClientConfig: args.TLSConfig, }, secureCookies: args.SecureCookies, heartbeatOK: args.HeartbeatOK, // 1->true, 0->false routeServiceConfig: routeServiceConfig, extraHeadersToLog: args.ExtraHeadersToLog, routeServiceRecommendHttps: args.RouteServiceRecommendHttps, healthCheckUserAgent: args.HealthCheckUserAgent, forceForwardedProtoHttps: args.ForceForwardedProtoHttps, defaultLoadBalance: args.DefaultLoadBalance, } n := negroni.New() n.Use(&proxyWriterHandler{}) n.Use(handlers.NewAccessLog(args.AccessLogger, args.ExtraHeadersToLog)) n.Use(handlers.NewHealthcheck(args.HealthCheckUserAgent, p.heartbeatOK, args.Logger)) n.Use(handlers.NewZipkin(args.EnableZipkin, args.ExtraHeadersToLog, args.Logger)) n.UseHandler(p) handlers := &proxyHandler{ handlers: n, proxy: p, } return handlers }
BeforeEach(func() { headersToLog = &[]string{} logger = lagertest.NewTestLogger("zipkin") req = test_util.NewRequest("GET", "example.com", "/", nil) resp = httptest.NewRecorder() nextCalled = false }) AfterEach(func() { Expect(nextCalled).To(BeTrue(), "Expected the next handler to be called.") }) Context("with Zipkin enabled", func() { BeforeEach(func() { handler = handlers.NewZipkin(true, headersToLog, logger) }) It("sets zipkin headers", func() { handler.ServeHTTP(resp, req, nextHandler) Expect(req.Header.Get(router_http.B3SpanIdHeader)).ToNot(BeEmpty()) Expect(req.Header.Get(router_http.B3TraceIdHeader)).ToNot(BeEmpty()) Expect(req.Header.Get(router_http.B3ParentSpanIdHeader)).To(BeEmpty()) }) It("adds zipkin headers to access log record", func() { handler.ServeHTTP(resp, req, nextHandler) Expect(*headersToLog).To(ContainElement(router_http.B3SpanIdHeader)) Expect(*headersToLog).To(ContainElement(router_http.B3TraceIdHeader)) Expect(*headersToLog).To(ContainElement(router_http.B3ParentSpanIdHeader)) })