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 (
|
const (
|
||||||
MTLSEnable = "MTLSEnable"
|
MTLSEnable = "MTLSEnable"
|
||||||
MTLSRootCA = "MTLSRootCA"
|
MTLSRootCA = "MTLSRootCA"
|
||||||
MTLSClientCert = "MTLSClientCert"
|
MTLSClientCert = "MTLSClientCert"
|
||||||
MTLSClientKey = "MTLSClientKey"
|
MTLSClientKey = "MTLSClientKey"
|
||||||
traceparentHeader = "traceparent"
|
|
||||||
tracestateHeader = "tracestate"
|
TraceparentHeaderKey = "traceparent"
|
||||||
|
TracestateHeaderKey = "tracestate"
|
||||||
|
TraceMetadataKey = "traceHeaders"
|
||||||
)
|
)
|
||||||
|
|
||||||
// HTTPSource is a binding for an http url endpoint invocation
|
// 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
|
h.errorIfNot2XX = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, ok := metadata.Properties["traceHeaders"]; ok {
|
h.traceHeaders = utils.IsTruthy(metadata.Properties[TraceMetadataKey])
|
||||||
h.traceHeaders = utils.IsTruthy(val)
|
|
||||||
} else {
|
|
||||||
// Default behavior
|
|
||||||
h.traceHeaders = false
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
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) {
|
func (h *HTTPSource) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) {
|
||||||
u := h.metadata.URL
|
u := h.metadata.URL
|
||||||
|
|
||||||
traceHeaders := h.traceHeaders
|
|
||||||
errorIfNot2XX := h.errorIfNot2XX // Default to the component config (default is true)
|
errorIfNot2XX := h.errorIfNot2XX // Default to the component config (default is true)
|
||||||
|
|
||||||
if req.Metadata != nil {
|
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.
|
// HTTP binding needs to inject traceparent header for proper tracing stack.
|
||||||
if traceHeaders {
|
if h.traceHeaders {
|
||||||
if tp, ok := req.Metadata[traceparentHeader]; ok {
|
if tp, ok := req.Metadata[TraceparentHeaderKey]; ok && tp != "" {
|
||||||
request.Header.Set(traceparentHeader, tp)
|
request.Header.Set(TraceparentHeaderKey, tp)
|
||||||
}
|
}
|
||||||
if ts, ok := req.Metadata[tracestateHeader]; ok {
|
if ts, ok := req.Metadata[TracestateHeaderKey]; ok && ts != "" {
|
||||||
request.Header.Set(tracestateHeader, ts)
|
request.Header.Set(TracestateHeaderKey, ts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,15 +177,17 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
||||||
req := TestCase{
|
req := TestCase{
|
||||||
input: "GET",
|
input: "GET",
|
||||||
operation: "get",
|
operation: "get",
|
||||||
metadata: map[string]string{"path": "/somewhere", "traceparent": "12345", "tracestate": "67890"},
|
metadata: map[string]string{"path": "/", "traceparent": "12345", "tracestate": "67890"},
|
||||||
path: "/somewhere",
|
path: "/",
|
||||||
err: "",
|
err: "",
|
||||||
statusCode: 200,
|
statusCode: 200,
|
||||||
}.ToInvokeRequest()
|
}.ToInvokeRequest()
|
||||||
_, err = hs.Invoke(context.Background(), &req)
|
_, err = hs.Invoke(context.Background(), &req)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Empty(t, handler.Headers["Traceparent"])
|
_, traceParentExists := handler.Headers["Traceparent"]
|
||||||
assert.Empty(t, handler.Headers["Tracestate"])
|
assert.False(t, traceParentExists)
|
||||||
|
_, traceStateExists := handler.Headers["Traceparent"]
|
||||||
|
assert.False(t, traceStateExists)
|
||||||
})
|
})
|
||||||
|
|
||||||
hs, err = InitBinding(s, map[string]string{"traceHeaders": "true"})
|
hs, err = InitBinding(s, map[string]string{"traceHeaders": "true"})
|
||||||
|
@ -195,8 +197,8 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
||||||
req := TestCase{
|
req := TestCase{
|
||||||
input: "GET",
|
input: "GET",
|
||||||
operation: "get",
|
operation: "get",
|
||||||
metadata: map[string]string{"path": "/somewhere", "traceparent": "12345", "tracestate": "67890"},
|
metadata: map[string]string{"path": "/", "traceparent": "12345", "tracestate": "67890"},
|
||||||
path: "/somewhere",
|
path: "/",
|
||||||
err: "",
|
err: "",
|
||||||
statusCode: 200,
|
statusCode: 200,
|
||||||
}.ToInvokeRequest()
|
}.ToInvokeRequest()
|
||||||
|
@ -205,6 +207,23 @@ func TestTraceHeadersForwarded(t *testing.T) {
|
||||||
assert.Equal(t, "12345", handler.Headers["Traceparent"])
|
assert.Equal(t, "12345", handler.Headers["Traceparent"])
|
||||||
assert.Equal(t, "67890", handler.Headers["Tracestate"])
|
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) {
|
func InitBindingForHTTPS(s *httptest.Server, extraProps map[string]string) (bindings.OutputBinding, error) {
|
||||||
|
|
Loading…
Reference in New Issue