From d09d5d5e7329a9a89d180e310fa20df6a91b0c9e Mon Sep 17 00:00:00 2001 From: dibaggioj Date: Thu, 23 Apr 2020 13:23:59 -0700 Subject: [PATCH] Fix s3client issue when using s3 endpoint Client is immutable when created with the builder Fixes gh-1597 --- .../environment/AwsS3EnvironmentRepository.java | 6 ++---- .../AwsS3EnvironmentRepositoryFactory.java | 13 +++++++++---- .../environment/JGitEnvironmentRepository.java | 3 +-- .../AwsS3EnvironmentRepositoryTests.java | 10 ++++++++++ .../environment/JGitEnvironmentRepositoryTests.java | 11 +++++------ 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepository.java index 4763469f..b3a52831 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepository.java @@ -91,13 +91,11 @@ public class AwsS3EnvironmentRepository implements EnvironmentRepository, Ordere final Properties config = s3ConfigFile.read(); config.putAll(serverProperties.getOverrides()); - StringBuilder propertySourceName = new StringBuilder().append("s3:") - .append(app); + StringBuilder propertySourceName = new StringBuilder().append("s3:").append(app); if (profile != null) { propertySourceName.append("-").append(profile); } - environment - .add(new PropertySource(propertySourceName.toString(), config)); + environment.add(new PropertySource(propertySourceName.toString(), config)); } } } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java index d6f10f60..827adb65 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryFactory.java @@ -34,12 +34,17 @@ public class AwsS3EnvironmentRepositoryFactory public AwsS3EnvironmentRepository build(AwsS3EnvironmentProperties environmentProperties) { final AmazonS3ClientBuilder clientBuilder = AmazonS3ClientBuilder.standard(); if (environmentProperties.getRegion() != null) { - clientBuilder.withRegion(environmentProperties.getRegion()); + if (environmentProperties.getEndpoint() != null) { + AmazonS3ClientBuilder.EndpointConfiguration endpointConfiguration = new AmazonS3ClientBuilder.EndpointConfiguration( + environmentProperties.getEndpoint(), environmentProperties.getRegion()); + clientBuilder.withEndpointConfiguration(endpointConfiguration); + } + else { + clientBuilder.withRegion(environmentProperties.getRegion()); + } } final AmazonS3 client = clientBuilder.build(); - if (environmentProperties.getEndpoint() != null) { - client.setEndpoint(environmentProperties.getEndpoint()); - } + AwsS3EnvironmentRepository repository = new AwsS3EnvironmentRepository(client, environmentProperties.getBucket(), server); return repository; diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java index 710c0874..e04d57f4 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java @@ -339,8 +339,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository // Check if git points to valid repository and default label is not empty or // null. - if (null != git && git.getRepository() != null - && !StringUtils.isEmpty(getDefaultLabel())) { + if (null != git && git.getRepository() != null && !StringUtils.isEmpty(getDefaultLabel())) { // Checkout the default branch set for repo in git. This may not always be // master. It depends on the // admin and organization settings. diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryTests.java index 6d477c53..d1213a19 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/AwsS3EnvironmentRepositoryTests.java @@ -185,6 +185,16 @@ public class AwsS3EnvironmentRepositoryTests { assertExpectedEnvironment(env, "foo,bar", null, null, 2, "profile1"); } + @Test + public void factoryCustomizable() { + AwsS3EnvironmentRepositoryFactory factory = new AwsS3EnvironmentRepositoryFactory(new ConfigServerProperties()); + AwsS3EnvironmentProperties properties = new AwsS3EnvironmentProperties(); + properties.setRegion("us-east-1"); + properties.setEndpoint("https://myawsendpoint/"); + AwsS3EnvironmentRepository repository = factory.build(properties); + assertThat(repository).isNotNull(); + } + private void setupS3(String fileName, String propertyContent) throws UnsupportedEncodingException { setupS3(fileName, null, propertyContent); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java index 08673c3f..6a75f045 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java @@ -1064,8 +1064,7 @@ public class JGitEnvironmentRepositoryTests { * @throws Exception should throw any runtime exception. */ @Test - public void afterPropertiesSet_CloneOnStartTrue_DefaultLabelSet_CloneAndCheckoutCalled() - throws Exception { + public void afterPropertiesSet_CloneOnStartTrue_DefaultLabelSet_CloneAndCheckoutCalled() throws Exception { final String LABEL_TO_CHECKOUT = "release"; // Set the default branch of repository as master Repository mockRepository = mock(Repository.class); @@ -1104,8 +1103,8 @@ public class JGitEnvironmentRepositoryTests { when(mockListBranchCommand.call()).thenReturn(repositoryRefsList); when(mockCheckoutCommand.call()).thenReturn(mockReleaseRef); - JGitEnvironmentRepository envRepository = new JGitEnvironmentRepository( - this.environment, new JGitEnvironmentProperties()); + JGitEnvironmentRepository envRepository = new JGitEnvironmentRepository(this.environment, + new JGitEnvironmentProperties()); envRepository.setGitFactory(new MockGitFactory(mockGit, mockCloneCommand)); envRepository.setUri("http://somegitserver/somegitrepo"); envRepository.setCloneOnStart(true); @@ -1165,8 +1164,8 @@ public class JGitEnvironmentRepositoryTests { when(mockListBranchCommand.call()).thenReturn(repositoryRefsList); when(mockCheckoutCommand.call()).thenReturn(mockReleaseRef); - JGitEnvironmentRepository envRepository = new JGitEnvironmentRepository( - this.environment, new JGitEnvironmentProperties()); + JGitEnvironmentRepository envRepository = new JGitEnvironmentRepository(this.environment, + new JGitEnvironmentProperties()); envRepository.setGitFactory(new MockGitFactory(mockGit, mockCloneCommand)); envRepository.setUri("http://somegitserver/somegitrepo"); envRepository.setCloneOnStart(true);