コード例 #1
0
        public async Task ServerMethodReturnsNull_FailureResponse()
        {
            // Arrange
            var method = Fixture.DynamicGrpc.AddClientStreamingMethod <Empty, CounterReply>((requestStream, context) => Task.FromResult <CounterReply>(null !));

            SetExpectedErrorsFilter(writeContext =>
            {
                return(writeContext.LoggerName == TestConstants.ServerCallHandlerTestName &&
                       writeContext.EventId.Name == "RpcConnectionError" &&
                       writeContext.State.ToString() == "Error status code 'Cancelled' raised." &&
                       GetRpcExceptionDetail(writeContext.Exception) == "No message returned from method.");
            });

            var requestMessage = new CounterRequest
            {
                Count = 1
            };

            var ms = new MemoryStream();

            MessageHelpers.WriteMessage(ms, requestMessage);

            // Act
            var response = await Fixture.Client.PostAsync(
                method.FullName,
                new GrpcStreamContent(ms)).DefaultTimeout();

            // Assert
            response.AssertIsSuccessfulGrpcRequest();
            response.AssertTrailerStatus(StatusCode.Cancelled, "No message returned from method.");
        }
コード例 #2
0
        public async Task ServerMethodReturnsNull_FailureResponse()
        {
            // Arrange
            var url = Fixture.DynamicGrpc.AddClientStreamingMethod <ClientStreamingMethodTests, Empty, CounterReply>((requestStream, context) => Task.FromResult <CounterReply>(null));

            SetExpectedErrorsFilter(writeContext =>
            {
                return(writeContext.LoggerName == typeof(ClientStreamingMethodTests).FullName &&
                       writeContext.EventId.Name == "RpcConnectionError" &&
                       writeContext.State.ToString() == "Error status code 'Cancelled' raised." &&
                       GetRpcExceptionDetail(writeContext.Exception) == "No message returned from method.");
            });

            var requestMessage = new CounterRequest
            {
                Count = 1
            };

            var ms = new MemoryStream();

            MessageHelpers.WriteMessage(ms, requestMessage);

            // Act
            var response = await Fixture.Client.PostAsync(
                url,
                new GrpcStreamContent(ms)).DefaultTimeout();

            // Assert
            response.AssertIsSuccessfulGrpcRequest();

            Assert.AreEqual(StatusCode.Cancelled.ToTrailerString(), Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.StatusTrailer].Single());
            Assert.AreEqual("No message returned from method.", Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.MessageTrailer].Single());
        }
コード例 #3
0
        public async Task ServerMethodReturnsNull_FailureResponse()
        {
            // Arrange
            var method = Fixture.DynamicGrpc.AddClientStreamingMethod <Empty, CounterReply>((requestStream, context) => Task.FromResult <CounterReply>(null !));

            var requestMessage = new CounterRequest
            {
                Count = 1
            };

            var ms = new MemoryStream();

            MessageHelpers.WriteMessage(ms, requestMessage);

            // Act
            var response = await Fixture.Client.PostAsync(
                method.FullName,
                new GrpcStreamContent(ms)).DefaultTimeout();

            // Assert
            response.AssertIsSuccessfulGrpcRequest();
            response.AssertTrailerStatus(StatusCode.Cancelled, "No message returned from method.");

            AssertHasLogRpcConnectionError(StatusCode.Cancelled, "No message returned from method.");
        }
コード例 #4
0
        public async Task ServerMethodReturnsNull_FailureResponse()
        {
            // Arrange
            SetExpectedErrorsFilter(writeContext =>
            {
                return(writeContext.LoggerName == typeof(CounterService).FullName &&
                       writeContext.EventId.Name == "RpcConnectionError" &&
                       writeContext.State.ToString() == "Error status code 'Cancelled' raised." &&
                       GetRpcExceptionDetail(writeContext.Exception) == "No message returned from method.");
            });

            var requestMessage = new CounterRequest
            {
                Count = 1
            };

            var ms = new MemoryStream();

            MessageHelpers.WriteMessage(ms, requestMessage);

            // Act
            var response = await Fixture.Client.PostAsync(
                "Count.Counter/IncrementCountReturnNull",
                new GrpcStreamContent(ms)).DefaultTimeout();

            // Assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            Assert.AreEqual(StatusCode.Cancelled.ToTrailerString(), Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.StatusTrailer].Single());
            Assert.AreEqual("No message returned from method.", Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.MessageTrailer].Single());
        }
コード例 #5
0
        public override async Task counterUntil(CounterRequest request, IServerStreamWriter <CounterResponse> responseStream, ServerCallContext context)
        {
            Console.WriteLine($"Server received the request : {request.ToString()}");

            for (int index = 1; index <= request.Number; index++)
            {
                await responseStream.WriteAsync(new CounterResponse
                {
                    Result = index
                });
            }
        }
コード例 #6
0
        public override async Task StartCounter(CounterRequest request, IServerStreamWriter <CounterResponse> responseStream, ServerCallContext context)
        {
            var count = request.Start;

            while (!context.CancellationToken.IsCancellationRequested)
            {
                await responseStream.WriteAsync(new CounterResponse
                {
                    Count = ++count
                });

                await Task.Delay(TimeSpan.FromSeconds(1));
            }
        }
コード例 #7
0
        public override async Task GetCount(CounterRequest request, IServerStreamWriter <CounterReply> responseStream, ServerCallContext context)
        {
            int value = request.InitialValue;

            while ((request.MaximumValue == 0 || value <= request.MaximumValue) & !context.CancellationToken.IsCancellationRequested)
            {
                await responseStream.WriteAsync(new()
                {
                    CurrentValue = value
                });

                await Task.Delay(request.DelayDuration.ToTimeSpan());

                value++;
            }
        }
コード例 #8
0
        public async Task ServerMethodReturnsNull_FailureResponse()
        {
            // Arrange
            var requestMessage = new CounterRequest
            {
                Count = 1
            };

            var ms = new MemoryStream();

            MessageHelpers.WriteMessage(ms, requestMessage);

            // Act
            var response = await Fixture.Client.PostAsync(
                "Count.Counter/IncrementCountReturnNull",
                new StreamContent(ms)).DefaultTimeout();

            // Assert
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

            Assert.AreEqual(StatusCode.Cancelled.ToTrailerString(), Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.StatusTrailer].Single());
            Assert.AreEqual("Cancelled", Fixture.TrailersContainer.Trailers[GrpcProtocolConstants.MessageTrailer].Single());
        }