From 1abe2aeb9fe40effca9d66a9bd02a65821913199 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Tue, 4 Sep 2018 11:44:46 -0700 Subject: [PATCH 1/2] c#: expose TryWaitForStateChangedAsync --- .../Grpc.Core.Tests/ChannelConnectivityTest.cs | 18 ++++++++++++++++++ src/csharp/Grpc.Core/Channel.cs | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs index a43040f01a3..b4b3b2d5ac4 100644 --- a/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs +++ b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs @@ -73,6 +73,24 @@ namespace Grpc.Core.Tests Assert.AreEqual(ChannelState.Ready, channel.State); } + [Test] + public async Task Channel_TryWaitForStateChangedAsync() + { + helper.UnaryHandler = new UnaryServerMethod((request, context) => + { + return Task.FromResult(request); + }); + + Assert.IsFalse(await channel.TryWaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10))); + + var stateChangedTask = channel.TryWaitForStateChangedAsync(channel.State); + + await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"); + + Assert.IsTrue(await stateChangedTask); + Assert.AreEqual(ChannelState.Ready, channel.State); + } + [Test] public async Task Channel_ConnectAsync() { diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs index 7912b06b718..4c89ed7393f 100644 --- a/src/csharp/Grpc.Core/Channel.cs +++ b/src/csharp/Grpc.Core/Channel.cs @@ -136,7 +136,7 @@ namespace Grpc.Core /// public async Task WaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null) { - var result = await WaitForStateChangedInternalAsync(lastObservedState, deadline).ConfigureAwait(false); + var result = await TryWaitForStateChangedAsync(lastObservedState, deadline).ConfigureAwait(false); if (!result) { throw new TaskCanceledException("Reached deadline."); @@ -147,7 +147,7 @@ namespace Grpc.Core /// Returned tasks completes once channel state has become different from /// given lastObservedState (true is returned) or if the wait has timed out (false is returned). /// - internal Task WaitForStateChangedInternalAsync(ChannelState lastObservedState, DateTime? deadline = null) + public Task TryWaitForStateChangedAsync(ChannelState lastObservedState, DateTime? deadline = null) { GrpcPreconditions.CheckArgument(lastObservedState != ChannelState.Shutdown, "Shutdown is a terminal state. No further state changes can occur."); From bc3e95c6b29860cc61de2f535355f24fde47e329 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Wed, 5 Sep 2018 08:10:52 -0700 Subject: [PATCH 2/2] simplify ChannelConnectivityTest --- .../ChannelConnectivityTest.cs | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs index b4b3b2d5ac4..0834ddadda9 100644 --- a/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs +++ b/src/csharp/Grpc.Core.Tests/ChannelConnectivityTest.cs @@ -57,18 +57,11 @@ namespace Grpc.Core.Tests [Test] public async Task Channel_WaitForStateChangedAsync() { - helper.UnaryHandler = new UnaryServerMethod((request, context) => - { - return Task.FromResult(request); - }); - Assert.ThrowsAsync(typeof(TaskCanceledException), - async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10))); + async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(0))); var stateChangedTask = channel.WaitForStateChangedAsync(channel.State); - - await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"); - + await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(5000)); await stateChangedTask; Assert.AreEqual(ChannelState.Ready, channel.State); } @@ -76,17 +69,10 @@ namespace Grpc.Core.Tests [Test] public async Task Channel_TryWaitForStateChangedAsync() { - helper.UnaryHandler = new UnaryServerMethod((request, context) => - { - return Task.FromResult(request); - }); - - Assert.IsFalse(await channel.TryWaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10))); + Assert.IsFalse(await channel.TryWaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(0))); var stateChangedTask = channel.TryWaitForStateChangedAsync(channel.State); - - await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"); - + await channel.ConnectAsync(DateTime.UtcNow.AddMilliseconds(5000)); Assert.IsTrue(await stateChangedTask); Assert.AreEqual(ChannelState.Ready, channel.State); }