Skip to content

Commit 7a5f683

Browse files
grpc: Add external dependencies to context from grpc metadata
1 parent 864ff8a commit 7a5f683

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

grpc/middleware.go

+20
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"encoding/gob"
88
"strings"
99

10+
"github.com/pace/bricks/http/middleware"
1011
"github.com/pace/bricks/pkg/tracking/utm"
1112
"google.golang.org/grpc/metadata"
1213
)
@@ -36,3 +37,22 @@ func EncodeContextWithUTMData(parentCtx context.Context) context.Context {
3637
}
3738
return metadata.AppendToOutgoingContext(parentCtx, utmMetadataKey, w.String())
3839
}
40+
41+
// AddExternalDependencyMetadataToContext adds external dependencies to the context if they are present in the metadata.
42+
func AddExternalDependencyMetadataToContext(ctx context.Context, md metadata.MD) context.Context {
43+
// If there are no external dependencies in the metadata, we can return the context as is.
44+
externalDependencies := md.Get(MetadataKeyExternalDependencies)
45+
if len(externalDependencies) == 0 {
46+
return ctx
47+
}
48+
49+
// If there are external dependencies in the metadata, we need to parse them and add them to the context.
50+
edc := middleware.ExternalDependencyContextFromContext(ctx)
51+
if edc == nil {
52+
edc = &middleware.ExternalDependencyContext{}
53+
}
54+
55+
edc.Parse(externalDependencies[0])
56+
57+
return middleware.ContextWithExternalDependency(ctx, edc)
58+
}

grpc/middleware_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"context"
77
"testing"
88

9+
"github.com/pace/bricks/http/middleware"
910
"github.com/pace/bricks/pkg/tracking/utm"
1011
"github.com/stretchr/testify/require"
1112
"google.golang.org/grpc/metadata"
@@ -31,3 +32,29 @@ func TestEncodeContextWithUTMData(t *testing.T) {
3132
require.True(t, exists)
3233
require.Equal(t, data, utmData)
3334
}
35+
36+
func TestAddExternalDependencyMetadataToContext(t *testing.T) {
37+
md := metadata.New(map[string]string{
38+
MetadataKeyExternalDependencies: "dep1:1,dep2:2,dep3:3",
39+
})
40+
ctx := context.Background()
41+
ctx = AddExternalDependencyMetadataToContext(ctx, md)
42+
edc := middleware.ExternalDependencyContextFromContext(ctx)
43+
require.NotNil(t, edc)
44+
require.Equal(t, "dep1:1,dep2:2,dep3:3", edc.String())
45+
46+
ctx = AddExternalDependencyMetadataToContext(ctx, metadata.New(map[string]string{
47+
MetadataKeyExternalDependencies: "dep4:4,dep5:5,dep6:6",
48+
}))
49+
edc = middleware.ExternalDependencyContextFromContext(ctx)
50+
require.NotNil(t, edc)
51+
require.Equal(t, "dep1:1,dep2:2,dep3:3,dep4:4,dep5:5,dep6:6", edc.String())
52+
}
53+
54+
func TestAddExternalDependencyMetadataToContext_NoDependencies(t *testing.T) {
55+
md := metadata.New(map[string]string{})
56+
ctx := context.Background()
57+
ctx = AddExternalDependencyMetadataToContext(ctx, md)
58+
edc := middleware.ExternalDependencyContextFromContext(ctx)
59+
require.Nil(t, edc)
60+
}

0 commit comments

Comments
 (0)