Esempio n. 1
0
        public async void RegisterAsync_InvokesServer_ReturnsStatusCodeAndHeaders()
        {
            IHostingEnvironment envir = new HostingEnvironment();

            TestConfigServerStartup.Response     = "";
            TestConfigServerStartup.ReturnStatus = 204;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);


            var uri = "http://localhost:8888/";

            server.BaseAddress = new Uri(uri);
            EurekaInstanceConfig config = new EurekaInstanceConfig();
            InstanceInfo         info   = InstanceInfo.FromInstanceConfig(config);

            var cconfig = new EurekaClientConfig()
            {
                EurekaServerServiceUrls = uri
            };
            var client = new EurekaHttpClient(cconfig, server.CreateClient());

            EurekaHttpResponse resp = await client.RegisterAsync(info);

            Assert.NotNull(resp);
            Assert.Equal(HttpStatusCode.NoContent, resp.StatusCode);
            Assert.NotNull(resp.Headers);
        }
Esempio n. 2
0
        public async void SendHeartBeatAsync_InvokesServer_ReturnsStatusCodeAndHeaders()
        {
            var startup = new TestConfigServerStartup("", 200);
            var server  = TestServer.Create(startup.Configure);
            var uri     = "http://localhost:8888/";

            server.BaseAddress = new Uri(uri);
            EurekaInstanceConfig config = new EurekaInstanceConfig()
            {
                AppName    = "foo",
                InstanceId = "id1"
            };
            InstanceInfo info = InstanceInfo.FromInstanceConfig(config);

            var cconfig = new EurekaClientConfig()
            {
                EurekaServerServiceUrls = uri
            };
            var client = new EurekaHttpClient(cconfig, server.CreateClient());
            EurekaHttpResponse <InstanceInfo> resp = await client.SendHeartBeatAsync("foo", "id1", info, InstanceStatus.UNKNOWN);

            Assert.NotNull(resp);
            Assert.Equal(HttpStatusCode.OK, resp.StatusCode);
            Assert.NotNull(resp.Headers);

            Assert.Equal("PUT", startup.LastRequest.Method);
            Assert.Equal("localhost:8888", startup.LastRequest.Host.Value);
            Assert.Equal("/apps/FOO/id1", startup.LastRequest.Path.Value);
            var time = DateTimeConversions.ToJavaMillis(new DateTime(info.LastDirtyTimestamp, DateTimeKind.Utc));

            Assert.Equal("?status=STARTING&lastDirtyTimestamp=" + time, startup.LastRequest.QueryString.Value);
        }
Esempio n. 3
0
 public void Initialize(IEurekaInstanceConfig instanceConfig, ILoggerFactory logFactory = null)
 {
     if (instanceConfig == null)
     {
         throw new ArgumentNullException(nameof(instanceConfig));
     }
     _logger        = logFactory?.CreateLogger <ApplicationInfoManager>();
     InstanceConfig = instanceConfig;
     InstanceInfo   = InstanceInfo.FromInstanceConfig(instanceConfig);
 }
        public void Register()
        {
            var instance = InstanceInfo.FromInstanceConfig(_instanceConfig);

            if (instance != null)
            {
                _httpClient.RegisterAsync(instance).ConfigureAwait(false).GetAwaiter().GetResult();
                //开启心跳发送
                var intervalInMilli = instance.LeaseInfo.RenewalIntervalInSecs * 1000;
                _heartBeatTimer = StartTimer("HeartBeat", intervalInMilli, this.HeartBeatTask);
            }
        }
        private void HeartBeatTask()
        {
            var instance = InstanceInfo.FromInstanceConfig(_instanceConfig);
            var resp     = _httpClient.SendHeartBeatAsync(instance.AppName, instance.InstanceId, instance, InstanceStatus.UNKNOWN)
                           .ConfigureAwait(false)
                           .GetAwaiter()
                           .GetResult();

            if (resp.StatusCode == HttpStatusCode.NotFound)
            {
                _httpClient.RegisterAsync(instance).ConfigureAwait(false).GetAwaiter().GetResult();
            }
        }
Esempio n. 6
0
        public void ToJsonInstance_DefaultInstanceConfig_Correct()
        {
            EurekaInstanceConfig config = new EurekaInstanceConfig();
            InstanceInfo         info   = InstanceInfo.FromInstanceConfig(config);

            Assert.NotNull(info);

            JsonInstanceInfo jinfo = info.ToJsonInstance();

            // Verify
            Assert.Equal(config.GetHostName(false), jinfo.InstanceId);
            Assert.Equal(EurekaInstanceConfig.Default_Appname.ToUpperInvariant(), jinfo.AppName);
            Assert.Null(jinfo.AppGroupName);
            Assert.Equal(config.IpAddress, jinfo.IpAddr);
            Assert.Equal("na", jinfo.Sid);
            Assert.NotNull(jinfo.Port);
            Assert.Equal(80, jinfo.Port.Port);
            Assert.True(Boolean.Parse(jinfo.Port.Enabled));
            Assert.NotNull(jinfo.SecurePort);
            Assert.Equal(443, jinfo.SecurePort.Port);
            Assert.False(Boolean.Parse(jinfo.SecurePort.Enabled));
            Assert.Equal("http://" + config.GetHostName(false) + ":" + 80 + "/", jinfo.HomePageUrl);
            Assert.Equal("http://" + config.GetHostName(false) + ":" + 80 + "/Status", jinfo.StatusPageUrl);
            Assert.Equal("http://" + config.GetHostName(false) + ":" + 80 + "/healthcheck", jinfo.HealthCheckUrl);
            Assert.Null(jinfo.SecureHealthCheckUrl);
            Assert.Equal(config.GetHostName(false) + ":" + 80, jinfo.VipAddress);
            Assert.Equal(config.GetHostName(false) + ":" + 443, jinfo.SecureVipAddress);
            Assert.Equal(1, jinfo.CountryId);
            Assert.NotNull(jinfo.DataCenterInfo);
            Assert.Equal("MyOwn", jinfo.DataCenterInfo.Name);
            Assert.Equal("com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", jinfo.DataCenterInfo.ClassName);
            Assert.Equal(config.GetHostName(false), jinfo.HostName);
            Assert.Equal(InstanceStatus.STARTING, jinfo.Status);
            Assert.Equal(InstanceStatus.UNKNOWN, jinfo.OverriddenStatus);
            Assert.NotNull(jinfo.LeaseInfo);
            Assert.Equal(30, jinfo.LeaseInfo.RenewalIntervalInSecs);
            Assert.Equal(90, jinfo.LeaseInfo.DurationInSecs);
            Assert.Equal(0, jinfo.LeaseInfo.RegistrationTimestamp);
            Assert.Equal(0, jinfo.LeaseInfo.LastRenewalTimestamp);
            Assert.Equal(0, jinfo.LeaseInfo.LastRenewalTimestampLegacy);
            Assert.Equal(0, jinfo.LeaseInfo.EvictionTimestamp);
            Assert.Equal(0, jinfo.LeaseInfo.ServiceUpTimestamp);
            Assert.False(jinfo.IsCoordinatingDiscoveryServer);
            Assert.NotNull(jinfo.Metadata);
            Assert.Equal(1, jinfo.Metadata.Count);
            Assert.True(jinfo.Metadata.ContainsKey("@class"));
            Assert.True(jinfo.Metadata.ContainsValue("java.util.Collections$EmptyMap"));
            Assert.Equal(jinfo.LastDirtyTimestamp, jinfo.LastUpdatedTimestamp);
            Assert.Equal(ActionType.ADDED, jinfo.Actiontype);
            Assert.Null(jinfo.AsgName);
        }
        public void TestRegister()
        {
            var tmp          = Uri.EscapeDataString("AA-BB:DD CC?");
            var clientConfig = new EurekaClientConfig();

            ConfigurationBinder.Bind(Configuration.GetSection("eureka:client"), clientConfig);

            // Build Eureka instance info config from configuration
            var instConfig = new EurekaInstanceConfig();

            ConfigurationBinder.Bind(Configuration.GetSection("eureka:instance"), instConfig);

            IEurekaHttpClient eurekaHttpClient = new EurekaHttpClient(clientConfig);
            var result = eurekaHttpClient.RegisterAsync(InstanceInfo.FromInstanceConfig(instConfig)).ConfigureAwait(false).GetAwaiter().GetResult();
        }
        public void FromInstanceConfig_NonSecurePortFalse_SecurePortTrue_Correct()
        {
            EurekaInstanceConfig config = new EurekaInstanceConfig
            {
                SecurePortEnabled      = true,
                IsNonSecurePortEnabled = false
            };
            InstanceInfo info = InstanceInfo.FromInstanceConfig(config);

            Assert.NotNull(info);

            // Verify
            Assert.Equal(config.GetHostName(false), info.InstanceId);
            Assert.Equal(EurekaInstanceConfig.Default_Appname.ToUpperInvariant(), info.AppName);
            Assert.Null(info.AppGroupName);
            Assert.Equal(config.IpAddress, info.IpAddr);
            Assert.Equal("na", info.Sid);
            Assert.Equal(80, info.Port);
            Assert.False(info.IsUnsecurePortEnabled);
            Assert.Equal(443, info.SecurePort);
            Assert.True(info.IsSecurePortEnabled);
            Assert.Equal("https://" + config.GetHostName(false) + ":" + 443 + "/", info.HomePageUrl);
            Assert.Equal("https://" + config.GetHostName(false) + ":" + 443 + "/Status", info.StatusPageUrl);
            Assert.Equal("https://" + config.GetHostName(false) + ":" + 443 + "/healthcheck", info.HealthCheckUrl);
            Assert.Null(info.SecureHealthCheckUrl);
            Assert.Equal(config.GetHostName(false) + ":" + 80, info.VipAddress);
            Assert.Equal(config.GetHostName(false) + ":" + 443, info.SecureVipAddress);
            Assert.Equal(1, info.CountryId);
            Assert.Equal("MyOwn", info.DataCenterInfo.Name.ToString());
            Assert.Equal(config.GetHostName(false), info.HostName);
            Assert.Equal(InstanceStatus.STARTING, info.Status);
            Assert.Equal(InstanceStatus.UNKNOWN, info.OverriddenStatus);
            Assert.NotNull(info.LeaseInfo);
            Assert.Equal(30, info.LeaseInfo.RenewalIntervalInSecs);
            Assert.Equal(90, info.LeaseInfo.DurationInSecs);
            Assert.Equal(0, info.LeaseInfo.RegistrationTimestamp);
            Assert.Equal(0, info.LeaseInfo.LastRenewalTimestamp);
            Assert.Equal(0, info.LeaseInfo.LastRenewalTimestampLegacy);
            Assert.Equal(0, info.LeaseInfo.EvictionTimestamp);
            Assert.Equal(0, info.LeaseInfo.ServiceUpTimestamp);
            Assert.False(info.IsCoordinatingDiscoveryServer);
            Assert.NotNull(info.Metadata);
            Assert.Empty(info.Metadata);
            Assert.Equal(info.LastDirtyTimestamp, info.LastUpdatedTimestamp);
            Assert.Equal(ActionType.ADDED, info.Actiontype);
            Assert.Null(info.AsgName);
        }
Esempio n. 9
0
        public async void RegisterAsync_SendsValidPOSTData()
        {
            IHostingEnvironment envir = new HostingEnvironment();

            TestConfigServerStartup.Response     = "";
            TestConfigServerStartup.ReturnStatus = 204;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);


            var uri = "http://localhost:8888/";

            server.BaseAddress = new Uri(uri);
            EurekaInstanceConfig config = new EurekaInstanceConfig()
            {
                AppName = "foobar"
            };

            InstanceInfo info = InstanceInfo.FromInstanceConfig(config);

            var cconfig = new EurekaClientConfig()
            {
                EurekaServerServiceUrls = uri
            };
            var client = new EurekaHttpClient(cconfig, server.CreateClient());
            EurekaHttpResponse resp = await client.RegisterAsync(info);

            Assert.NotNull(TestConfigServerStartup.LastRequest);
            Assert.Equal("POST", TestConfigServerStartup.LastRequest.Method);
            Assert.Equal("localhost:8888", TestConfigServerStartup.LastRequest.Host.Value);
            Assert.Equal("/apps/FOOBAR", TestConfigServerStartup.LastRequest.Path.Value);

            // Check JSON payload
            JsonInstanceInfoRoot recvJson = JsonInstanceInfoRoot.Deserialize(TestConfigServerStartup.RequestBody);

            Assert.NotNull(recvJson);
            Assert.NotNull(recvJson.Instance);

            // Compare a few random values
            JsonInstanceInfo sentJsonObj = info.ToJsonInstance();

            Assert.Equal(sentJsonObj.Actiontype, recvJson.Instance.Actiontype);
            Assert.Equal(sentJsonObj.AppName, recvJson.Instance.AppName);
            Assert.Equal(sentJsonObj.HostName, recvJson.Instance.HostName);
        }
Esempio n. 10
0
        public async void RegisterAsync_InvokesServer_ReturnsStatusCodeAndHeaders()
        {
            var startup = new TestConfigServerStartup("", 204);
            var server  = TestServer.Create(startup.Configure);
            var uri     = "http://localhost:8888/";

            server.BaseAddress = new Uri(uri);
            EurekaInstanceConfig config = new EurekaInstanceConfig();
            InstanceInfo         info   = InstanceInfo.FromInstanceConfig(config);

            var cconfig = new EurekaClientConfig()
            {
                EurekaServerServiceUrls = uri
            };
            var client = new EurekaHttpClient(cconfig, server.CreateClient());

            EurekaHttpResponse resp = await client.RegisterAsync(info);

            Assert.NotNull(resp);
            Assert.Equal(HttpStatusCode.NoContent, resp.StatusCode);
            Assert.NotNull(resp.Headers);
        }
Esempio n. 11
0
        public async System.Threading.Tasks.Task SendHeartBeatAsync_InvokesServer_ReturnsStatusCodeAndHeaders()
        {
            var envir = HostingHelpers.GetHostingEnvironment();

            TestConfigServerStartup.Response     = string.Empty;
            TestConfigServerStartup.ReturnStatus = 200;
            var builder = new WebHostBuilder().UseStartup <TestConfigServerStartup>().UseEnvironment(envir.EnvironmentName);
            var server  = new TestServer(builder);

            var uri = "http://localhost:8888/";

            server.BaseAddress = new Uri(uri);
            var config = new EurekaInstanceConfig()
            {
                AppName    = "foo",
                InstanceId = "id1"
            };
            var info = InstanceInfo.FromInstanceConfig(config);

            var cconfig = new EurekaClientConfig()
            {
                EurekaServerServiceUrls = uri
            };
            var client = new EurekaHttpClient(cconfig, server.CreateClient());
            var resp   = await client.SendHeartBeatAsync("foo", "id1", info, InstanceStatus.UNKNOWN);

            Assert.NotNull(resp);
            Assert.Equal(HttpStatusCode.OK, resp.StatusCode);
            Assert.NotNull(resp.Headers);

            Assert.Equal("PUT", TestConfigServerStartup.LastRequest.Method);
            Assert.Equal("localhost:8888", TestConfigServerStartup.LastRequest.Host.Value);
            Assert.Equal("/apps/FOO/id1", TestConfigServerStartup.LastRequest.Path.Value);
            var time = DateTimeConversions.ToJavaMillis(new DateTime(info.LastDirtyTimestamp, DateTimeKind.Utc));

            Assert.Equal("?status=STARTING&lastDirtyTimestamp=" + time, TestConfigServerStartup.LastRequest.QueryString.Value);
        }
 public virtual void Initialize(IEurekaInstanceConfig instanceConfig)
 {
     InstanceConfig = instanceConfig ?? throw new ArgumentNullException(nameof(instanceConfig));
     InstanceInfo   = InstanceInfo.FromInstanceConfig(instanceConfig);
 }