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