Instead of using Map everywhere it's neater to use a strongly typed

object. This reuses JGitEnvironmentRepository, since it shares
most of the same properties. The format of the repos config
changes - now it is a Map not a List and the key is used as a "name"
to provide a default pattern and a location in the basedir.

Example config:

    spring:
      application:
        name: configserver
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo
              repos:
                iceycake: https://github.com/iceycake/config-repo
                project1:
                  patterns: project1-*,*-project1
                  uri: https://github.com/spring-cloud-samples/config-repo-1
This commit is contained in:
Dave Syer
2015-02-10 15:49:35 +00:00
parent e05e876f8f
commit 897ad1face
7 changed files with 138 additions and 159 deletions

View File

@@ -20,9 +20,7 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jgit.util.FileUtils;
@@ -78,18 +76,27 @@ public class MultipleJGitEnvironmentRepositoryIntegrationTests {
String test1RepoUri = ConfigServerTestUtils.prepareLocalRepo("test1-config-repo");
Map<String, Object> repoMapping = new LinkedHashMap<String, Object>();
repoMapping.put("patterns", "*test1*");
repoMapping.put("uri", test1RepoUri);
List<Map<String, Object>> repoMappings = new ArrayList<Map<String, Object>>();
repoMappings.add(repoMapping);
Map<String, Object> reposProperties = new LinkedHashMap<String, Object>();
reposProperties.put("spring.cloud.config.server.git.repos", repoMappings);
repoMapping.put("spring.cloud.config.server.git.repos[test1].pattern", "*test1*");
repoMapping.put("spring.cloud.config.server.git.repos[test1].uri", test1RepoUri);
context = new SpringApplicationBuilder(TestConfiguration.class).web(false)
.properties("spring.cloud.config.server.git.uri:" + defaultRepoUri)
.properties(reposProperties).run();
.properties(repoMapping).run();
EnvironmentRepository repository = context.getBean(EnvironmentRepository.class);
repository.findOne("test1-svc", "staging", "master");
Environment environment = repository.findOne("test1-svc", "staging", "master");
assertEquals(2, environment.getPropertySources().size());
}
@Test
public void mappingRepoWithJustUri() throws IOException {
String defaultRepoUri = ConfigServerTestUtils.prepareLocalRepo("config-repo");
String test1RepoUri = ConfigServerTestUtils.prepareLocalRepo("test1-config-repo");
Map<String, Object> repoMapping = new LinkedHashMap<String, Object>();
repoMapping.put("spring.cloud.config.server.git.repos.test1-svc", test1RepoUri);
context = new SpringApplicationBuilder(TestConfiguration.class).web(false)
.properties("spring.cloud.config.server.git.uri:" + defaultRepoUri)
.properties(repoMapping).run();
EnvironmentRepository repository = context.getBean(EnvironmentRepository.class);
repository.findOne("test1-svc", "staging", "master");
Environment environment = repository.findOne("test1-svc", "staging", "master");

View File

@@ -18,14 +18,13 @@ package org.springframework.cloud.config.server;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.springframework.cloud.config.Environment;
import org.springframework.cloud.config.server.MultipleJGitEnvironmentRepository.PatternMatchingJGitEnvironmentRepository;
import org.springframework.core.env.StandardEnvironment;
/**
@@ -43,24 +42,25 @@ public class MultipleJGitEnvironmentRepositoryTests {
String defaultUri = ConfigServerTestUtils.prepareLocalRepo("config-repo");
repository.setUri(defaultUri);
repository.setRepos(createRepositoryMappings());
repository.setRepos(createRepositories());
}
private List<Map<String, Object>> createRepositoryMappings() throws Exception {
private Map<String, PatternMatchingJGitEnvironmentRepository> createRepositories() throws Exception {
String test1Uri = ConfigServerTestUtils.prepareLocalRepo("test1-config-repo");
List<Map<String, Object>> mappings = new ArrayList<Map<String, Object>>();
mappings.add(createRepositoryMapping("*test1*", test1Uri));
Map<String, PatternMatchingJGitEnvironmentRepository> repos = new HashMap<String, PatternMatchingJGitEnvironmentRepository>();
repos.put("test1", createRepository("test1", "*test1*", test1Uri));
return mappings;
return repos;
}
private Map<String, Object> createRepositoryMapping(String pattern, String uri) {
Map<String, Object> repoMapping = new LinkedHashMap<String, Object>();
repoMapping.put("patterns", pattern);
repoMapping.put("uri", uri);
return repoMapping;
private PatternMatchingJGitEnvironmentRepository createRepository(String name, String pattern, String uri) {
PatternMatchingJGitEnvironmentRepository repo = new PatternMatchingJGitEnvironmentRepository();
repo.setEnvironment(environment);
repo.setName(name);
repo.setPattern(new String[] {pattern});
repo.setUri(uri);
return repo;
}
@Test
@@ -112,19 +112,19 @@ public class MultipleJGitEnvironmentRepositoryTests {
public void mappingRepo() {
Environment environment = repository.findOne("test1-svc", "staging", "master");
assertEquals(2, environment.getPropertySources().size());
assertEquals(getUri("*test1*") + "test1-svc.properties", environment
assertEquals(getUri("*test1*") + "/test1-svc.properties", environment
.getPropertySources().get(0).getName());
}
private String getUri(String pattern) {
String uri = null;
List<Map<String, Object>> repoMappings = repository.getRepos();
Map<String, PatternMatchingJGitEnvironmentRepository> repoMappings = repository.getRepos();
for (Map<String, Object> mapping : repoMappings) {
String mappingPattern = (String)mapping.get("patterns");
if (mappingPattern != null) {
uri = (String)mapping.get("uri");
for (PatternMatchingJGitEnvironmentRepository repo : repoMappings.values()) {
String[] mappingPattern = repo.getPattern();
if (mappingPattern != null && mappingPattern.length!=0) {
uri = repo.getUri();
break;
}
}