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); }
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); }
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(); } }
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); }
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); }
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); }
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); }