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));
        }
示例#4
0
        /// <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>()));
        }
示例#5
0
        public void Constructor_InitializesWithDefaults()
        {
            var opts = new MappingsEndpointOptions();

            Assert.Null(opts.Enabled);
            Assert.Equal("mappings", opts.Id);
            Assert.Equal(Permissions.RESTRICTED, opts.RequiredPermissions);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }