Exemple #1
0
        private void BuildServiceInfos()
        {
            _serviceInfos.Clear();

            CloudFoundryApplicationOptions appOpts = new CloudFoundryApplicationOptions();
            var aopSection = _config.GetSection(CloudFoundryApplicationOptions.CONFIGURATION_PREFIX);

            aopSection.Bind(appOpts);

            ApplicationInstanceInfo appInfo = new ApplicationInstanceInfo(appOpts);
            var serviceSection = _config.GetSection(CloudFoundryServicesOptions.CONFIGURATION_PREFIX);
            CloudFoundryServicesOptions serviceOpts = new CloudFoundryServicesOptions();

            serviceSection.Bind(serviceOpts);

            foreach (KeyValuePair <string, Service[]> serviceopt in serviceOpts.Services)
            {
                foreach (Service s in serviceopt.Value)
                {
                    IServiceInfoFactory factory = FindFactory(s);
                    if (factory != null)
                    {
                        if (factory.Create(s) is ServiceInfo info)
                        {
                            info.ApplicationInfo = appInfo;
                            _serviceInfos.Add(info);
                        }
                    }
                }
            }
        }
        private void BuildServiceInfos()
        {
            _serviceInfos.Clear();

            CloudFoundryApplicationOptions appOpts = new CloudFoundryApplicationOptions();

            _config.Bind(appOpts);
            ApplicationInstanceInfo appInfo = new ApplicationInstanceInfo(appOpts);

            CloudFoundryServicesOptions serviceOpts = new CloudFoundryServicesOptions();

            _config.Bind(serviceOpts);

            foreach (Service s in serviceOpts.Services)
            {
                IServiceInfoFactory factory = FindFactory(s);
                if (factory != null)
                {
                    var info = factory.Create(s) as ServiceInfo;
                    if (info != null)
                    {
                        info.ApplicationInfo = appInfo;
                        _serviceInfos.Add(info);
                    }
                }
            }
        }
Exemple #3
0
        public async Task SpringBootAdminClient_RegistersAndDeletes()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:path"]        = "/management",
                ["management:endpoints:health:path"] = "myhealth",
                ["URLS"] = "http://localhost:8080;https://localhost:8082",
                ["spring:boot:admin:client:url"] = "http://springbootadmin:9090",
                ["spring:application:name"]      = "MySteeltoeApplication",
            };

            var config             = new ConfigurationBuilder().AddInMemoryCollection(appsettings).Build();
            var appInfo            = new ApplicationInstanceInfo(config);
            var sbaOptions         = new SpringBootAdminClientOptions(config, appInfo);
            var mgmtOptions        = new ManagementEndpointOptions(config);
            var healthOptions      = new HealthEndpointOptions(config);
            var httpMessageHandler = new MockHttpMessageHandler();

            httpMessageHandler
            .Expect(HttpMethod.Post, "http://springbootadmin:9090/instances")
            .Respond("application/json", "{\"Id\":\"1234567\"}");
            httpMessageHandler
            .Expect(HttpMethod.Delete, "http://springbootadmin:9090/instances/1234567")
            .Respond(req => new HttpResponseMessage(HttpStatusCode.NoContent));

            Assert.Null(SpringBootAdminClientHostedService.RegistrationResult);
            var service = new SpringBootAdminClientHostedService(sbaOptions, mgmtOptions, healthOptions, httpMessageHandler.ToHttpClient());
            await service.StartAsync(default);
        public void ConstructorReadsApplicationConfiguration()
        {
            // Arrange
            var configJson = @"
            {
                ""Application"" : {
                    ""Name"": ""my-app"",
                    ""ApplicationId"": ""fa05c1a9-0fc1-4fbd-bae1-139850dec7a3"",
                    ""Uris"": [
                        ""my-app.10.244.0.34.xip.io"",
                        ""my-app2.10.244.0.34.xip.io""
                    ],
                    ""Version"": ""fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca""
                }
            }";

            var path      = TestHelpers.CreateTempFile(configJson);
            var directory = Path.GetDirectoryName(path);
            var fileName  = Path.GetFileName(path);
            var builder   = new ConfigurationBuilder();

            builder.SetBasePath(directory);
            builder.AddJsonFile(fileName);
            var config = builder.Build();

            var options = new ApplicationInstanceInfo(config, true);

            Assert.Equal("fa05c1a9-0fc1-4fbd-bae1-139850dec7a3", options.ApplicationId);
            Assert.Equal("my-app", options.ApplicationName);
            Assert.NotNull(options.Uris);
            Assert.Equal(2, options.Uris.Count());
            Assert.Contains("my-app.10.244.0.34.xip.io", options.Uris);
            Assert.Contains("my-app2.10.244.0.34.xip.io", options.Uris);
            Assert.Equal("fb8fbcc6-8d58-479e-bcc7-3b4ce5a7f0ca", options.Version);
        }
        public void Constructor_InitializesValues()
        {
            ApplicationInstanceInfo info = new ApplicationInstanceInfo(ApplicationInstanceInfoTest.MakeCloudFoundryApplicationOptions());
            var si = new TestServiceInfo("id", info);

            Assert.Equal("id", si.Id);
            Assert.Equal(info, si.ApplicationInfo);
        }
Exemple #6
0
        public void Constructor_InitializesValues()
        {
            var info = new ApplicationInstanceInfo(TestHelpers.GetConfigurationFromDictionary(new Dictionary <string, string>()));
            var si   = new TestServiceInfo("id", info);

            Assert.Equal("id", si.Id);
            Assert.Equal(info, si.ApplicationInfo);
        }
Exemple #7
0
        public ServiceInfo(string id, ApplicationInstanceInfo info)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentNullException(nameof(id));
            }

            Id = id;
            ApplicationInfo = info;
        }
        public void ConstructorUsesAppInfo()
        {
            var appsettings = new Dictionary <string, string> {
                { "application:Uris:0", "http://somehost" }
            };
            var config  = new ConfigurationBuilder().AddInMemoryCollection(appsettings).Build();
            var appInfo = new ApplicationInstanceInfo(config, string.Empty);

            var opts = new SpringBootAdminClientOptions(config, appInfo);

            Assert.NotNull(opts);
            Assert.Equal("http://somehost", opts.BasePath);
        }
        public void Constructor_ThrowsForNulls()
        {
            var emptyConfig = TestHelpers.GetConfigurationFromDictionary(new Dictionary <string, string>());
            var appInfo     = new ApplicationInstanceInfo(emptyConfig);
            var serviceInfo = new ServicesOptions(emptyConfig);
            var ex          = Assert.Throws <ArgumentNullException>(() => new CloudFoundryForwarderOptions(null, serviceInfo, emptyConfig));

            Assert.Equal("appInfo", ex.ParamName);
            ex = Assert.Throws <ArgumentNullException>(() => new CloudFoundryForwarderOptions(appInfo, null, emptyConfig));
            Assert.Equal("serviceInfo", ex.ParamName);
            ex = Assert.Throws <ArgumentNullException>(() => new CloudFoundryForwarderOptions(appInfo, serviceInfo, null));
            Assert.Equal("config", ex.ParamName);
        }
        public void UpdateConfigurationFindsUrls()
        {
            var config = new ConfigurationBuilder().AddInMemoryCollection(new Dictionary <string, string>()
            {
                { "urls", "https://myapp:1234;http://0.0.0.0:1233;http://::1233;http://*:1233" }
            }).Build();
            var instOpts = new EurekaInstanceOptions();
            var appInfo  = new ApplicationInstanceInfo(config);

            EurekaPostConfigurer.UpdateConfiguration(config, instOpts, appInfo);

            Assert.Equal("myapp", instOpts.HostName);
            Assert.Equal(1234, instOpts.SecurePort);
            Assert.Equal(1233, instOpts.Port);
        }
        public void ApplicationName_ReturnsExpected()
        {
            var appsettings = new Dictionary <string, string>();
            var builder     = new ConfigurationBuilder();

            builder.AddInMemoryCollection(appsettings);
            var config          = builder.Build();
            var appInstanceInfo = new ApplicationInstanceInfo(config);

            // Uses Assembly name as default
            var opts = new TracingOptions(appInstanceInfo, config);

            Assert.Equal(Assembly.GetEntryAssembly().GetName().Name, opts.Name);

            // Finds Spring app name
            appsettings.Add("spring:application:name", "SpringApplicationName");
            config          = builder.Build();
            appInstanceInfo = new ApplicationInstanceInfo(config);
            opts            = new TracingOptions(appInstanceInfo, config);
            Assert.Equal("SpringApplicationName", opts.Name);

            // Platform app name overrides spring name
            appsettings.Add("application:name", "PlatformName");
            config          = builder.Build();
            appInstanceInfo = new ApplicationInstanceInfo(config);
            opts            = new TracingOptions(appInstanceInfo, config);
            Assert.Equal("PlatformName", opts.Name);

            // Finds and uses management name
            appsettings.Add("management:name", "ManagementName");
            config          = builder.Build();
            appInstanceInfo = new ApplicationInstanceInfo(config);
            opts            = new TracingOptions(appInstanceInfo, config);
            Assert.Equal("ManagementName", opts.Name);

            // management:tracing name beats all else
            appsettings.Add("management:tracing:name", "ManagementTracingName");
            config          = builder.Build();
            appInstanceInfo = new ApplicationInstanceInfo(config);
            opts            = new TracingOptions(appInstanceInfo, config);
            Assert.Equal("ManagementTracingName", opts.Name);
        }
Exemple #12
0
        private void BuildServiceInfos()
        {
            ServiceInfos.Clear();

            var appInfo     = new ApplicationInstanceInfo(_config);
            var serviceOpts = new ServicesOptions(_config);

            foreach (var serviceopt in serviceOpts.Services)
            {
                foreach (var s in serviceopt.Value)
                {
                    var factory = FindFactory(s);
                    if (factory != null && factory.Create(s) is ServiceInfo info)
                    {
                        info.ApplicationInfo = appInfo;
                        ServiceInfos.Add(info);
                    }
                }
            }
        }
        public void Constructor_BuildsExpectedFromOpts()
        {
            CloudFoundryApplicationOptions opts = MakeCloudFoundryApplicationOptions();
            ApplicationInstanceInfo        info = new ApplicationInstanceInfo(opts);

            Assert.Equal(opts.ApplicationId, info.ApplicationId);
            Assert.Equal(opts.ApplicationName, info.ApplicationName);
            Assert.Equal(opts.ApplicationUris[0], info.ApplicationUris[0]);
            Assert.Equal(opts.ApplicationVersion, info.ApplicationVersion);
            Assert.Equal(opts.DiskLimit, info.DiskLimit);
            Assert.Equal(opts.FileDescriptorLimit, info.FileDescriptorLimit);
            Assert.Equal(opts.InstanceId, info.InstanceId);
            Assert.Equal(opts.InstanceIndex, info.InstanceIndex);
            Assert.Equal(opts.MemoryLimit, info.MemoryLimit);
            Assert.Equal(opts.Port, info.Port);
            Assert.Equal(opts.SpaceId, info.SpaceId);
            Assert.Equal(opts.SpaceName, info.SpaceName);
            Assert.Equal(opts.Uris[0], info.Uris[0]);
            Assert.Equal(opts.Version, info.Version);
        }
        public void AppName_SetAsExpected()
        {
            var options         = new ConsulDiscoveryOptions();
            var appsettings     = new Dictionary <string, string>();
            var config          = TestHelpers.GetConfigurationFromDictionary(appsettings);
            var appInstanceInfo = new ApplicationInstanceInfo(config);

            // default value is assembly name
            var result = ConsulRegistration.CreateRegistration(options, appInstanceInfo);

            Assert.Equal(TestHelpers.EntryAssemblyName.Replace(".", "-"), result.Service.Name);

            // followed by spring:application:name
            appsettings.Add("spring:application:name", "SpringApplicationName");
            config          = TestHelpers.GetConfigurationFromDictionary(appsettings);
            appInstanceInfo = new ApplicationInstanceInfo(config);
            result          = ConsulRegistration.CreateRegistration(options, appInstanceInfo);
            Assert.Equal("SpringApplicationName", result.Service.Name);

            // Platform app name overrides spring name
            appsettings.Add("application:name", "PlatformName");
            config          = TestHelpers.GetConfigurationFromDictionary(appsettings);
            appInstanceInfo = new ApplicationInstanceInfo(config);
            result          = ConsulRegistration.CreateRegistration(options, appInstanceInfo);
            Assert.Equal("PlatformName", result.Service.Name);

            // Consul-specific value beats generic value
            appsettings.Add("consul:serviceName", "ConsulServiceName");
            config          = TestHelpers.GetConfigurationFromDictionary(appsettings);
            appInstanceInfo = new ApplicationInstanceInfo(config);
            result          = ConsulRegistration.CreateRegistration(options, appInstanceInfo);
            Assert.Equal("ConsulServiceName", result.Service.Name);

            // Consul-discovery is highest priority
            appsettings.Add("consul:discovery:serviceName", "ConsulDiscoveryServiceName");
            config          = TestHelpers.GetConfigurationFromDictionary(appsettings);
            appInstanceInfo = new ApplicationInstanceInfo(config);
            result          = ConsulRegistration.CreateRegistration(options, appInstanceInfo);
            Assert.Equal("ConsulDiscoveryServiceName", result.Service.Name);
        }
        public void ConstructorSetsDefaults()
        {
            var builder = new ConfigurationBuilder();
            var config  = builder.Build();

            var options = new ApplicationInstanceInfo(config, true);

            Assert.Null(options.ApplicationId);
            Assert.Equal(Assembly.GetEntryAssembly().GetName().Name, options.ApplicationName);
            Assert.Null(options.ApplicationVersion);
            Assert.Null(options.InstanceId);
            Assert.Equal(-1, options.InstanceIndex);
            Assert.Null(options.Uris);
            Assert.Null(options.Version);
            Assert.Null(options.InstanceIP);
            Assert.Null(options.InternalIP);
            Assert.Equal(-1, options.DiskLimit);
            Assert.Equal(-1, options.FileDescriptorLimit);
            Assert.Equal(-1, options.InstanceIndex);
            Assert.Equal(-1, options.MemoryLimit);
            Assert.Equal(-1, options.Port);
        }
Exemple #16
0
 public TestServiceInfo(string id, ApplicationInstanceInfo info) : base(id, info)
 {
 }