public void Constructor_InitializesWithDefaults() { var opts = new HypermediaEndpointOptions(); Assert.Equal(string.Empty, opts.Id); Assert.Equal(string.Empty, opts.Path); }
public static void UseHypermediaActuator(IConfiguration configuration, ILoggerFactory loggerFactory = null) { var options = new HypermediaEndpointOptions(configuration); var managementOptions = _mgmtOptions.OfType <ActuatorManagementOptions>().SingleOrDefault(); if (managementOptions == null) { managementOptions = new ActuatorManagementOptions(configuration); _mgmtOptions.Add(managementOptions); } managementOptions.EndpointOptions.Add(options); var ep = new ActuatorEndpoint(options, _mgmtOptions, CreateLogger <ActuatorEndpoint>(loggerFactory)); var handler = new ActuatorHypermediaHandler(ep, SecurityServices, _mgmtOptions, CreateLogger <ActuatorHypermediaHandler>(loggerFactory)); ConfiguredHandlers.Add(handler); if (ConfiguredHandlers.OfType <CloudFoundryCorsHandler>().Any()) { return; } var handler2 = new CloudFoundryCorsHandler(options, SecurityServices, _mgmtOptions, CreateLogger <CloudFoundryCorsHandler>(loggerFactory)); ConfiguredHandlers.Add(handler2); }
public void Constructor_BindsConfigurationCorrectly() { var appsettings = new Dictionary <string, string>() { ["management:endpoints:enabled"] = "false", ["management:endpoints:path"] = "/cloudfoundryapplication", ["management:endpoints:info:enabled"] = "true", ["management:endpoints:info:path"] = "infopath", ["management:endpoints:cloudfoundry:validatecertificates"] = "false", ["management:endpoints:cloudfoundry:enabled"] = "true" }; ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appsettings); var config = configurationBuilder.Build(); var opts = new InfoEndpointOptions(config); var actOpts = new HypermediaEndpointOptions(config); Assert.Equal("info", opts.Id); Assert.Equal("infopath", opts.Path); }
/// <summary> /// Register the <see cref="ActuatorEndpoint"/>, OWIN middleware and options /// </summary> /// <param name="container">Autofac DI <see cref="ContainerBuilder"/></param> /// <param name="config">Your application's <see cref="IConfiguration"/></param> public static void RegisterHypermediaActuator(this ContainerBuilder container, IConfiguration config) { if (container == null) { throw new ArgumentNullException(nameof(container)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } container.RegisterInstance(new ActuatorManagementOptions(config)) .SingleInstance() .As <IManagementOptions>(); container.Register(c => { var options = new HypermediaEndpointOptions(config); var mgmtOptions = c.Resolve <IEnumerable <IManagementOptions> >().OfType <ActuatorManagementOptions>().Single(); mgmtOptions.EndpointOptions.Add(options); return(options); }).As <IActuatorHypermediaOptions>().SingleInstance(); container.RegisterType <ActuatorEndpoint>().SingleInstance(); container.RegisterType <ActuatorHypermediaEndpointOwinMiddleware>().SingleInstance(); }
public void Invoke_HonorsEndpointEnabled_ReturnsExpectedLinks() { var infoOpts = new InfoEndpointOptions { Enabled = false }; var cloudOpts = new HypermediaEndpointOptions(); var mgmtOptions = new ActuatorManagementOptions(); mgmtOptions.EndpointOptions.AddRange(new List <IEndpointOptions>() { infoOpts, cloudOpts }); var ep = new ActuatorEndpoint(cloudOpts, new List <IManagementOptions> { mgmtOptions }); var info = ep.Invoke("http://localhost:5000/foobar"); Assert.NotNull(info); Assert.NotNull(info._links); Assert.True(info._links.ContainsKey("self")); Assert.Equal("http://localhost:5000/foobar", info._links["self"].href); Assert.False(info._links.ContainsKey("info")); Assert.Single(info._links); }
/// <summary> /// Add Cloud Foundry actuator to OWIN Pipeline /// </summary> /// <param name="builder">Your OWIN <see cref="IAppBuilder"/></param> /// <param name="config">Your application's <see cref="IConfiguration"/></param> /// <param name="loggerFactory"><see cref="ILoggerFactory"/> for logging within the middleware</param> /// <returns>Your OWIN <see cref="IAppBuilder"/> with Cloud Foundry actuator attached</returns> public static IAppBuilder UseHypermediaActuator(this IAppBuilder builder, IConfiguration config, ILoggerFactory loggerFactory = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } IActuatorHypermediaOptions options; options = new HypermediaEndpointOptions(config); var mgmtOptions = ManagementOptions.Get(config); var mgmt = mgmtOptions.OfType <ActuatorManagementOptions>().Single(); mgmt.EndpointOptions.Add(options); var endpoint = new ActuatorEndpoint(options, mgmtOptions, loggerFactory?.CreateLogger <ActuatorEndpoint>()); var logger = loggerFactory?.CreateLogger <ActuatorHypermediaEndpointOwinMiddleware>(); return(builder.Use <ActuatorHypermediaEndpointOwinMiddleware>(endpoint, mgmtOptions, logger)); }
public void RoutesByPathAndVerb() { var options = new HypermediaEndpointOptions(); Assert.True(options.ExactMatch); Assert.Equal("/cloudfoundryapplication", options.GetContextPath(new CloudFoundryManagementOptions())); Assert.Null(options.AllowedVerbs); }
public void RoutesByPathAndVerb() { var options = new HypermediaEndpointOptions(); Assert.True(options.ExactMatch); Assert.Equal("/actuator", options.GetContextPath(new ActuatorManagementOptions())); Assert.Null(options.AllowedVerbs); }
public void HypermediaEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new HypermediaEndpointOptions(); var mgmtOptions = TestHelpers.GetManagementOptions(opts); var ep = new ActuatorEndpoint(opts, mgmtOptions); var middle = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOptions); Assert.True(middle.RequestVerbAndPathMatch("GET", "/actuator")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/actuator")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/actuator/badpath")); }
public async void HandleCloudFoundryRequestAsync_ReturnsExpected() { var opts = new HypermediaEndpointOptions(); var mgmtOpts = new ActuatorManagementOptions(); var ep = new TestHypermediaEndpoint(opts, mgmtOpts); var middle = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOpts); var context = CreateRequest("GET", "/"); await middle.Invoke(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var rdr = new StreamReader(context.Response.Body); var json = await rdr.ReadToEndAsync(); Assert.Equal("{\"type\":\"steeltoe\",\"_links\":{}}", json); }
public void Invoke_OnlyActuatorHypermediaEndpoint_ReturnsExpectedLinks() { var cloudOpts = new HypermediaEndpointOptions(); var mgmtOptions = new ActuatorManagementOptions(); mgmtOptions.EndpointOptions.Add(cloudOpts); var ep = new ActuatorEndpoint(cloudOpts, mgmtOptions); var info = ep.Invoke("http://localhost:5000/foobar"); Assert.NotNull(info); Assert.NotNull(info._links); Assert.True(info._links.ContainsKey("self")); Assert.Equal("http://localhost:5000/foobar", info._links["self"].Href); Assert.Single(info._links); }
public void ActuatoHypermediaEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new HypermediaEndpointOptions(); var actmOpts = new ActuatorManagementOptions(); var mgmtOpts = new List <IManagementOptions> { actmOpts }; var ep = new ActuatorEndpoint(opts, mgmtOpts); actmOpts.EndpointOptions.Add(opts); var middle = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOpts); Assert.True(middle.RequestVerbAndPathMatch("GET", "/actuator")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/actuator")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/badpath")); }
/// <summary> /// Adds the services used by the Hypermedia 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 AddHypermediaActuatorServices(this IServiceCollection services, IConfiguration configuration) { if (services == null) { throw new ArgumentNullException(nameof(services)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } var options = new HypermediaEndpointOptions(configuration); services.TryAddSingleton <IActuatorHypermediaOptions>(options); services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IEndpointOptions), options)); services.TryAddSingleton <ActuatorEndpoint>(); return(services); }
public void Invoke_CloudFoundryDisable_ReturnsExpectedLinks() { var infoOpts = new InfoEndpointOptions { Enabled = true }; var cloudOpts = new HypermediaEndpointOptions { Enabled = false }; var mgmtOptions = new ActuatorManagementOptions(); mgmtOptions.EndpointOptions.AddRange(new List <IEndpointOptions>() { infoOpts, cloudOpts }); var ep = new ActuatorEndpoint(cloudOpts, mgmtOptions); var info = ep.Invoke("http://localhost:5000/foobar"); Assert.NotNull(info); Assert.NotNull(info._links); Assert.Empty(info._links); }
public void Invoke_ReturnsExpectedLinks() { var mgmtOptions = new ActuatorManagementOptions(); var infoOpts = new InfoEndpointOptions(); var cloudOpts = new HypermediaEndpointOptions(); mgmtOptions.EndpointOptions.AddRange(new List <IEndpointOptions>() { infoOpts, cloudOpts }); var ep = new ActuatorEndpoint(cloudOpts, mgmtOptions); var info = ep.Invoke("http://localhost:5000/foobar"); Assert.NotNull(info); Assert.NotNull(info._links); Assert.True(info._links.ContainsKey("self")); Assert.Equal("http://localhost:5000/foobar", info._links["self"].Href); Assert.True(info._links.ContainsKey("info")); Assert.Equal("http://localhost:5000/foobar/info", info._links["info"].Href); Assert.Equal(2, info._links.Count); }