1
1
package org .hypertrace .core .grpcutils .context ;
2
2
3
+ import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
3
4
import static org .junit .jupiter .api .Assertions .assertEquals ;
4
5
5
6
import com .google .common .collect .ImmutableList ;
7
+ import io .grpc .Metadata ;
6
8
import java .util .List ;
7
9
import java .util .Map ;
8
10
import java .util .Optional ;
11
+ import java .util .Set ;
12
+ import java .util .UUID ;
13
+ import org .junit .jupiter .api .Assertions ;
9
14
import org .junit .jupiter .api .Test ;
10
15
11
16
/** Unit tests for {@link RequestContext} and utility methods in it. */
@@ -45,11 +50,18 @@ void testGetRequestHeaders() {
45
50
@ Test
46
51
void testCreateForTenantId () {
47
52
RequestContext requestContext = RequestContext .forTenantId (TENANT_ID );
53
+ String requestId = requestContext .getRequestId ().orElseThrow ();
54
+ assertDoesNotThrow (() -> UUID .fromString (requestId ));
48
55
assertEquals (Optional .of (TENANT_ID ), requestContext .getTenantId ());
49
56
assertEquals (
50
57
Optional .of (TENANT_ID ), requestContext .get (RequestContextConstants .TENANT_ID_HEADER_KEY ));
51
58
assertEquals (
52
- Map .of (RequestContextConstants .TENANT_ID_HEADER_KEY , TENANT_ID ), requestContext .getAll ());
59
+ Optional .of (requestId ), requestContext .get (RequestContextConstants .REQUEST_ID_HEADER_KEY ));
60
+ assertEquals (
61
+ Set .of (
62
+ RequestContextConstants .TENANT_ID_HEADER_KEY ,
63
+ RequestContextConstants .REQUEST_ID_HEADER_KEY ),
64
+ requestContext .getAll ().keySet ());
53
65
}
54
66
55
67
@ Test
@@ -67,4 +79,81 @@ void testRolesArePropagatedInRequestContext() {
67
79
List <String > actualRoles = requestContext .getRoles ("roles" );
68
80
assertEquals (expectedRoles , actualRoles );
69
81
}
82
+
83
+ @ Test
84
+ public void testMetadataKeys () {
85
+ Metadata metadata = new Metadata ();
86
+ metadata .put (
87
+ Metadata .Key .of ("authorization" , Metadata .ASCII_STRING_MARSHALLER ),
88
+ "Bearer Some-bearer-auth" );
89
+ metadata .put (RequestContextConstants .TENANT_ID_METADATA_KEY , "test-tenant-id" );
90
+
91
+ RequestContext requestContext = RequestContext .fromMetadata (metadata );
92
+
93
+ Assertions .assertEquals (2 , requestContext .getAll ().size ());
94
+ // GRPC Metadata keys are lower cased during creation.
95
+ Assertions .assertEquals ("Bearer Some-bearer-auth" , requestContext .get ("authorization" ).get ());
96
+ Assertions .assertEquals (
97
+ "test-tenant-id" ,
98
+ requestContext .get (RequestContextConstants .TENANT_ID_METADATA_KEY .name ()).get ());
99
+
100
+ metadata = new Metadata ();
101
+ metadata .put (
102
+ Metadata .Key .of ("authorization" , Metadata .ASCII_STRING_MARSHALLER ),
103
+ "Bearer Some-bearer-auth" );
104
+ metadata .put (RequestContextConstants .TENANT_ID_METADATA_KEY , "test-tenant-id" );
105
+ metadata .put (
106
+ Metadata .Key .of ("x-some-other-header" , Metadata .ASCII_STRING_MARSHALLER ),
107
+ "Some-other-header-val" );
108
+
109
+ requestContext = RequestContext .fromMetadata (metadata );
110
+
111
+ Assertions .assertEquals (2 , requestContext .getAll ().size ());
112
+ Assertions .assertEquals ("Bearer Some-bearer-auth" , requestContext .get ("authorization" ).get ());
113
+ Assertions .assertEquals (
114
+ "test-tenant-id" ,
115
+ requestContext .get (RequestContextConstants .TENANT_ID_METADATA_KEY .name ()).get ());
116
+
117
+ // Test that header keys are lowercased
118
+ metadata = new Metadata ();
119
+ metadata .put (
120
+ Metadata .Key .of ("Authorization" , Metadata .ASCII_STRING_MARSHALLER ),
121
+ "Bearer Some-bearer-auth-2" );
122
+ metadata .put (
123
+ Metadata .Key .of ("X-tenant-Id" , Metadata .ASCII_STRING_MARSHALLER ), "test-tenant-id-2" );
124
+ metadata .put (
125
+ Metadata .Key .of ("X-Some-Other-Header" , Metadata .ASCII_STRING_MARSHALLER ),
126
+ "Some-other-header-val-2" );
127
+
128
+ requestContext = RequestContext .fromMetadata (metadata );
129
+
130
+ Assertions .assertEquals (2 , requestContext .getAll ().size ());
131
+ Assertions .assertEquals ("Bearer Some-bearer-auth-2" , requestContext .get ("authorization" ).get ());
132
+ Assertions .assertEquals (
133
+ "test-tenant-id-2" ,
134
+ requestContext .get (RequestContextConstants .TENANT_ID_METADATA_KEY .name ()).get ());
135
+
136
+ metadata = new Metadata ();
137
+ metadata .put (
138
+ Metadata .Key .of ("Authorization" , Metadata .ASCII_STRING_MARSHALLER ),
139
+ "Bearer Some-bearer-auth-3" );
140
+ metadata .put (
141
+ Metadata .Key .of ("X-tenant-Id" , Metadata .ASCII_STRING_MARSHALLER ), "test-tenant-id-3" );
142
+ metadata .put (
143
+ Metadata .Key .of ("X-Some-Other-Header" , Metadata .ASCII_STRING_MARSHALLER ),
144
+ "Some-other-header-val-3" );
145
+ metadata .put (
146
+ Metadata .Key .of ("grpc-trace-bin" , Metadata .BINARY_BYTE_MARSHALLER ),
147
+ "AAARf5ZpQwlN/8FVe1axOPlaAQIdRU/Y8j0LAgE" .getBytes ());
148
+
149
+ requestContext = RequestContext .fromMetadata (metadata );
150
+
151
+ Assertions .assertEquals (3 , requestContext .getAll ().size ());
152
+ Assertions .assertEquals ("Bearer Some-bearer-auth-3" , requestContext .get ("authorization" ).get ());
153
+ Assertions .assertEquals (
154
+ "test-tenant-id-3" ,
155
+ requestContext .get (RequestContextConstants .TENANT_ID_METADATA_KEY .name ()).get ());
156
+ Assertions .assertEquals (
157
+ "AAARf5ZpQwlN/8FVe1axOPlaAQIdRU/Y8j0LAgE" , requestContext .get ("grpc-trace-bin" ).get ());
158
+ }
70
159
}
0 commit comments