public async Task Invoke_AwaitedSuccess_ReleaseCalled() { // Arrange var methodTcs = new TaskCompletionSource <TestMessage>(TaskCreationOptions.RunContinuationsAsynchronously); var methodResult = new TestMessage(); var serviceActivator = new TestGrpcServiceActivator <TestService>(); var invoker = new UnaryServerMethodInvoker <TestService, TestMessage, TestMessage>( (service, reader, context) => methodTcs.Task, new Method <TestMessage, TestMessage>(MethodType.Unary, "test", "test", _marshaller, _marshaller), HttpContextServerCallContextHelper.CreateMethodOptions(), serviceActivator); var httpContext = HttpContextHelpers.CreateContext(); // Act var task = invoker.Invoke(httpContext, HttpContextServerCallContextHelper.CreateServerCallContext(), new TestMessage()); Assert.False(task.IsCompleted); methodTcs.SetResult(methodResult); var awaitedResult = await task; // Assert Assert.AreEqual(methodResult, awaitedResult); Assert.True(serviceActivator.Released); }
public void Invoke_ThrowException_ReleaseCalledAndErrorThrown() { // Arrange var serviceActivator = new TestGrpcServiceActivator <TestService>(); var ex = new Exception("Exception!"); var invoker = new UnaryServerMethodInvoker <TestService, TestMessage, TestMessage>( (service, reader, context) => throw ex, new Method <TestMessage, TestMessage>(MethodType.Unary, "test", "test", _marshaller, _marshaller), HttpContextServerCallContextHelper.CreateMethodOptions(), serviceActivator); var httpContext = HttpContextHelpers.CreateContext(); // Act var task = invoker.Invoke(httpContext, HttpContextServerCallContextHelper.CreateServerCallContext(), new TestMessage()); // Assert Assert.True(serviceActivator.Released); Assert.True(task.IsFaulted); Assert.AreEqual(ex, task.Exception !.InnerException); }