public async void HandleMappingsRequestAsync_MVCNotUsed_NoRoutes_ReturnsExpected() { var opts = new MappingsEndpointOptions(); var mopts = TestHelpers.GetManagementOptions(opts); ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appSettings); var config = configurationBuilder.Build(); var host = new HostingEnvironment() { EnvironmentName = "EnvironmentName" }; var middle = new MappingsEndpointMiddleware(null, opts, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/mappings"); await middle.HandleMappingsRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var reader = new StreamReader(context.Response.Body, Encoding.UTF8); var json = await reader.ReadLineAsync(); var expected = "{\"contexts\":{\"application\":{\"mappings\":{\"dispatcherServlets\":{\"dispatcherServlet\":[]}}}}}"; Assert.Equal(expected, json); }
/// <summary> /// Register the Mappings endpoint, OWIN middleware and options /// </summary> /// <param name="container">Autofac DI <see cref="ContainerBuilder"/></param> /// <param name="config">Your application's <see cref="IConfiguration"/></param> /// <param name="apiExplorer"><see cref="ApiExplorer"/> for iterating registered routes</param> public static void RegisterMappingsActuator(this ContainerBuilder container, IConfiguration config, IApiExplorer apiExplorer) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } if (apiExplorer == null) { throw new ArgumentNullException(nameof(apiExplorer)); } container.Register(c => { var options = new MappingsEndpointOptions(config); var mgmtOptions = c.Resolve <IEnumerable <IManagementOptions> >(); foreach (var mgmt in mgmtOptions) { mgmt.EndpointOptions.Add(options); } return(options); }).As <IMappingsOptions>().IfNotRegistered(typeof(IMappingsOptions)); container.RegisterInstance(apiExplorer); container.RegisterType <MappingsEndpoint>().SingleInstance(); container.RegisterType <MappingsEndpointOwinMiddleware>().SingleInstance(); }
public void IsMappingsRequest_ReturnsExpected() { var opts = new MappingsEndpointOptions(); var mopts = TestHelpers.GetManagementOptions(opts); ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appSettings); var config = configurationBuilder.Build(); var host = new HostingEnvironment() { EnvironmentName = "EnvironmentName" }; var middle = new MappingsEndpointMiddleware(null, opts, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/mappings"); Assert.True(middle.IsMappingsRequest(context)); var context2 = CreateRequest("PUT", "/cloudfoundryapplication/mappings"); Assert.False(middle.IsMappingsRequest(context2)); var context3 = CreateRequest("GET", "/cloudfoundryapplication/badpath"); Assert.False(middle.IsMappingsRequest(context3)); }
/// <summary> /// Add Route Mappings actuator endpoint to OWIN Pipeline /// </summary> /// <param name="builder">OWIN <see cref="IAppBuilder" /></param> /// <param name="config"><see cref="IConfiguration"/> of application for configuring refresh endpoint</param> /// <param name="apiExplorer">An <see cref="ApiExplorer"/> for iterating routes and their metadata</param> /// <param name="loggerFactory">For logging within the middleware</param> /// <returns>OWIN <see cref="IAppBuilder" /> with Refresh Endpoint added</returns> public static IAppBuilder UseMappingActuator(this IAppBuilder builder, IConfiguration config, IApiExplorer apiExplorer, ILoggerFactory loggerFactory = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } if (apiExplorer == null) { throw new ArgumentNullException(nameof(apiExplorer)); } IMappingsOptions options = new MappingsEndpointOptions(config); var mgmtOptions = ManagementOptions.Get(config); foreach (var mgmt in mgmtOptions) { mgmt.EndpointOptions.Add(options); } var logger = loggerFactory?.CreateLogger <EndpointOwinMiddleware <IList <string> > >(); return(builder.Use <MappingsEndpointOwinMiddleware>(options, mgmtOptions, apiExplorer, loggerFactory?.CreateLogger <MappingsEndpointOwinMiddleware>())); }
public void Constructor_InitializesWithDefaults() { var opts = new MappingsEndpointOptions(); Assert.Null(opts.Enabled); Assert.Equal("mappings", opts.Id); Assert.Equal(Permissions.RESTRICTED, opts.RequiredPermissions); }
public void RoutesByPathAndVerb() { var options = new MappingsEndpointOptions(); Assert.True(options.ExactMatch); Assert.Equal("/actuator/mappings", options.GetContextPath(new ActuatorManagementOptions())); Assert.Equal("/cloudfoundryapplication/mappings", options.GetContextPath(new CloudFoundryManagementOptions())); Assert.Null(options.AllowedVerbs); }
public static void UseMappingsActuator(IConfiguration configuration, IApiExplorer apiExplorer = null, ILoggerFactory loggerFactory = null) { var options = new MappingsEndpointOptions(configuration); _mgmtOptions.RegisterEndpointOptions(configuration, options); var ep = new MappingsEndpoint(options, CreateLogger <MappingsEndpoint>(loggerFactory)); var handler = new MappingsHandler(ep, SecurityServices, apiExplorer, _mgmtOptions, CreateLogger <MappingsHandler>(loggerFactory)); ConfiguredHandlers.Add(handler); }
/// <summary> /// Adds the services used by the Mappings actuator /// </summary> /// <param name="services">Reference to the service collection</param> /// <param name="configuration">Reference to the configuration system</param> /// <returns>A reference to the service collection</returns> public static IServiceCollection AddMappingsActuatorServices(this IServiceCollection services, IConfiguration configuration) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var options = new MappingsEndpointOptions(configuration); services.TryAddSingleton <IMappingsOptions>(options); services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IEndpointOptions), options)); services.TryAddSingleton <MappingsEndpoint>(); return(services); }