public void ParseTags_ReturnsExpected() { var opts = new MetricsEndpointOptions(); var mopts = new ActuatorManagementOptions(); mopts.EndpointOptions.Add(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context1 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class", "?foo=key:value"); var result = middle.ParseTags(context1.Request.Query); Assert.NotNull(result); Assert.Empty(result); var context2 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class", "?tag=key:value"); result = middle.ParseTags(context2.Request.Query); Assert.NotNull(result); Assert.Contains(new KeyValuePair <string, string>("key", "value"), result); var context3 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class", "?tag=key:value&foo=key:value&tag=key1:value1"); result = middle.ParseTags(context3.Request.Query); Assert.NotNull(result); Assert.Contains(new KeyValuePair <string, string>("key", "value"), result); Assert.Contains(new KeyValuePair <string, string>("key1", "value1"), result); Assert.Equal(2, result.Count); var context4 = CreateRequest("GET", "/cloudfoundryapplication/metrics/Foo.Bar.Class", "?tag=key:value&foo=key:value&tag=key:value"); result = middle.ParseTags(context4.Request.Query); Assert.NotNull(result); Assert.Contains(new KeyValuePair <string, string>("key", "value"), result); Assert.Single(result); }
public async void HandleHeapDumpRequestAsync_ReturnsExpected() { if (EndpointServiceCollectionExtensions.IsHeapDumpSupported()) { var opts = new HeapDumpEndpointOptions(); var mopts = new ActuatorManagementOptions(); mopts.EndpointOptions.Add(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 logger4 = loggerFactory.CreateLogger <LinuxHeapDumper>(); var obs = Platform.IsWindows ? (IHeapDumper) new WindowsHeapDumper(opts, logger: logger1) : Platform.IsLinux ? (IHeapDumper) new LinuxHeapDumper(opts, logger: logger4) : throw new InvalidOperationException("Unsupported Platfornm"); 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 { return; } }
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, 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 void GetMetricName_ReturnsExpected_When_ManagementPath_Is_Slash() { var opts = new MetricsEndpointOptions(); var mopts = new ActuatorManagementOptions(); mopts.Path = "/"; mopts.EndpointOptions.Add(opts); var ep = new MetricsEndpoint(opts, new SteeltoeExporter()); var middle = new MetricsEndpointMiddleware(null, ep, mopts); var context1 = CreateRequest("GET", "/metrics"); Assert.Null(middle.GetMetricName(context1.Request)); var context2 = CreateRequest("GET", "/metrics/Foo.Bar.Class"); Assert.Equal("Foo.Bar.Class", middle.GetMetricName(context2.Request)); var context3 = CreateRequest("GET", "/metrics", "?tag=key:value&tag=key1:value1"); Assert.Null(middle.GetMetricName(context3.Request)); }
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, new List <IManagementOptions> { mgmtOptions }); var info = ep.Invoke("http://localhost:5000/foobar"); Assert.NotNull(info); Assert.NotNull(info._links); Assert.Empty(info._links); }
public void Invoke_HonorsEndpointEnabled_ReturnsExpectedLinks() { using (var tc = new TestContext(_output)) { tc.AdditionalServices = (services, configuration) => { services.AddHypermediaActuatorServices(configuration); services.AddInfoActuatorServices(configuration); services.AddSingleton(sp => { var options = new ActuatorManagementOptions(); options.EndpointOptions.Add(sp.GetRequiredService <IInfoOptions>()); options.EndpointOptions.Add(sp.GetRequiredService <IActuatorHypermediaOptions>()); return(options); }); }; tc.AdditionalConfiguration = configuration => { configuration.AddInMemoryCollection(new Dictionary <string, string> { { "management:endpoints:info:enabled", "false" } }); }; var ep = tc.GetService <IActuatorEndpoint>(); 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 TestHypermediaEndpoint(IActuatorHypermediaOptions options, ActuatorManagementOptions mgmtOptions, ILogger <ActuatorEndpoint> logger = null) : base(options, mgmtOptions, logger) { }