Ejemplo n.º 1
0
        public async Task SayHelloClientStreamingTest()
        {
            // Arrange
            var mockGreeter = new Mock <IGreeter>();

            mockGreeter.Setup(m => m.Greet(It.IsAny <string>())).Returns((string s) => $"Hello {s}");
            var service = new TesterService(mockGreeter.Object);

            var callContext   = TestServerCallContext.Create();
            var requestStream = new TestAsyncStreamReader <HelloRequest>(callContext);

            // Act
            using var call = service.SayHelloClientStreaming(requestStream, callContext);

            requestStream.AddMessage(new HelloRequest {
                Name = "James"
            });
            requestStream.AddMessage(new HelloRequest {
                Name = "Jo"
            });
            requestStream.AddMessage(new HelloRequest {
                Name = "Lee"
            });
            requestStream.Complete();

            // Assert
            var response = await call;

            Assert.Equal("Hello James, Jo, Lee", response.Message);
        }
Ejemplo n.º 2
0
        public async Task SayHelloClientStreamingTest()
        {
            // Arrange
            var service = new TesterService(NullLoggerFactory.Instance);

            var callContext   = TestServerCallContext.Create();
            var requestStream = new TestAsyncStreamReader <HelloRequest>(callContext);

            // Act
            var call = service.SayHelloClientStreaming(requestStream, callContext);

            requestStream.AddMessage(new HelloRequest {
                Name = "James"
            });
            requestStream.AddMessage(new HelloRequest {
                Name = "Jo"
            });
            requestStream.AddMessage(new HelloRequest {
                Name = "Lee"
            });
            requestStream.Complete();

            // Assert
            var response = await call;

            Assert.AreEqual("Hello James, Jo, Lee", response.Message);
        }
Ejemplo n.º 3
0
        public async Task StreamingFromClientTest()
        {
            // init
            var server = new GreeterService(NullLoggerFactory.Instance);

            var callContext   = TestServerCallContext.Create();
            var requestStream = new TestAsyncStreamReader <ExampleRequest>(callContext);

            // act
            using var call = server.StreamingFromClient(requestStream, callContext);
            requestStream.AddMessage(new ExampleRequest {
                PageIndex = 1, PageSize = 10, IsDescending = false
            });
            requestStream.AddMessage(new ExampleRequest {
                PageIndex = 2, PageSize = 10, IsDescending = false
            });
            requestStream.AddMessage(new ExampleRequest {
                PageIndex = 3, PageSize = 10, IsDescending = false
            });
            requestStream.AddMessage(new ExampleRequest {
                PageIndex = 4, PageSize = 10, IsDescending = false
            });
            requestStream.Complete();

            // Assert
            var response = await call;

            Assert.IsTrue(response.Age > 1);
        }
Ejemplo n.º 4
0
        public async Task GreeterService_SayHelloBidirectionalStreaming_ReturnsCorrectResponse()
        {
            // Arrange
            var service        = new GreeterService(new Logger <GreeterService>(new NullLoggerFactory()));
            var callContext    = TestServerCallContext.Create();
            var requestStream  = new TestAsyncStreamReader <HelloRequest>(callContext);
            var responseStream = new TestServerStreamWriter <HelloReply>(callContext);

            // Act
            var call = service.SayHelloBidirectionalStreaming(requestStream, responseStream, callContext);

            // Assert
            requestStream.AddMessage(new HelloRequest {
                Name = "James"
            });
            Assert.AreEqual("Hello James", (await responseStream.ReadNextAsync()) !.Message);
            requestStream.AddMessage(new HelloRequest {
                Name = "Jo"
            });
            Assert.AreEqual("Hello Jo", (await responseStream.ReadNextAsync()) !.Message);
            requestStream.AddMessage(new HelloRequest {
                Name = "Lee"
            });
            Assert.AreEqual("Hello Lee", (await responseStream.ReadNextAsync()) !.Message);
            requestStream.Complete();
            await call;

            responseStream.Complete();
            Assert.IsNull(await responseStream.ReadNextAsync());
        }
Ejemplo n.º 5
0
        public async Task Create_ConfiguredGrpcEndpoint_EndpointReturnedFromReflectionService()
        {
            // Arrange
            var endpointRouteBuilder = new TestEndpointRouteBuilder();

            var services = ServicesHelpers.CreateServices();

            services.AddGrpcReflection();
            services.AddRouting();
            services.AddSingleton <EndpointDataSource>(s =>
            {
                return(new CompositeEndpointDataSource(endpointRouteBuilder.DataSources));
            });

            var serviceProvider = services.BuildServiceProvider(validateScopes: true);

            endpointRouteBuilder.ServiceProvider = serviceProvider;
            endpointRouteBuilder.MapGrpcService <GreeterService>();

            // Act
            var service = serviceProvider.GetRequiredService <ReflectionServiceImpl>();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter <ServerReflectionResponse>();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            // Assert
            Assert.AreEqual(1, writer.Responses.Count);
            Assert.AreEqual(1, writer.Responses[0].ListServicesResponse.Service.Count);

            var serviceResponse = writer.Responses[0].ListServicesResponse.Service[0];

            Assert.AreEqual("greet.Greeter", serviceResponse.Name);
        }
Ejemplo n.º 6
0
        public async Task StreamingBothWaysTest()
        {
            // init
            var server         = new GreeterService(NullLoggerFactory.Instance);
            var callContext    = TestServerCallContext.Create();
            var requstStream   = new TestAsyncStreamReader <ExampleRequest>(callContext);
            var responseStream = new TestServerStreamWriter <ExampleResponse>(callContext);

            // act
            using var call = server.StreamingBothWays(requstStream, responseStream, callContext);
            requstStream.AddMessage(new ExampleRequest {
                PageIndex = 1, PageSize = 10, IsDescending = false
            });
            Assert.IsTrue((await responseStream.ReadNextAsync()).Age > 1);
            requstStream.Complete();
            await call;

            responseStream.Complete();
            Assert.IsNull(await responseStream.ReadNextAsync());
        }
        public async Task Create_ConfiguredGrpcEndpoint_EndpointReturnedFromReflectionService()
        {
            // Arrange
            var services = new ServiceCollection();

            services.AddGrpc();
            services.AddLogging();
            var serviceProvider = services.BuildServiceProvider();

            var endpointRouteBuilder = new TestEndpointRouteBuilder(serviceProvider);

            endpointRouteBuilder.MapGrpcService <GreeterService>();

            var dataSource = new CompositeEndpointDataSource(endpointRouteBuilder.DataSources);

            var activator = new ReflectionGrpcServiceActivator(dataSource, NullLoggerFactory.Instance);

            // Act
            var service = activator.Create();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            // Assert
            Assert.AreEqual(1, writer.Responses.Count);
            Assert.AreEqual(1, writer.Responses[0].ListServicesResponse.Service.Count);

            var serviceResponse = writer.Responses[0].ListServicesResponse.Service[0];

            Assert.AreEqual("Greet.Greeter", serviceResponse.Name);
        }
Ejemplo n.º 8
0
        public void Chat_WorldIsSet(int id, string expectedWorldName)
        {
            var testMessage = new ChatMessage
            {
                Author          = "Dummy Author",
                Content         = "dummy text",
                AuthorId        = 0,
                AuthorId2       = 0,
                Avatar          = string.Empty,
                Id              = 0,
                World           = string.Empty,
                WorldId         = id,
                AdditionalFlags = 0,
            };
            var fakeServerCallContext = TestServerCallContext.Create("Chat", null, DateTime.UtcNow.AddHours(1), new Metadata(), CancellationToken.None, "127.0.0.1", null, null, (metadata) => TaskUtils.CompletedTask, () => new WriteOptions(), (writeOptions) => { });
            var fakeReader            = new TestAsyncStreamReader <ChatMessage>(testMessage);
            var fakeWriter            = new TestServerStreamWriter <ChatMessage>();

            _ = _connection.Chat(fakeReader, fakeWriter, fakeServerCallContext);
            fakeWriter.ReturnOnWrite().Wait();
            Assert.AreEqual(testMessage.World, expectedWorldName);
        }
Ejemplo n.º 9
0
        public void Chat_InputPassesToOutput()
        {
            var testMessage = new ChatMessage
            {
                Author          = "Dummy Author",
                Content         = "dummy text",
                AuthorId        = 0,
                AuthorId2       = 0,
                Avatar          = string.Empty,
                Id              = 0,
                World           = string.Empty,
                WorldId         = (int)PseudoWorld.Discord,
                AdditionalFlags = 0,
            };
            var fakeServerCallContext = TestServerCallContext.Create("Chat", null, DateTime.UtcNow.AddHours(1), new Metadata(), CancellationToken.None, "127.0.0.1", null, null, (metadata) => TaskUtils.CompletedTask, () => new WriteOptions(), (writeOptions) => { });
            var fakeReader            = new TestAsyncStreamReader <ChatMessage>(testMessage);
            var fakeWriter            = new TestServerStreamWriter <ChatMessage>();

            Task.Run(() => _connection.Chat(fakeReader, fakeWriter, fakeServerCallContext));
            fakeWriter.ReturnOnWrite().Wait(); // Internally, the transmitter calls a callback event which writes to this writer.
            Assert.AreEqual(testMessage, fakeWriter.Current);
        }
Ejemplo n.º 10
0
        public async Task SayHelloBidirectionStreamingTest()
        {
            // Arrange
            var mockGreeter = new Mock <IGreeter>();

            mockGreeter.Setup(m => m.Greet(It.IsAny <string>())).Returns((string s) => $"Hello {s}");
            var service = new TesterService(mockGreeter.Object);

            var callContext    = TestServerCallContext.Create();
            var requestStream  = new TestAsyncStreamReader <HelloRequest>(callContext);
            var responseStream = new TestServerStreamWriter <HelloReply>(callContext);

            // Act
            using var call = service.SayHelloBidirectionalStreaming(requestStream, responseStream, callContext);

            // Assert
            requestStream.AddMessage(new HelloRequest {
                Name = "James"
            });
            Assert.Equal("Hello James", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.AddMessage(new HelloRequest {
                Name = "Jo"
            });
            Assert.Equal("Hello Jo", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.AddMessage(new HelloRequest {
                Name = "Lee"
            });
            Assert.Equal("Hello Lee", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.Complete();

            await call;

            responseStream.Complete();

            Assert.Null(await responseStream.ReadNextAsync());
        }
Ejemplo n.º 11
0
        private static async Task <TestServerStreamWriter <ServerReflectionResponse> > ConfigureReflectionServerAndCallAsync(Action <IEndpointRouteBuilder> action)
        {
            // Arrange
            var endpointRouteBuilder = new TestEndpointRouteBuilder();

            var services = ServicesHelpers.CreateServices();

            services.AddGrpcReflection();
            services.AddRouting();
            services.AddSingleton <EndpointDataSource>(s =>
            {
                return(new CompositeEndpointDataSource(endpointRouteBuilder.DataSources));
            });

            var serviceProvider = services.BuildServiceProvider(validateScopes: true);

            endpointRouteBuilder.ServiceProvider = serviceProvider;

            action(endpointRouteBuilder);

            // Act
            var service = serviceProvider.GetRequiredService <ReflectionServiceImpl>();

            var reader = new TestAsyncStreamReader
            {
                Current = new ServerReflectionRequest
                {
                    ListServices = "" // list all services
                }
            };
            var writer  = new TestServerStreamWriter <ServerReflectionResponse>();
            var context = HttpContextServerCallContextHelper.CreateServerCallContext();

            await service.ServerReflectionInfo(reader, writer, context);

            return(writer);
        }
Ejemplo n.º 12
0
        public async Task SayHelloBidirectionStreamingTest()
        {
            // Arrange
            var service = new TesterService(CreateGreeterMock().Object);

            var callContext    = TestServerCallContext.Create();
            var requestStream  = new TestAsyncStreamReader <HelloRequest>(callContext);
            var responseStream = new TestServerStreamWriter <HelloReply>(callContext);

            // Act
            using var call = service.SayHelloBidirectionalStreaming(requestStream, responseStream, callContext);

            // Assert
            requestStream.AddMessage(new HelloRequest {
                Name = "James"
            });
            Assert.AreEqual("Hello James", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.AddMessage(new HelloRequest {
                Name = "Jo"
            });
            Assert.AreEqual("Hello Jo", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.AddMessage(new HelloRequest {
                Name = "Lee"
            });
            Assert.AreEqual("Hello Lee", (await responseStream.ReadNextAsync()) !.Message);

            requestStream.Complete();

            await call;

            responseStream.Complete();

            Assert.IsNull(await responseStream.ReadNextAsync());
        }