|
|
@ -77,6 +77,53 @@ namespace Grpc.Core.Interceptors.Tests |
|
|
|
Assert.AreEqual("CB1B2B3A", stringBuilder.ToString()); |
|
|
|
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] |
|
|
|
[Test] |
|
|
|
public void CheckNullInterceptorRegistrationFails() |
|
|
|
public void CheckNullInterceptorRegistrationFails() |
|
|
|
{ |
|
|
|
{ |
|
|
|