public async void HandleHeapDumpRequestAsync_ReturnsExpected() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { var opts = new HeapDumpEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); IServiceCollection serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Trace)); var loggerFactory = serviceCollection.BuildServiceProvider().GetService <ILoggerFactory>(); var logger1 = loggerFactory.CreateLogger <HeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var logger3 = loggerFactory.CreateLogger <HeapDumpEndpointMiddleware>(); var obs = new HeapDumper(opts, logger: logger1); var ep = new HeapDumpEndpoint(opts, obs, logger2); var middle = new HeapDumpEndpointMiddleware(null, ep, mopts, logger3); var context = CreateRequest("GET", "/heapdump"); await middle.HandleHeapDumpRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var buffer = new byte[1024]; await context.Response.Body.ReadAsync(buffer, 0, 1024); Assert.NotEqual(0, buffer[0]); } }
public async void HandleHeapDumpRequestAsync_ReturnsExpected() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { var opts = new HeapDumpEndpointOptions(); var mopts = TestHelpers.GetManagementOptions(opts); 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, logger: logger1); var ep = new HeapDumpEndpoint(opts, obs, logger2); var middle = new HeapDumpEndpointMiddleware(null, ep, mopts, 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]); } }
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 HeapDumpEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new HeapDumpEndpointOptions(); var mopts = TestHelpers.GetManagementOptions(opts); HeapDumper obs = new HeapDumper(opts); var ep = new HeapDumpEndpoint(opts, obs); var middle = new HeapDumpEndpointMiddleware(null, ep, mopts); Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/heapdump")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/cloudfoundryapplication/heapdump")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/badpath")); }
public void Invoke_CreatesDump() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { var loggerFactory = TestHelpers.GetLoggerFactory(); var logger1 = loggerFactory.CreateLogger <HeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var dumper = new HeapDumper(new HeapDumpEndpointOptions(), logger: logger1); var ep = new HeapDumpEndpoint(new HeapDumpEndpointOptions(), dumper, logger2); var result = ep.Invoke(); Assert.NotNull(result); Assert.True(File.Exists(result)); File.Delete(result); } }
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 void Invoke_CreatesDump() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { LoggerFactory loggerFactory = new LoggerFactory(); loggerFactory.AddConsole(minLevel: LogLevel.Debug); var logger1 = loggerFactory.CreateLogger <HeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var dumper = new HeapDumper(new HeapDumpOptions(), logger: logger1); var ep = new HeapDumpEndpoint(new HeapDumpOptions(), dumper, logger2); var result = ep.Invoke(); Assert.NotNull(result); Assert.True(File.Exists(result)); File.Delete(result); } }
/// <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)); } IHeapDumpOptions options = new HeapDumpEndpointOptions(config); var mgmtOptions = ManagementOptions.Get(config); foreach (var mgmt in mgmtOptions) { mgmt.EndpointOptions.Add(options); } var heapDumper = new HeapDumper(options, applicationPathOnDisk, loggerFactory?.CreateLogger <HeapDumper>()); return(builder.UseHeapDumpActuator(options, heapDumper, loggerFactory)); }