Changes from PR feedback
Signed-off-by: Drew Robbins <drew@drewby.com>
This commit is contained in:
parent
dd3eae1bd5
commit
f8d69c93d2
|
@ -38,12 +38,14 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
MTLSEnable = "MTLSEnable"
|
||||
MTLSRootCA = "MTLSRootCA"
|
||||
MTLSClientCert = "MTLSClientCert"
|
||||
MTLSClientKey = "MTLSClientKey"
|
||||
traceparentHeader = "traceparent"
|
||||
tracestateHeader = "tracestate"
|
||||
MTLSEnable = "MTLSEnable"
|
||||
MTLSRootCA = "MTLSRootCA"
|
||||
MTLSClientCert = "MTLSClientCert"
|
||||
MTLSClientKey = "MTLSClientKey"
|
||||
|
||||
TraceparentHeaderKey = "traceparent"
|
||||
TracestateHeaderKey = "tracestate"
|
||||
TraceMetadataKey = "traceHeaders"
|
||||
)
|
||||
|
||||
// HTTPSource is a binding for an http url endpoint invocation
|
||||
|
@ -107,12 +109,7 @@ func (h *HTTPSource) Init(metadata bindings.Metadata) error {
|
|||
h.errorIfNot2XX = true
|
||||
}
|
||||
|
||||
if val, ok := metadata.Properties["traceHeaders"]; ok {
|
||||
h.traceHeaders = utils.IsTruthy(val)
|
||||
} else {
|
||||
// Default behavior
|
||||
h.traceHeaders = false
|
||||
}
|
||||
h.traceHeaders = utils.IsTruthy(metadata.Properties[TraceMetadataKey])
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -196,7 +193,6 @@ func (h *HTTPSource) Operations() []bindings.OperationKind {
|
|||
func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) {
|
||||
u := h.metadata.URL
|
||||
|
||||
traceHeaders := h.traceHeaders
|
||||
errorIfNot2XX := h.errorIfNot2XX // Default to the component config (default is true)
|
||||
|
||||
if req.Metadata != nil {
|
||||
|
@ -246,12 +242,12 @@ func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*
|
|||
}
|
||||
|
||||
// HTTP binding needs to inject traceparent header for proper tracing stack.
|
||||
if traceHeaders {
|
||||
if tp, ok := req.Metadata[traceparentHeader]; ok {
|
||||
request.Header.Set(traceparentHeader, tp)
|
||||
if h.traceHeaders {
|
||||
if tp, ok := req.Metadata[TraceparentHeaderKey]; ok && tp != "" {
|
||||
request.Header.Set(TraceparentHeaderKey, tp)
|
||||
}
|
||||
if ts, ok := req.Metadata[tracestateHeader]; ok {
|
||||
request.Header.Set(tracestateHeader, ts)
|
||||
if ts, ok := req.Metadata[TracestateHeaderKey]; ok && ts != "" {
|
||||
request.Header.Set(TracestateHeaderKey, ts)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -177,15 +177,17 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
|||
req := TestCase{
|
||||
input: "GET",
|
||||
operation: "get",
|
||||
metadata: map[string]string{"path": "/somewhere", "traceparent": "12345", "tracestate": "67890"},
|
||||
path: "/somewhere",
|
||||
metadata: map[string]string{"path": "/", "traceparent": "12345", "tracestate": "67890"},
|
||||
path: "/",
|
||||
err: "",
|
||||
statusCode: 200,
|
||||
}.ToInvokeRequest()
|
||||
_, err = hs.Invoke(context.Background(), &req)
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, handler.Headers["Traceparent"])
|
||||
assert.Empty(t, handler.Headers["Tracestate"])
|
||||
_, traceParentExists := handler.Headers["Traceparent"]
|
||||
assert.False(t, traceParentExists)
|
||||
_, traceStateExists := handler.Headers["Traceparent"]
|
||||
assert.False(t, traceStateExists)
|
||||
})
|
||||
|
||||
hs, err = InitBinding(s, map[string]string{"traceHeaders": "true"})
|
||||
|
@ -195,8 +197,8 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
|||
req := TestCase{
|
||||
input: "GET",
|
||||
operation: "get",
|
||||
metadata: map[string]string{"path": "/somewhere", "traceparent": "12345", "tracestate": "67890"},
|
||||
path: "/somewhere",
|
||||
metadata: map[string]string{"path": "/", "traceparent": "12345", "tracestate": "67890"},
|
||||
path: "/",
|
||||
err: "",
|
||||
statusCode: 200,
|
||||
}.ToInvokeRequest()
|
||||
|
@ -205,6 +207,23 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
|||
assert.Equal(t, "12345", handler.Headers["Traceparent"])
|
||||
assert.Equal(t, "67890", handler.Headers["Tracestate"])
|
||||
})
|
||||
|
||||
t.Run("trace headers should not be forwarded if empty", func(t *testing.T) {
|
||||
req := TestCase{
|
||||
input: "GET",
|
||||
operation: "get",
|
||||
metadata: map[string]string{"path": "/", "traceparent": "", "tracestate": ""},
|
||||
path: "/",
|
||||
err: "",
|
||||
statusCode: 200,
|
||||
}.ToInvokeRequest()
|
||||
_, err = hs.Invoke(context.Background(), &req)
|
||||
assert.NoError(t, err)
|
||||
_, traceParentExists := handler.Headers["Traceparent"]
|
||||
assert.False(t, traceParentExists)
|
||||
_, traceStateExists := handler.Headers["Traceparent"]
|
||||
assert.False(t, traceStateExists)
|
||||
})
|
||||
}
|
||||
|
||||
func InitBindingForHTTPS(s *httptest.Server, extraProps map[string]string) (bindings.OutputBinding, error) {
|
||||
|
|
Loading…
Reference in New Issue