Example #1
0
        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;
            }
        }
Example #3
0
        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);
        }
Example #6
0
        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)
 {
 }