From 144350ad495667d4c3001a2f975a092fe5aa0bb3 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 6 Dec 2010 21:21:18 +0100 Subject: [PATCH] added tests for repositoryhandlers --- plugins/scm-git-plugin/pom.xml | 9 + .../repository/GitRepositoryHandlerTest.java | 102 +++++++++ plugins/scm-hg-plugin/pom.xml | 9 + .../repository/HgInitialConfigBuilder.java | 2 +- .../repository/HgRepositoryHandlerTest.java | 103 +++++++++ plugins/scm-svn-plugin/pom.xml | 9 + .../repository/SvnRepositoryHandlerTest.java | 97 ++++++++ scm-core/pom.xml | 9 - scm-test/pom.xml | 6 + .../SimpleRepositoryHandlerTestBase.java | 208 ++++++++++++++++++ 10 files changed, 544 insertions(+), 10 deletions(-) create mode 100644 plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java create mode 100644 plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java create mode 100644 plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java create mode 100644 scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java diff --git a/plugins/scm-git-plugin/pom.xml b/plugins/scm-git-plugin/pom.xml index 43e1eb08a4..cd75938137 100644 --- a/plugins/scm-git-plugin/pom.xml +++ b/plugins/scm-git-plugin/pom.xml @@ -45,6 +45,15 @@ ${jgit.version} + + + + sonia.scm + scm-test + 1.0-M3-SNAPSHOT + test + + diff --git a/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java b/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java new file mode 100644 index 0000000000..534ed94f07 --- /dev/null +++ b/plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitRepositoryHandlerTest.java @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.store.StoreFactory; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +/** + * + * @author Sebastian Sdorra + */ +public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase +{ + + /** + * Method description + * + * + * @param directory + */ + @Override + protected void checkDirectory(File directory) + { + File head = new File(directory, "HEAD"); + + assertTrue(head.exists()); + assertTrue(head.isFile()); + + File config = new File(directory, "config"); + + assertTrue(config.exists()); + assertTrue(config.isFile()); + + File refs = new File(directory, "refs"); + + assertTrue(refs.exists()); + assertTrue(refs.isDirectory()); + } + + /** + * Method description + * + * + * @param factory + * @param directory + * + * @return + */ + @Override + protected RepositoryHandler createRepositoryHandler(StoreFactory factory, + File directory) + { + GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory); + + repositoryHandler.init(contextProvider); + + GitConfig config = new GitConfig(); + + config.setRepositoryDirectory(directory); + repositoryHandler.setConfig(config); + + return repositoryHandler; + } +} diff --git a/plugins/scm-hg-plugin/pom.xml b/plugins/scm-hg-plugin/pom.xml index bccf7cc264..121bca6839 100644 --- a/plugins/scm-hg-plugin/pom.xml +++ b/plugins/scm-hg-plugin/pom.xml @@ -26,6 +26,15 @@ provided + + + + sonia.scm + scm-test + 1.0-M3-SNAPSHOT + test + + diff --git a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgInitialConfigBuilder.java b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgInitialConfigBuilder.java index 474aab8027..7b7f9f115d 100644 --- a/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgInitialConfigBuilder.java +++ b/plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgInitialConfigBuilder.java @@ -123,7 +123,7 @@ public class HgInitialConfigBuilder * * @return */ - private String search(String cmd) + public static String search(String cmd) { String cmdPath = null; diff --git a/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java b/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java new file mode 100644 index 0000000000..a233b30353 --- /dev/null +++ b/plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java @@ -0,0 +1,103 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.store.StoreFactory; +import sonia.scm.util.Util; + +import static org.junit.Assert.*; +import static org.junit.Assume.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +/** + * + * @author Sebastian Sdorra + */ +public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase +{ + + /** + * Method description + * + * + * @param directory + */ + @Override + protected void checkDirectory(File directory) + { + File hgDirectory = new File(directory, ".hg"); + + assertTrue(hgDirectory.exists()); + assertTrue(hgDirectory.isDirectory()); + + File hgrc = new File(hgDirectory, "hgrc"); + + assertTrue(hgrc.exists()); + assertTrue(hgrc.isFile()); + assertTrue(hgrc.length() > 0); + } + + /** + * Method description + * + * + * @param factory + * @param directory + * + * @return + */ + @Override + protected RepositoryHandler createRepositoryHandler(StoreFactory factory, + File directory) + { + HgRepositoryHandler handler = new HgRepositoryHandler(factory); + + handler.init(contextProvider); + handler.getConfig().setRepositoryDirectory(directory); + + // skip tests if hg not in path + if (Util.isEmpty(handler.getConfig().getHgBinary())) + { + System.out.println("WARNING could not find hg, skipping test"); + assumeTrue(false); + } + + return handler; + } +} diff --git a/plugins/scm-svn-plugin/pom.xml b/plugins/scm-svn-plugin/pom.xml index bcbbee4aeb..0a74bc5ba8 100644 --- a/plugins/scm-svn-plugin/pom.xml +++ b/plugins/scm-svn-plugin/pom.xml @@ -37,6 +37,15 @@ ${svnkit.version} + + + + sonia.scm + scm-test + 1.0-M3-SNAPSHOT + test + + diff --git a/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java b/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java new file mode 100644 index 0000000000..41dcbe403a --- /dev/null +++ b/plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/SvnRepositoryHandlerTest.java @@ -0,0 +1,97 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.store.StoreFactory; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; + +/** + * + * @author Sebastian Sdorra + */ +public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase +{ + + /** + * Method description + * + * + * @param directory + */ + @Override + protected void checkDirectory(File directory) + { + File format = new File(directory, "format"); + + assertTrue(format.exists()); + assertTrue(format.isFile()); + + File db = new File(directory, "db"); + + assertTrue(db.exists()); + assertTrue(db.isDirectory()); + } + + /** + * Method description + * + * + * @param factory + * @param directory + * + * @return + */ + @Override + protected RepositoryHandler createRepositoryHandler(StoreFactory factory, + File directory) + { + SvnRepositoryHandler handler = new SvnRepositoryHandler(factory); + + handler.init(contextProvider); + + SvnConfig config = new SvnConfig(); + + config.setRepositoryDirectory(directory); + handler.setConfig(config); + + return handler; + } +} diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 6c16ebfef6..256ced1a4a 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -48,15 +48,6 @@ ${jersey.version} - - - - org.slf4j - slf4j-simple - ${slf4j.version} - test - - diff --git a/scm-test/pom.xml b/scm-test/pom.xml index 6310ddb9b9..50c5bfbe50 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -41,6 +41,12 @@ ${mokito.version} + + org.slf4j + slf4j-simple + ${slf4j.version} + + diff --git a/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java b/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java new file mode 100644 index 0000000000..8799485b07 --- /dev/null +++ b/scm-test/src/main/java/sonia/scm/repository/SimpleRepositoryHandlerTestBase.java @@ -0,0 +1,208 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.repository; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.Test; + +import sonia.scm.AbstractTestBase; +import sonia.scm.store.MemoryStoreFactory; +import sonia.scm.store.StoreFactory; +import sonia.scm.util.IOUtil; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import java.io.File; +import java.io.IOException; + +/** + * + * @author Sebastian Sdorra + */ +public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase +{ + + /** + * Method description + * + * + * @param directory + */ + protected abstract void checkDirectory(File directory); + + /** + * Method description + * + * + * @param factory + * @param directory + * + * @return + */ + protected abstract RepositoryHandler createRepositoryHandler( + StoreFactory factory, File directory); + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testCreate() throws RepositoryException, IOException + { + createRepository(); + } + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test(expected = RepositoryAllreadyExistExeption.class) + public void testCreateExisitingRepository() + throws RepositoryException, IOException + { + createRepository(); + createRepository(); + } + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testCreateResourcePath() throws RepositoryException, IOException + { + Repository repository = createRepository(); + String path = handler.createResourcePath(repository); + + assertNotNull(path); + assertTrue(path.trim().length() > 0); + assertTrue(path.contains(repository.getName())); + } + + /** + * Method description + * + * + * @throws IOException + * @throws RepositoryException + */ + @Test + public void testDelete() throws RepositoryException, IOException + { + Repository repository = createRepository(); + + handler.delete(repository); + + File directory = new File(baseDirectory, repository.getName()); + + assertFalse(directory.exists()); + } + + /** + * Method description + * + * + * @throws Exception + */ + @Override + protected void postSetUp() throws Exception + { + MemoryStoreFactory storeFactory = new MemoryStoreFactory(); + + storeFactory.init(contextProvider); + baseDirectory = new File(contextProvider.getBaseDirectory(), + "repositories"); + IOUtil.mkdirs(baseDirectory); + handler = createRepositoryHandler(storeFactory, baseDirectory); + } + + /** + * Method description + * + * + * @throws Exception + */ + @Override + protected void preTearDown() throws Exception + { + if (handler != null) + { + handler.close(); + } + } + + /** + * Method description + * + * + * @return + * + * @throws IOException + * @throws RepositoryException + */ + private Repository createRepository() throws RepositoryException, IOException + { + Repository repository = RepositoryTestData.createHeartOfGold(); + + handler.create(repository); + + File directory = new File(baseDirectory, repository.getName()); + + assertTrue(directory.exists()); + assertTrue(directory.isDirectory()); + checkDirectory(directory); + + return repository; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + protected File baseDirectory; + + /** Field description */ + private RepositoryHandler handler; +}