public void Invoke_CreatesDump() { if (Environment.OSVersion.Platform == PlatformID.Win32NT) { var loggerFactory = TestHelpers.GetLoggerFactory(); var logger1 = loggerFactory.CreateLogger <WindowsHeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var dumper = new WindowsHeapDumper(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); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { if (typeof(object).Assembly.GetType("System.Index") != null) { var loggerFactory = TestHelpers.GetLoggerFactory(); var logger1 = loggerFactory.CreateLogger <LinuxHeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var dumper = new LinuxHeapDumper(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 HeapDumpEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new HeapDumpEndpointOptions(); var mopts = TestHelper.GetManagementOptions(opts); IHeapDumper obs; if (Platform.IsWindows) { obs = new WindowsHeapDumper(opts); } else if (Platform.IsLinux) { obs = new LinuxHeapDumper(opts); } else { return; } 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 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 <WindowsHeapDumper>(); var logger2 = loggerFactory.CreateLogger <HeapDumpEndpoint>(); var logger3 = loggerFactory.CreateLogger <HeapDumpEndpointMiddleware>(); var obs = new WindowsHeapDumper(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]); } else if (Platform.IsLinux) { // TODO: Make a request and verify } else { return; } }