diff --git a/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java b/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java index e9f55bdf..a18bba26 100644 --- a/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java +++ b/spring-cloud-config-sample/src/test/java/sample/ApplicationTests.java @@ -1,8 +1,9 @@ - package sample; import static org.junit.Assert.assertEquals; +import java.io.IOException; + import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -12,6 +13,7 @@ import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.TestRestTemplate; +import org.springframework.cloud.config.server.ConfigServerTestUtils; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -28,22 +30,25 @@ public class ApplicationTests { private int port; @BeforeClass - public static void startConfigServer() { + public static void startConfigServer() throws IOException { + String repo = ConfigServerTestUtils.prepareLocalRepo(); ConfigurableApplicationContext context = SpringApplication.run( org.springframework.cloud.config.server.ConfigServerApplication.class, - "--server.port=" + configPort, "--spring.config.name=server"); - configPort = ((EmbeddedWebApplicationContext) context).getEmbeddedServletContainer().getPort(); + "--server.port=" + configPort, "--spring.config.name=server", + "--spring.cloud.config.server.uri=" + repo); + configPort = ((EmbeddedWebApplicationContext) context) + .getEmbeddedServletContainer().getPort(); System.setProperty("config.port", "" + configPort); } @Test public void contextLoads() { String foo = new TestRestTemplate().getForObject("http://localhost:" + port - + "/env/foo", String.class); + + "/env/info.foo", String.class); assertEquals("bar", foo); } - public static void main(String[] args) { + public static void main(String[] args) throws IOException { configPort = 8888; startConfigServer(); SpringApplication.run(Application.class, args); diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/application.yml b/spring-cloud-config-sample/src/test/resources/config-repo/application.yml new file mode 100644 index 00000000..d6acc405 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/application.yml @@ -0,0 +1,3 @@ +info: + foo: bar +raw: true diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/bar.properties b/spring-cloud-config-sample/src/test/resources/config-repo/bar.properties new file mode 100644 index 00000000..7daacd5d --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/bar.properties @@ -0,0 +1 @@ +foo: bar \ No newline at end of file diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/FETCH_HEAD b/spring-cloud-config-sample/src/test/resources/config-repo/git/FETCH_HEAD new file mode 100644 index 00000000..527abd40 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/FETCH_HEAD @@ -0,0 +1,2 @@ +7df4a26d5437d9d4090cd5809967f870444cde8f not-for-merge branch 'raw' of dsyer@localhost:/home/dsyer/dev/platform/config/spring-platform-config-server/target/test-classes/config-repo +7df4a26d5437d9d4090cd5809967f870444cde8f not-for-merge tag 'foo' of dsyer@localhost:/home/dsyer/dev/platform/config/spring-platform-config-server/target/test-classes/config-repo diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/HEAD b/spring-cloud-config-sample/src/test/resources/config-repo/git/HEAD new file mode 100644 index 00000000..9d474425 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/raw diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/config b/spring-cloud-config-sample/src/test/resources/config-repo/git/config new file mode 100644 index 00000000..9b73bf82 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/config @@ -0,0 +1,5 @@ +[core] + repositoryformatversion = 0 + filemode = true + logallrefupdates = true +[branch "raw"] diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/gitk.cache b/spring-cloud-config-sample/src/test/resources/config-repo/git/gitk.cache new file mode 100644 index 00000000..b420ccba --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/gitk.cache @@ -0,0 +1,3 @@ +1 1 +7df4a26d5437d9d4090cd5809967f870444cde8f 9f01fb972bc9617e4ea59f5c8ee3ceb5ff515cd0 9f01fb972bc9617e4ea59f5c8ee3ceb5ff515cd0 +1 diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/index b/spring-cloud-config-sample/src/test/resources/config-repo/git/index new file mode 100644 index 00000000..4874f293 Binary files /dev/null and b/spring-cloud-config-sample/src/test/resources/config-repo/git/index differ diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/HEAD b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/HEAD new file mode 100644 index 00000000..c6423ee9 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/HEAD @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 7df4a26d5437d9d4090cd5809967f870444cde8f Dave Syer 1406860717 -0700 diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/master b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/master new file mode 100644 index 00000000..888d21ca --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 9f01fb972bc9617e4ea59f5c8ee3ceb5ff515cd0 Dave Syer 1406860776 -0700 branch: Created from 9f01fb972bc9617e4ea59f5c8ee3ceb5ff515cd0 diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/raw b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/raw new file mode 100644 index 00000000..c6423ee9 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/logs/refs/heads/raw @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 7df4a26d5437d9d4090cd5809967f870444cde8f Dave Syer 1406860717 -0700 diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.idx b/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.idx new file mode 100644 index 00000000..2a25a7b0 Binary files /dev/null and b/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.idx differ diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.pack b/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.pack new file mode 100644 index 00000000..a082f3c1 Binary files /dev/null and b/spring-cloud-config-sample/src/test/resources/config-repo/git/objects/pack/pack-d4edd2290fa647beaa1255881228dc90c1d53fce.pack differ diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/master b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/master new file mode 100644 index 00000000..8ee07e38 --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/master @@ -0,0 +1 @@ +9f01fb972bc9617e4ea59f5c8ee3ceb5ff515cd0 diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/raw b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/raw new file mode 100644 index 00000000..4389eb3a --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/heads/raw @@ -0,0 +1 @@ +7df4a26d5437d9d4090cd5809967f870444cde8f diff --git a/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/tags/foo b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/tags/foo new file mode 100644 index 00000000..4389eb3a --- /dev/null +++ b/spring-cloud-config-sample/src/test/resources/config-repo/git/refs/tags/foo @@ -0,0 +1 @@ +7df4a26d5437d9d4090cd5809967f870444cde8f diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerTestUtils.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerTestUtils.java new file mode 100644 index 00000000..1081effe --- /dev/null +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerTestUtils.java @@ -0,0 +1,70 @@ +/* + * Copyright 2013-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.config.server; + +import java.io.File; +import java.io.IOException; + +import org.eclipse.jgit.transport.JschConfigSessionFactory; +import org.eclipse.jgit.transport.OpenSshConfig.Host; +import org.eclipse.jgit.transport.SshSessionFactory; +import org.eclipse.jgit.util.FileUtils; + +import com.jcraft.jsch.Session; + +/** + * @author Dave Syer + * + */ +public class ConfigServerTestUtils { + + public static String prepareLocalRepo() throws IOException { + return prepareLocalRepo("target/test-classes", "config-repo", "target/config"); + + } + + public static String prepareLocalRepo(String buildDir, String repoPath, String checkoutDir) throws IOException { + if (!repoPath.startsWith("/")) { + repoPath = "/" + repoPath; + } + if (!repoPath.endsWith("/")) { + repoPath = repoPath + "/"; + } + SshSessionFactory.setInstance(new JschConfigSessionFactory() { + @Override + protected void configure(Host hc, Session session) { + session.setConfig("StrictHostKeyChecking", "no"); + } + }); + File dotGit = new File(buildDir + repoPath + ".git"); + File git = new File(buildDir + repoPath + "git"); + if (git.exists()) { + if (dotGit.exists()) { + FileUtils.delete(dotGit, FileUtils.RECURSIVE); + } + } + git.renameTo(dotGit); + File local = new File(checkoutDir); + if (local.exists()) { + FileUtils.delete(local, FileUtils.RECURSIVE); + } + if (!buildDir.startsWith("/")) { + buildDir = "./" + buildDir; + } + return "file:" + buildDir + repoPath; + } + +} diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java index 2867182e..3e281f38 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java @@ -61,9 +61,9 @@ public class JGitEnvironmentRepository implements EnvironmentRepository { private ConfigurableEnvironment environment; - private String username; + private String username; - private String password; + private String password; public JGitEnvironmentRepository(ConfigurableEnvironment environment) { this.environment = environment; @@ -151,7 +151,8 @@ public class JGitEnvironmentRepository implements EnvironmentRepository { } Assert.state(basedir.mkdirs(), "Could not create basedir: " + basedir); if (uri.startsWith("file:")) { - FileSystemUtils.copyRecursively(new UrlResource(uri).getFile(), basedir); + FileSystemUtils.copyRecursively(new UrlResource(uri).getFile(), + basedir); git = Git.open(basedir); } else { @@ -203,7 +204,8 @@ public class JGitEnvironmentRepository implements EnvironmentRepository { } private void setCredentialsProvider(TransportCommand cmd) { - cmd.setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, password)); + cmd.setCredentialsProvider(new UsernamePasswordCredentialsProvider(username, + password)); } private void trackBranch(Git git, CheckoutCommand checkout, String label) { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ApplicationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ApplicationTests.java index bf548d04..9a2029bc 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ApplicationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/ApplicationTests.java @@ -2,6 +2,9 @@ package org.springframework.cloud.config.server; import static org.junit.Assert.assertFalse; +import java.io.IOException; + +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; @@ -15,13 +18,18 @@ import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = ConfigServerApplication.class) -@IntegrationTest({"server.port:0", "spring.config.name:configserver"}) +@IntegrationTest({"server.port:0", "spring.config.name:configserver", "spring.cloud.config.server.uri:file:./target/test-classes/config-repo"}) @WebAppConfiguration @ActiveProfiles("test") public class ApplicationTests { @Value("${local.server.port}") private int port; + + @BeforeClass + public static void init() throws IOException{ + ConfigServerTestUtils.prepareLocalRepo(); + } @Test public void contextLoads() { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java index 58e3098d..07ae62b0 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java @@ -21,16 +21,11 @@ import static org.junit.Assert.assertTrue; import java.io.File; -import org.eclipse.jgit.transport.JschConfigSessionFactory; -import org.eclipse.jgit.transport.OpenSshConfig.Host; -import org.eclipse.jgit.transport.SshSessionFactory; import org.eclipse.jgit.util.FileUtils; import org.junit.Before; import org.junit.Test; -import org.springframework.core.env.StandardEnvironment; import org.springframework.cloud.config.Environment; - -import com.jcraft.jsch.Session; +import org.springframework.core.env.StandardEnvironment; /** * @author Dave Syer @@ -42,27 +37,12 @@ public class JGitEnvironmentRepositoryTests { private JGitEnvironmentRepository repository = new JGitEnvironmentRepository( environment); - private File basedir = new File("target/config-repo"); + private File basedir = new File("target/config"); @Before public void init() throws Exception { - SshSessionFactory.setInstance(new JschConfigSessionFactory() { - @Override - protected void configure(Host hc, Session session) { - session.setConfig("StrictHostKeyChecking", "no"); - } - }); - File dotGit = new File("target/test-classes/config-repo/.git"); - File git = new File("target/test-classes/config-repo/git"); - if (git.exists()) { - if (dotGit.exists()) { - FileUtils.delete(dotGit, FileUtils.RECURSIVE); - } - } - git.renameTo(dotGit); - repository - .setUri(environment - .resolvePlaceholders("file:./target/test-classes/config-repo")); + String uri = ConfigServerTestUtils.prepareLocalRepo(); + repository.setUri(uri); if (basedir.exists()) { FileUtils.delete(basedir, FileUtils.RECURSIVE); }