public void Contstructor_BindsConfigurationCorrectly() { var appsettings = new Dictionary <string, string>() { ["management:endpoints:enabled"] = "false", ["management:endpoints:sensitive"] = "false", ["management:endpoints:path"] = "/cloudfoundryapplication", ["management:endpoints:loggers:enabled"] = "false", ["management:endpoints:loggers:sensitive"] = "true", ["management:endpoints:heapdump:enabled"] = "true", ["management:endpoints:heapdump:sensitive"] = "true", ["management:endpoints:cloudfoundry:validatecertificates"] = "true", ["management:endpoints:cloudfoundry:enabled"] = "true" }; ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(appsettings); var config = configurationBuilder.Build(); var opts = new HeapDumpOptions(config); CloudFoundryOptions cloudOpts = new CloudFoundryOptions(config); Assert.True(cloudOpts.Enabled); Assert.False(cloudOpts.Sensitive); Assert.Equal(string.Empty, cloudOpts.Id); Assert.Equal("/cloudfoundryapplication", cloudOpts.Path); Assert.True(cloudOpts.ValidateCertificates); Assert.True(opts.Enabled); Assert.True(opts.Sensitive); Assert.Equal("heapdump", opts.Id); Assert.Equal("/cloudfoundryapplication/heapdump", opts.Path); }
public void Constructor_InitializesWithDefaults() { var opts = new HeapDumpOptions(); Assert.True(opts.Enabled); Assert.True(opts.Sensitive); Assert.Equal("heapdump", opts.Id); }
public static void UseHeapDumpActuator(IConfiguration configuration, IHeapDumper heapDumper = null, ILoggerFactory loggerFactory = null) { var options = new HeapDumpOptions(configuration); heapDumper = heapDumper ?? new HeapDumper(options); var ep = new HeapDumpEndpoint(options, heapDumper, CreateLogger <HeapDumpEndpoint>(loggerFactory)); var handler = new HeapDumpHandler(ep, SecurityService, CreateLogger <HeapDumpHandler>(loggerFactory)); ConfiguredHandlers.Add(handler); }
public void HeapDumpEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new HeapDumpOptions(); HeapDumper obs = new HeapDumper(opts); var ep = new HeapDumpEndpoint(opts, obs); var middle = new HeapDumpEndpointMiddleware(null, ep); Assert.True(middle.RequestVerbAndPathMatch("GET", "/heapdump")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/heapdump")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/badpath")); }
public void IsHeapDumpRequest_ReturnsExpected() { var opts = new HeapDumpOptions(); HeapDumper obs = new HeapDumper(opts); var ep = new HeapDumpEndpoint(opts, obs); var middle = new HeapDumpEndpointMiddleware(null, ep); var context = CreateRequest("GET", "/heapdump"); Assert.True(middle.IsHeapDumpRequest(context)); var context2 = CreateRequest("PUT", "/heapdump"); Assert.False(middle.IsHeapDumpRequest(context2)); var context3 = CreateRequest("GET", "/badpath"); Assert.False(middle.IsHeapDumpRequest(context3)); }
/// <summary> /// Adds actuator endpoint providing Heap Dumps to OWIN pipeline /// </summary> /// <param name="builder">Your <see cref="IAppBuilder"/></param> /// <param name="config"><see cref="IConfiguration"/> for configuring the endpoint</param> /// <param name="applicationPathOnDisk">Provide the path to the app directory if heap dumps are failing due to access restrictions</param> /// <param name="loggerFactory"><see cref="ILoggerFactory"/> for logging inside the middleware and its components</param> /// <returns>Your <see cref="IAppBuilder"/> with Heap Dump middleware attached</returns> public static IAppBuilder UseHeapDumpActuator(this IAppBuilder builder, IConfiguration config, string applicationPathOnDisk = null, ILoggerFactory loggerFactory = null) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (config == null) { throw new ArgumentNullException(nameof(config)); } var options = new HeapDumpOptions(config); var heapDumper = new HeapDumper(options, applicationPathOnDisk, loggerFactory?.CreateLogger <HeapDumper>()); return(builder.UseHeapDumpActuator(options, heapDumper, loggerFactory)); }
public async void HandleHeapDumpRequestAsync_ReturnsExpected() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { var opts = new HeapDumpOptions(); LoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddConsole(minLevel: LogLevel.Debug); var logger1 = loggerFactory.CreateLogger <HeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var logger3 = loggerFactory.CreateLogger <HeapDumpEndpointMiddleware>(); HeapDumper obs = new HeapDumper(opts, logger1); var ep = new HeapDumpEndpoint(opts, obs, logger2); var middle = new HeapDumpEndpointMiddleware(null, ep, logger3); var context = CreateRequest("GET", "/heapdump"); await middle.HandleHeapDumpRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); byte[] buffer = new byte[1024]; await context.Response.Body.ReadAsync(buffer, 0, 1024); Assert.NotEqual(0, buffer[0]); } }