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); }
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); }
/// <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 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 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")); }
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); }
public ActuatorHypermediaEndpointOwinMiddleware(OwinMiddleware next, ActuatorEndpoint endpoint, IEnumerable <IManagementOptions> mgmtOptions = null, ILogger <ActuatorHypermediaEndpointOwinMiddleware> logger = null) : base(next, endpoint, mgmtOptions?.OfType <ActuatorManagementOptions>(), logger: logger) { _endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint)); }
public ActuatorLinkService(ActuatorEndpoint actuatorEndpoint, ILogger <ActuatorLinkService> logger) { this.actuatorEndpoint = actuatorEndpoint; this.logger = logger; }