11package org .hypertrace .core .grpcutils .context ;
22
3+ import static org .junit .jupiter .api .Assertions .assertDoesNotThrow ;
34import static org .junit .jupiter .api .Assertions .assertEquals ;
45
56import com .google .common .collect .ImmutableList ;
7+ import io .grpc .Metadata ;
68import java .util .List ;
79import java .util .Map ;
810import java .util .Optional ;
11+ import java .util .Set ;
12+ import java .util .UUID ;
13+ import org .junit .jupiter .api .Assertions ;
914import org .junit .jupiter .api .Test ;
1015
1116/** Unit tests for {@link RequestContext} and utility methods in it. */
@@ -45,11 +50,18 @@ void testGetRequestHeaders() {
4550 @ Test
4651 void testCreateForTenantId () {
4752 RequestContext requestContext = RequestContext .forTenantId (TENANT_ID );
53+ String requestId = requestContext .getRequestId ().orElseThrow ();
54+ assertDoesNotThrow (() -> UUID .fromString (requestId ));
4855 assertEquals (Optional .of (TENANT_ID ), requestContext .getTenantId ());
4956 assertEquals (
5057 Optional .of (TENANT_ID ), requestContext .get (RequestContextConstants .TENANT_ID_HEADER_KEY ));
5158 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 ());
5365 }
5466
5567 @ Test
@@ -67,4 +79,81 @@ void testRolesArePropagatedInRequestContext() {
6779 List <String > actualRoles = requestContext .getRoles ("roles" );
6880 assertEquals (expectedRoles , actualRoles );
6981 }
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+ }
70159}
0 commit comments