/* visible for testing */ CloudInstanceConfig(String namespace, AmazonInfoConfig amazonInfoConfig, AmazonInfo initialInfo, boolean eagerInit) { super(namespace); if (eagerInit) { RefreshableAmazonInfoProvider.FallbackAddressProvider fallbackAddressProvider = new RefreshableAmazonInfoProvider.FallbackAddressProvider() { @Override public String getFallbackIp() { return CloudInstanceConfig.super.getIpAddress(); } @Override public String getFallbackHostname() { return CloudInstanceConfig.super.getHostName(false); } }; this.amazonInfoHolder = new RefreshableAmazonInfoProvider(amazonInfoConfig, fallbackAddressProvider); } else { this.amazonInfoHolder = new RefreshableAmazonInfoProvider(initialInfo, amazonInfoConfig); } }
/* visible for testing */ Ec2EurekaArchaius2InstanceConfig(Config configInstance, AmazonInfoConfig amazonInfoConfig, String namespace, AmazonInfo initialInfo, boolean eagerInit) { super(configInstance, namespace); this.amazonInfoConfig = amazonInfoConfig; if (eagerInit) { RefreshableAmazonInfoProvider.FallbackAddressProvider fallbackAddressProvider = new RefreshableAmazonInfoProvider.FallbackAddressProvider() { @Override public String getFallbackIp() { return Ec2EurekaArchaius2InstanceConfig.super.getIpAddress(); } @Override public String getFallbackHostname() { return Ec2EurekaArchaius2InstanceConfig.super.getHostName(false); } }; this.amazonInfoHolder = new RefreshableAmazonInfoProvider(amazonInfoConfig, fallbackAddressProvider); } else { this.amazonInfoHolder = new RefreshableAmazonInfoProvider(initialInfo, amazonInfoConfig); } }
@Test public void testSpotInstanceTermination() { AmazonInfo initialAmazonInfo = AmazonInfo.Builder.newBuilder().build(); RefreshableAmazonInfoProvider refreshableAmazonInfoProvider = spy(new RefreshableAmazonInfoProvider(initialAmazonInfo, new Archaius1AmazonInfoConfig(CommonConstants.DEFAULT_CONFIG_NAMESPACE))); config = spy(new CloudInstanceConfig(CommonConstants.DEFAULT_CONFIG_NAMESPACE, refreshableAmazonInfoProvider)); this.applicationInfoManager = new ApplicationInfoManager(config, instanceInfo, null); String terminationTime = "2015-01-05T18:02:00Z"; String spotInstanceAction = "{\"action\": \"terminate\", \"time\": \"2017-09-18T08:22:00Z\"}"; AmazonInfo newAmazonInfo = AmazonInfo.Builder.newBuilder() .addMetadata(AmazonInfo.MetaDataKey.spotTerminationTime, terminationTime) // new property on refresh .addMetadata(AmazonInfo.MetaDataKey.spotInstanceAction, spotInstanceAction) // new property refresh .addMetadata(AmazonInfo.MetaDataKey.publicHostname, instanceInfo.getHostName()) // unchanged .addMetadata(AmazonInfo.MetaDataKey.instanceId, instanceInfo.getInstanceId()) // unchanged .addMetadata(AmazonInfo.MetaDataKey.localIpv4, instanceInfo.getIPAddr()) // unchanged .build(); when(refreshableAmazonInfoProvider.getNewAmazonInfo()).thenReturn(newAmazonInfo); applicationInfoManager.refreshDataCenterInfoIfRequired(); assertThat(((AmazonInfo)instanceInfo.getDataCenterInfo()).getMetadata().get(AmazonInfo.MetaDataKey.spotTerminationTime.getName()), is(terminationTime)); assertThat(((AmazonInfo)instanceInfo.getDataCenterInfo()).getMetadata().get(AmazonInfo.MetaDataKey.spotInstanceAction.getName()), is(spotInstanceAction)); }
/* visible for testing */ CloudInstanceConfig(String namespace, AmazonInfoConfig amazonInfoConfig, AmazonInfo initialInfo, boolean eagerInit) { super(namespace); if (eagerInit) { RefreshableAmazonInfoProvider.FallbackAddressProvider fallbackAddressProvider = new RefreshableAmazonInfoProvider.FallbackAddressProvider() { @Override public String getFallbackIp() { return CloudInstanceConfig.super.getIpAddress(); } @Override public String getFallbackHostname() { return CloudInstanceConfig.super.getHostName(false); } }; this.amazonInfoHolder = new RefreshableAmazonInfoProvider(amazonInfoConfig, fallbackAddressProvider); } else { this.amazonInfoHolder = new RefreshableAmazonInfoProvider(initialInfo, amazonInfoConfig); } }
/* visible for testing */ Ec2EurekaArchaius2InstanceConfig(Config configInstance, AmazonInfoConfig amazonInfoConfig, String namespace, AmazonInfo initialInfo, boolean eagerInit) { super(configInstance, namespace); this.amazonInfoConfig = amazonInfoConfig; if (eagerInit) { RefreshableAmazonInfoProvider.FallbackAddressProvider fallbackAddressProvider = new RefreshableAmazonInfoProvider.FallbackAddressProvider() { @Override public String getFallbackIp() { return Ec2EurekaArchaius2InstanceConfig.super.getIpAddress(); } @Override public String getFallbackHostname() { return Ec2EurekaArchaius2InstanceConfig.super.getHostName(false); } }; this.amazonInfoHolder = new RefreshableAmazonInfoProvider(amazonInfoConfig, fallbackAddressProvider); } else { this.amazonInfoHolder = new RefreshableAmazonInfoProvider(initialInfo, amazonInfoConfig); } }