public async Task SequenceEnumerableTest() { var builder = new RpcServiceDefinitionsBuilder(); builder.RegisterService <ISequenceService>(); var(server, connection) = this.CreateServerAndConnection(builder); var sequenceServiceImpl = new SequenceServiceImpl(); using (var publishedService = server.ServicePublisher.PublishSingleton <ISequenceService>(sequenceServiceImpl)) { try { server.Start(); var sequenceService = connection.GetServiceSingleton <ISequenceService>(); int lastNo = 0; await foreach (var sequenceData in sequenceService.GetSequenceAsEnumerable(5, TimeSpan.FromMilliseconds(0), 0)) { Assert.AreEqual(lastNo + 1, sequenceData.SequenceNo); lastNo = sequenceData.SequenceNo; } Assert.AreEqual(5, lastNo); } finally { await server.ShutdownAsync(); } } }
public async Task SequenceEnumerableTimeoutTest() { var builder = new RpcServiceDefinitionsBuilder(); builder.RegisterService <ISequenceService>(); var(server, connection) = this.CreateServerAndConnection(builder, null, o => { o.StreamingCallTimeout = TimeSpan.FromSeconds(1); }); var sequenceServiceImpl = new SequenceServiceImpl(); using var publishedService = server.ServicePublisher.PublishSingleton <ISequenceService>(sequenceServiceImpl); try { server.Start(); var sequenceService = connection.GetServiceSingleton <ISequenceService>(); var exceptionExpression = Is.InstanceOf <TimeoutException>(); if (this.ConnectionType == RpcConnectionType.NetGrpc) { // It seems like NetGrpc throws OperationCancelledException instead of DeadlineExceeded RpcException (but // it also seems a bit timing dependent). Let's allow both exceptions. exceptionExpression = exceptionExpression.Or.InstanceOf <OperationCanceledException>(); } DateTime connectStart = DateTime.UtcNow; // Force connection // sequenceService.SimpleCall(); var connectDuration = DateTime.UtcNow - connectStart; Console.WriteLine("Connect duration: " + connectDuration); DateTime start = DateTime.UtcNow; int lastNo = 0; Assert.ThrowsAsync(exceptionExpression, async() => { async Task GetSequence() { await foreach (var sequenceData in sequenceService.GetSequenceAsEnumerable(2000, TimeSpan.FromMilliseconds(1), 1)) { Assert.AreEqual(lastNo + 1, sequenceData.SequenceNo); lastNo = sequenceData.SequenceNo; } } await GetSequence().DefaultTimeout(); }); TimeSpan duration = DateTime.UtcNow - start; Assert.GreaterOrEqual(duration, TimeSpan.FromSeconds(1)); Assert.Less(duration, TimeSpan.FromSeconds(2)); Assert.Greater(lastNo, 10); }