| 
					
				 | 
			
			
				@@ -77,6 +77,53 @@ namespace Grpc.Core.Interceptors.Tests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Assert.AreEqual("CB1B2B3A", stringBuilder.ToString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        [Test] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public void UserStateVisibleToAllInterceptors() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            object key1 = new object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            object value1 = new object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const string key2 = "Interceptor #2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const string value2 = "Important state"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var interceptor1 = new ServerCallContextInterceptor(ctx => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // state starts off empty 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.AreEqual(0, ctx.UserState.Count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ctx.UserState.Add(key1, value1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var interceptor2 = new ServerCallContextInterceptor(ctx => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // second interceptor can see state set by the first 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bool found = ctx.UserState.TryGetValue(key1, out object storedValue1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.IsTrue(found); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.AreEqual(value1, storedValue1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ctx.UserState.Add(key2, value2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var helper = new MockServiceHelper(Host); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // call handler can see all the state 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bool found = context.UserState.TryGetValue(key1, out object storedValue1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.IsTrue(found); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.AreEqual(value1, storedValue1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                found = context.UserState.TryGetValue(key2, out object storedValue2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.IsTrue(found); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Assert.AreEqual(value2, storedValue2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return Task.FromResult("PASS"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            helper.ServiceDefinition = helper.ServiceDefinition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .Intercept(interceptor2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .Intercept(interceptor1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var server = helper.GetServer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            server.Start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            var channel = helper.GetChannel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Assert.AreEqual("PASS", Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         [Test] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public void CheckNullInterceptorRegistrationFails() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         { 
			 |