コード例 #1
0
        public void Constructor_InitializesWithDefaults()
        {
            var opts = new HypermediaEndpointOptions();

            Assert.Equal(string.Empty, opts.Id);
            Assert.Equal(string.Empty, opts.Path);
        }
コード例 #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);
        }
コード例 #3
0
        public void Constructor_BindsConfigurationCorrectly()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:enabled"] = "false",

                ["management:endpoints:path"]         = "/cloudfoundryapplication",
                ["management:endpoints:info:enabled"] = "true",
                ["management:endpoints:info:path"]    = "infopath",

                ["management:endpoints:cloudfoundry:validatecertificates"] = "false",
                ["management:endpoints:cloudfoundry:enabled"] = "true"
            };

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var opts    = new InfoEndpointOptions(config);
            var actOpts = new HypermediaEndpointOptions(config);

            Assert.Equal("info", opts.Id);
            Assert.Equal("infopath", opts.Path);
        }
コード例 #4
0
        /// <summary>
        /// Register the <see cref="ActuatorEndpoint"/>, OWIN middleware and options
        /// </summary>
        /// <param name="container">Autofac DI <see cref="ContainerBuilder"/></param>
        /// <param name="config">Your application's <see cref="IConfiguration"/></param>
        public static void RegisterHypermediaActuator(this ContainerBuilder container, IConfiguration config)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

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

            container.RegisterInstance(new ActuatorManagementOptions(config))
            .SingleInstance()
            .As <IManagementOptions>();

            container.Register(c =>
            {
                var options     = new HypermediaEndpointOptions(config);
                var mgmtOptions = c.Resolve <IEnumerable <IManagementOptions> >().OfType <ActuatorManagementOptions>().Single();

                mgmtOptions.EndpointOptions.Add(options);
                return(options);
            }).As <IActuatorHypermediaOptions>().SingleInstance();
            container.RegisterType <ActuatorEndpoint>().SingleInstance();
            container.RegisterType <ActuatorHypermediaEndpointOwinMiddleware>().SingleInstance();
        }
コード例 #5
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, 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);
        }
        /// <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));
        }
コード例 #7
0
        public void RoutesByPathAndVerb()
        {
            var options = new HypermediaEndpointOptions();

            Assert.True(options.ExactMatch);
            Assert.Equal("/cloudfoundryapplication", options.GetContextPath(new CloudFoundryManagementOptions()));
            Assert.Null(options.AllowedVerbs);
        }
コード例 #8
0
        public void RoutesByPathAndVerb()
        {
            var options = new HypermediaEndpointOptions();

            Assert.True(options.ExactMatch);
            Assert.Equal("/actuator", options.GetContextPath(new ActuatorManagementOptions()));
            Assert.Null(options.AllowedVerbs);
        }
コード例 #9
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"));
        }
コード例 #10
0
        public async void HandleCloudFoundryRequestAsync_ReturnsExpected()
        {
            var opts     = new HypermediaEndpointOptions();
            var mgmtOpts = new ActuatorManagementOptions();
            var ep       = new TestHypermediaEndpoint(opts, mgmtOpts);
            var middle   = new ActuatorHypermediaEndpointMiddleware(null, ep, mgmtOpts);
            var context  = CreateRequest("GET", "/");
            await middle.Invoke(context);

            context.Response.Body.Seek(0, SeekOrigin.Begin);
            var rdr  = new StreamReader(context.Response.Body);
            var json = await rdr.ReadToEndAsync();

            Assert.Equal("{\"type\":\"steeltoe\",\"_links\":{}}", json);
        }
コード例 #11
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);
        }
コード例 #12
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"));
        }
コード例 #13
0
        /// <summary>
        /// Adds the services used by the Hypermedia actuator
        /// </summary>
        /// <param name="services">Reference to the service collection</param>
        /// <param name="configuration">Reference to the configuration system</param>
        /// <returns>A reference to the service collection</returns>
        public static IServiceCollection AddHypermediaActuatorServices(this IServiceCollection services, IConfiguration configuration)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services));
            }

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

            var options = new HypermediaEndpointOptions(configuration);

            services.TryAddSingleton <IActuatorHypermediaOptions>(options);
            services.TryAddEnumerable(ServiceDescriptor.Singleton(typeof(IEndpointOptions), options));
            services.TryAddSingleton <ActuatorEndpoint>();

            return(services);
        }
コード例 #14
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);
        }
コード例 #15
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);
        }