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, new List <IManagementOptions> {
                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);
        }
Ejemplo n.º 2
0
        public static void UseHypermediaActuator(IConfiguration configuration, ILoggerFactory loggerFactory = null)
        {
            var options           = new HypermediaEndpointOptions(configuration);
            var managementOptions = _mgmtOptions.OfType <ActuatorManagementOptions>().SingleOrDefault();

            if (managementOptions == null)
            {
                managementOptions = new ActuatorManagementOptions(configuration);
                _mgmtOptions.Add(managementOptions);
            }

            managementOptions.EndpointOptions.Add(options);

            var ep      = new ActuatorEndpoint(options, _mgmtOptions, CreateLogger <ActuatorEndpoint>(loggerFactory));
            var handler = new ActuatorHypermediaHandler(ep, SecurityServices, _mgmtOptions, CreateLogger <ActuatorHypermediaHandler>(loggerFactory));

            ConfiguredHandlers.Add(handler);

            if (ConfiguredHandlers.OfType <CloudFoundryCorsHandler>().Any())
            {
                return;
            }

            var handler2 = new CloudFoundryCorsHandler(options, SecurityServices, _mgmtOptions, CreateLogger <CloudFoundryCorsHandler>(loggerFactory));

            ConfiguredHandlers.Add(handler2);
        }
        /// <summary>
        /// Add Cloud Foundry actuator to OWIN Pipeline
        /// </summary>
        /// <param name="builder">Your OWIN <see cref="IAppBuilder"/></param>
        /// <param name="config">Your application's <see cref="IConfiguration"/></param>
        /// <param name="loggerFactory"><see cref="ILoggerFactory"/> for logging within the middleware</param>
        /// <returns>Your OWIN <see cref="IAppBuilder"/> with Cloud Foundry actuator attached</returns>
        public static IAppBuilder UseHypermediaActuator(this IAppBuilder builder, IConfiguration config, ILoggerFactory loggerFactory = null)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            IActuatorHypermediaOptions options;

            options = new HypermediaEndpointOptions(config);
            var mgmtOptions = ManagementOptions.Get(config);
            var mgmt        = mgmtOptions.OfType <ActuatorManagementOptions>().Single();

            mgmt.EndpointOptions.Add(options);

            var endpoint = new ActuatorEndpoint(options, mgmtOptions, loggerFactory?.CreateLogger <ActuatorEndpoint>());
            var logger   = loggerFactory?.CreateLogger <ActuatorHypermediaEndpointOwinMiddleware>();

            return(builder.Use <ActuatorHypermediaEndpointOwinMiddleware>(endpoint, mgmtOptions, logger));
        }
Ejemplo n.º 4
0
        public void HypermediaEndpointMiddleware_PathAndVerbMatching_ReturnsExpected()
        {
            var opts        = new HypermediaEndpointOptions();
            var mgmtOptions = TestHelpers.GetManagementOptions(opts);
            var ep          = new ActuatorEndpoint(opts, mgmtOptions);
            var middle      = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOptions);

            Assert.True(middle.RequestVerbAndPathMatch("GET", "/actuator"));
            Assert.False(middle.RequestVerbAndPathMatch("PUT", "/actuator"));
            Assert.False(middle.RequestVerbAndPathMatch("GET", "/actuator/badpath"));
        }
Ejemplo n.º 5
0
        public void Invoke_OnlyActuatorHypermediaEndpoint_ReturnsExpectedLinks()
        {
            var cloudOpts   = new HypermediaEndpointOptions();
            var mgmtOptions = new ActuatorManagementOptions();

            mgmtOptions.EndpointOptions.Add(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.Single(info._links);
        }
Ejemplo n.º 6
0
        public void ActuatoHypermediaEndpointMiddleware_PathAndVerbMatching_ReturnsExpected()
        {
            var opts     = new HypermediaEndpointOptions();
            var actmOpts = new ActuatorManagementOptions();
            var mgmtOpts = new List <IManagementOptions> {
                actmOpts
            };

            var ep = new ActuatorEndpoint(opts, mgmtOpts);

            actmOpts.EndpointOptions.Add(opts);
            var middle = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOpts);

            Assert.True(middle.RequestVerbAndPathMatch("GET", "/actuator"));
            Assert.False(middle.RequestVerbAndPathMatch("PUT", "/actuator"));
            Assert.False(middle.RequestVerbAndPathMatch("GET", "/badpath"));
        }
Ejemplo n.º 7
0
        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, mgmtOptions);
            var info = ep.Invoke("http://localhost:5000/foobar");

            Assert.NotNull(info);
            Assert.NotNull(info._links);
            Assert.Empty(info._links);
        }
Ejemplo n.º 8
0
        public void Invoke_ReturnsExpectedLinks()
        {
            var mgmtOptions = new ActuatorManagementOptions();
            var infoOpts    = new InfoEndpointOptions();
            var cloudOpts   = new HypermediaEndpointOptions();

            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.True(info._links.ContainsKey("info"));
            Assert.Equal("http://localhost:5000/foobar/info", info._links["info"].Href);
            Assert.Equal(2, info._links.Count);
        }
Ejemplo n.º 9
0
 public ActuatorHypermediaEndpointOwinMiddleware(OwinMiddleware next, ActuatorEndpoint endpoint, IEnumerable <IManagementOptions> mgmtOptions = null, ILogger <ActuatorHypermediaEndpointOwinMiddleware> logger = null)
     : base(next, endpoint, mgmtOptions?.OfType <ActuatorManagementOptions>(), logger: logger)
 {
     _endpoint = endpoint ?? throw new ArgumentNullException(nameof(endpoint));
 }
Ejemplo n.º 10
0
 public ActuatorLinkService(ActuatorEndpoint actuatorEndpoint, ILogger <ActuatorLinkService> logger)
 {
     this.actuatorEndpoint = actuatorEndpoint;
     this.logger           = logger;
 }