From 2c616775b21ab4cd76ff170dfd5e818c9c3b79fb Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 02 Jul 2013 15:08:28 -0400 Subject: [PATCH] Fixed git servlet unit test --- src/test/java/com/gitblit/tests/GitServletTest.java | 132 ++++++++++++++++++++++++++----------------- 1 files changed, 80 insertions(+), 52 deletions(-) diff --git a/src/test/java/com/gitblit/tests/GitServletTest.java b/src/test/java/com/gitblit/tests/GitServletTest.java index a05b365..8513c83 100644 --- a/src/test/java/com/gitblit/tests/GitServletTest.java +++ b/src/test/java/com/gitblit/tests/GitServletTest.java @@ -19,8 +19,9 @@ import org.eclipse.jgit.api.ResetCommand.ResetType; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import org.eclipse.jgit.storage.file.FileRepository; +import org.eclipse.jgit.storage.file.FileRepositoryBuilder; import org.eclipse.jgit.transport.CredentialsProvider; import org.eclipse.jgit.transport.PushResult; import org.eclipse.jgit.transport.RefSpec; @@ -37,12 +38,12 @@ import com.gitblit.Constants.AuthorizationControl; import com.gitblit.GitBlit; import com.gitblit.Keys; -import com.gitblit.models.PushLogEntry; +import com.gitblit.models.RefLogEntry; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ArrayUtils; import com.gitblit.utils.JGitUtils; -import com.gitblit.utils.PushLogUtils; +import com.gitblit.utils.RefLogUtils; public class GitServletTest { @@ -54,15 +55,29 @@ static File jgit2Folder = new File(GitBlitSuite.REPOSITORIES, "working/jgit2"); - String url = GitBlitSuite.url; + String url = GitBlitSuite.gitServletUrl; String account = GitBlitSuite.account; String password = GitBlitSuite.password; private static final AtomicBoolean started = new AtomicBoolean(false); + + private static UserModel getUser() { + UserModel user = new UserModel("james"); + user.password = "james"; + return user; + } + + private static void delete(UserModel user) { + if (GitBlit.self().getUserModel(user.username) != null) { + GitBlit.self().deleteUser(user.username); + } + } @BeforeClass public static void startGitblit() throws Exception { started.set(GitBlitSuite.startGitblit()); + + delete(getUser()); } @AfterClass @@ -71,6 +86,8 @@ GitBlitSuite.stopGitblit(); deleteWorkingFolders(); } + + delete(getUser()); } public static void deleteWorkingFolders() throws Exception { @@ -100,7 +117,7 @@ } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(ticgitFolder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -120,7 +137,7 @@ boolean cloned = false; try { CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(ticgit2Folder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -155,7 +172,7 @@ boolean cloned = false; try { CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(ticgit2Folder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -177,7 +194,7 @@ // try clone again cloned = false; CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(ticgit2Folder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -193,7 +210,8 @@ model.accessRestriction = AccessRestrictionType.NONE; model.authorizationControl = AuthorizationControl.NAMED; GitBlit.self().updateRepositoryModel(model.name, model, false); - GitBlit.self().deleteUser(user.username); + + delete(user); } @Test @@ -203,8 +221,12 @@ FileUtils.delete(ticgitFolder, FileUtils.RECURSIVE | FileUtils.RETRY); } + RepositoryModel model = GitBlit.self().getRepositoryModel("ticgit.git"); + model.accessRestriction = AccessRestrictionType.NONE; + GitBlit.self().updateRepositoryModel(model.name, model, false); + CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(ticgitFolder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -220,8 +242,13 @@ w.close(); git.add().addFilepattern(file.getName()).call(); git.commit().setMessage("test commit").call(); - git.push().setPushAll().call(); + Iterable<PushResult> results = git.push().setPushAll().call(); GitBlitSuite.close(git); + for (PushResult result : results) { + for (RemoteRefUpdate update : result.getRemoteUpdates()) { + assertEquals(Status.OK, update.getStatus()); + } + } } @Test @@ -232,7 +259,7 @@ } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/test/jgit.git", url)); + clone.setURI(MessageFormat.format("{0}/test/jgit.git", url)); clone.setDirectory(jgitFolder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -248,8 +275,13 @@ w.close(); git.add().addFilepattern(file.getName()).call(); git.commit().setMessage("test commit").call(); - git.push().setPushAll().call(); + Iterable<PushResult> results = git.push().setPushAll().setCredentialsProvider(new UsernamePasswordCredentialsProvider(account, password)).call(); GitBlitSuite.close(git); + for (PushResult result : results) { + for (RemoteRefUpdate update : result.getRemoteUpdates()) { + assertEquals(Status.OK, update.getStatus()); + } + } } @Test @@ -260,7 +292,7 @@ } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/test/jgit.git", url)); + clone.setURI(MessageFormat.format("{0}/test/jgit.git", url)); clone.setDirectory(jgitFolder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -282,25 +314,30 @@ git.add().addFilepattern(file.getName()).call(); git.commit().setMessage("test commit").call(); - try { - git.push().setPushAll().call(); - assertTrue(false); - } catch (Exception e) { - assertTrue(e.getCause().getMessage().contains("access forbidden")); + Iterable<PushResult> results = git.push().setPushAll().setCredentialsProvider(new UsernamePasswordCredentialsProvider(account, password)).call(); + for (PushResult result : results) { + for (RemoteRefUpdate update : result.getRemoteUpdates()) { + assertEquals(Status.REJECTED_OTHER_REASON, update.getStatus()); + } } // unfreeze repo model.isFrozen = false; GitBlit.self().updateRepositoryModel(model.name, model, false); - git.push().setPushAll().call(); + results = git.push().setPushAll().setCredentialsProvider(new UsernamePasswordCredentialsProvider(account, password)).call(); GitBlitSuite.close(git); + for (PushResult result : results) { + for (RemoteRefUpdate update : result.getRemoteUpdates()) { + assertEquals(Status.OK, update.getStatus()); + } + } } @Test public void testPushToNonBareRepository() throws Exception { CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/working/jgit", url)); + clone.setURI(MessageFormat.format("{0}/working/jgit", url)); clone.setDirectory(jgit2Folder); clone.setBare(false); clone.setCloneAllBranches(true); @@ -316,19 +353,18 @@ w.close(); git.add().addFilepattern(file.getName()).call(); git.commit().setMessage("test commit followed by push to non-bare repository").call(); - try { - git.push().setPushAll().call(); - assertTrue(false); - } catch (Exception e) { - assertTrue(e.getCause().getMessage().contains("git-receive-pack not permitted")); - } + Iterable<PushResult> results = git.push().setPushAll().setCredentialsProvider(new UsernamePasswordCredentialsProvider(account, password)).call(); GitBlitSuite.close(git); + for (PushResult result : results) { + for (RemoteRefUpdate update : result.getRemoteUpdates()) { + assertEquals(Status.REJECTED_OTHER_REASON, update.getStatus()); + } + } } @Test public void testCommitterVerification() throws Exception { - UserModel user = new UserModel("james"); - user.password = "james"; + UserModel user = getUser(); // account only uses account name to verify testCommitterVerification(user, user.username, null, true); @@ -355,9 +391,7 @@ private void testCommitterVerification(UserModel user, String displayName, String emailAddress, boolean expectedSuccess) throws Exception { - if (GitBlit.self().getUserModel(user.username) != null) { - GitBlit.self().deleteUser(user.username); - } + delete(user); CredentialsProvider cp = new UsernamePasswordCredentialsProvider(user.username, user.password); @@ -367,7 +401,7 @@ FileUtils.delete(verification, FileUtils.RECURSIVE); } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(verification); clone.setBare(true); clone.setCloneAllBranches(true); @@ -392,7 +426,7 @@ FileUtils.delete(local, FileUtils.RECURSIVE); } clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/{1}", url, model.name)); + clone.setURI(MessageFormat.format("{0}/{1}", url, model.name)); clone.setDirectory(local); clone.setBare(false); clone.setCloneAllBranches(true); @@ -463,12 +497,8 @@ private void testRefChange(AccessPermission permission, Status expectedCreate, Status expectedDelete, Status expectedRewind) throws Exception { - UserModel user = new UserModel("james"); - user.password = "james"; - - if (GitBlit.self().getUserModel(user.username) != null) { - GitBlit.self().deleteUser(user.username); - } + UserModel user = getUser(); + delete(user); CredentialsProvider cp = new UsernamePasswordCredentialsProvider(user.username, user.password); @@ -478,7 +508,7 @@ FileUtils.delete(refChecks, FileUtils.RECURSIVE); } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(refChecks); clone.setBare(true); clone.setCloneAllBranches(true); @@ -511,7 +541,7 @@ FileUtils.delete(local, FileUtils.RECURSIVE); } clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/{1}", url, model.name)); + clone.setURI(MessageFormat.format("{0}/{1}", url, model.name)); clone.setDirectory(local); clone.setBare(false); clone.setCloneAllBranches(true); @@ -652,7 +682,7 @@ // close serving repository GitBlitSuite.close(refChecks); - GitBlit.self().deleteUser(user.username); + delete(user); } @Test @@ -667,9 +697,7 @@ UserModel user = new UserModel("sampleuser"); user.password = user.username; - if (GitBlit.self().getUserModel(user.username) != null) { - GitBlit.self().deleteUser(user.username); - } + delete(user); user.canCreate = canCreate; user.canAdmin = canAdmin; @@ -698,7 +726,7 @@ } CloneCommand clone = Git.cloneRepository(); - clone.setURI(MessageFormat.format("{0}/git/ticgit.git", url)); + clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); clone.setDirectory(createCheck); clone.setBare(true); clone.setCloneAllBranches(true); @@ -708,8 +736,8 @@ GitBlitSuite.close(personalRepo); // add a personal repository remote and a project remote - git.getRepository().getConfig().setString("remote", "user", "url", MessageFormat.format("{0}/git/~{1}/ticgit.git", url, user.username)); - git.getRepository().getConfig().setString("remote", "project", "url", MessageFormat.format("{0}/git/project/ticgit.git", url)); + git.getRepository().getConfig().setString("remote", "user", "url", MessageFormat.format("{0}/~{1}/ticgit.git", url, user.username)); + git.getRepository().getConfig().setString("remote", "project", "url", MessageFormat.format("{0}/project/ticgit.git", url)); git.getRepository().getConfig().save(); // push to non-existent user repository @@ -760,15 +788,15 @@ } GitBlitSuite.close(git); - GitBlit.self().deleteUser(user.username); + delete(user); } @Test public void testPushLog() throws IOException { String name = "refchecks/ticgit.git"; File refChecks = new File(GitBlitSuite.REPOSITORIES, name); - FileRepository repository = new FileRepository(refChecks); - List<PushLogEntry> pushes = PushLogUtils.getPushLog(name, repository); + Repository repository = new FileRepositoryBuilder().setGitDir(refChecks).build(); + List<RefLogEntry> pushes = RefLogUtils.getRefLog(name, repository); GitBlitSuite.close(repository); assertTrue("Repository has an empty push log!", pushes.size() > 0); } -- Gitblit v1.9.1