private IReadOnlyList <Endpoint> MapEndpoints <TService>() where TService : class { var serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(); serviceCollection.AddGrpc(); serviceCollection.RemoveAll(typeof(IServiceMethodProvider <>)); serviceCollection.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IServiceMethodProvider <>), typeof(HttpApiServiceMethodProvider <>))); IEndpointRouteBuilder endpointRouteBuilder = new TestEndpointRouteBuilder(serviceCollection.BuildServiceProvider()); endpointRouteBuilder.MapGrpcService <TService>(); return(endpointRouteBuilder.DataSources.Single().Endpoints); }
private IReadOnlyList <Endpoint> MapEndpoints <TService>(Action <ILoggingBuilder>?configureLogging = null) where TService : class { var serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(log => { configureLogging?.Invoke(log); }); serviceCollection.AddGrpc(); serviceCollection.RemoveAll(typeof(IServiceMethodProvider <>)); serviceCollection.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IServiceMethodProvider <>), typeof(JsonTranscodingServiceMethodProvider <>))); IEndpointRouteBuilder endpointRouteBuilder = new TestEndpointRouteBuilder(serviceCollection.BuildServiceProvider()); endpointRouteBuilder.MapGrpcService <TService>(); return(endpointRouteBuilder.DataSources.Single().Endpoints); }
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); }
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); }
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); }