| | |
| | | import org.eclipse.jgit.transport.RemoteRefUpdate.Status; |
| | | import org.eclipse.jgit.util.FileUtils; |
| | | import org.junit.AfterClass; |
| | | import org.junit.Assert; |
| | | import org.junit.BeforeClass; |
| | | import org.junit.Test; |
| | | |
| | | import com.gitblit.Constants.AccessRestrictionType; |
| | | import com.gitblit.Constants.AuthorizationControl; |
| | | import com.gitblit.GitBlit; |
| | | import com.gitblit.models.RepositoryModel; |
| | | |
| | | public class GitDaemonTest extends Assert { |
| | | public class GitDaemonTest extends GitblitUnitTest { |
| | | |
| | | static File ticgitFolder = new File(GitBlitSuite.REPOSITORIES, "working/ticgit"); |
| | | |
| | | |
| | | static File ticgit2Folder = new File(GitBlitSuite.REPOSITORIES, "working/ticgit2"); |
| | | |
| | | static File jgitFolder = new File(GitBlitSuite.REPOSITORIES, "working/jgit"); |
| | | |
| | | |
| | | static File jgit2Folder = new File(GitBlitSuite.REPOSITORIES, "working/jgit2"); |
| | | |
| | | String url = GitBlitSuite.gitDaemonUrl; |
| | |
| | | } |
| | | |
| | | // set push restriction |
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("ticgit.git"); |
| | | RepositoryModel model = repositories().getRepositoryModel("ticgit.git"); |
| | | model.accessRestriction = AccessRestrictionType.PUSH; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | CloneCommand clone = Git.cloneRepository(); |
| | | clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); |
| | | clone.setDirectory(ticgitFolder); |
| | | clone.setBare(false); |
| | | clone.setCloneAllBranches(true); |
| | | GitBlitSuite.close(clone.call()); |
| | | GitBlitSuite.close(clone.call()); |
| | | assertTrue(true); |
| | | |
| | | |
| | | // restore anonymous repository access |
| | | model.accessRestriction = AccessRestrictionType.NONE; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | } |
| | | |
| | | |
| | | @Test |
| | | public void testCloneRestrictedRepo() throws Exception { |
| | | GitBlitSuite.close(ticgit2Folder); |
| | |
| | | } |
| | | |
| | | // restrict repository access |
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("ticgit.git"); |
| | | RepositoryModel model = repositories().getRepositoryModel("ticgit.git"); |
| | | model.accessRestriction = AccessRestrictionType.CLONE; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | |
| | | // delete any existing working folder |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | // delete any existing working folder |
| | | boolean cloned = false; |
| | | try { |
| | | CloneCommand clone = Git.cloneRepository(); |
| | |
| | | assertFalse("Anonymous was able to clone the repository?!", cloned); |
| | | |
| | | FileUtils.delete(ticgit2Folder, FileUtils.RECURSIVE); |
| | | |
| | | |
| | | // restore anonymous repository access |
| | | model.accessRestriction = AccessRestrictionType.NONE; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | } |
| | | |
| | | @Test |
| | |
| | | } |
| | | |
| | | // restore anonymous repository access |
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("ticgit.git"); |
| | | RepositoryModel model = repositories().getRepositoryModel("ticgit.git"); |
| | | model.accessRestriction = AccessRestrictionType.NONE; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | CloneCommand clone = Git.cloneRepository(); |
| | | clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); |
| | | clone.setDirectory(ticgitFolder); |
| | | clone.setBare(false); |
| | | clone.setCloneAllBranches(true); |
| | | GitBlitSuite.close(clone.call()); |
| | | GitBlitSuite.close(clone.call()); |
| | | assertTrue(true); |
| | | |
| | | |
| | | Git git = Git.open(ticgitFolder); |
| | | File file = new File(ticgitFolder, "TODO"); |
| | | OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file, true), Constants.CHARSET); |
| | |
| | | } |
| | | |
| | | // restore anonymous repository access |
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("ticgit.git"); |
| | | RepositoryModel model = repositories().getRepositoryModel("ticgit.git"); |
| | | model.accessRestriction = AccessRestrictionType.PUSH; |
| | | model.authorizationControl = AuthorizationControl.NAMED; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | CloneCommand clone = Git.cloneRepository(); |
| | | clone.setURI(MessageFormat.format("{0}/ticgit.git", url)); |
| | | clone.setDirectory(ticgitFolder); |
| | | clone.setBare(false); |
| | | clone.setCloneAllBranches(true); |
| | | GitBlitSuite.close(clone.call()); |
| | | GitBlitSuite.close(clone.call()); |
| | | assertTrue(true); |
| | | |
| | | |
| | | Git git = Git.open(ticgitFolder); |
| | | File file = new File(ticgitFolder, "TODO"); |
| | | OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file, true), Constants.CHARSET); |
| | |
| | | if (jgitFolder.exists()) { |
| | | FileUtils.delete(jgitFolder, FileUtils.RECURSIVE | FileUtils.RETRY); |
| | | } |
| | | |
| | | |
| | | CloneCommand clone = Git.cloneRepository(); |
| | | clone.setURI(MessageFormat.format("{0}/test/jgit.git", url)); |
| | | clone.setDirectory(jgitFolder); |
| | |
| | | clone.setCloneAllBranches(true); |
| | | GitBlitSuite.close(clone.call()); |
| | | assertTrue(true); |
| | | |
| | | |
| | | // freeze repo |
| | | RepositoryModel model = GitBlit.self().getRepositoryModel("test/jgit.git"); |
| | | RepositoryModel model = repositories().getRepositoryModel("test/jgit.git"); |
| | | model.isFrozen = true; |
| | | GitBlit.self().updateRepositoryModel(model.name, model, false); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | Git git = Git.open(jgitFolder); |
| | | File file = new File(jgitFolder, "TODO"); |
| | |
| | | w.close(); |
| | | git.add().addFilepattern(file.getName()).call(); |
| | | git.commit().setMessage("test commit").call(); |
| | | |
| | | |
| | | Iterable<PushResult> results = git.push().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); |
| | | repositories().updateRepositoryModel(model.name, model, false); |
| | | |
| | | results = git.push().setPushAll().call(); |
| | | GitBlitSuite.close(git); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | @Test |
| | | public void testPushToNonBareRepository() throws Exception { |
| | | GitBlitSuite.close(jgit2Folder); |
| | | if (jgit2Folder.exists()) { |
| | | FileUtils.delete(jgit2Folder, FileUtils.RECURSIVE | FileUtils.RETRY); |
| | | } |
| | | |
| | | |
| | | CloneCommand clone = Git.cloneRepository(); |
| | | clone.setURI(MessageFormat.format("{0}/working/jgit", url)); |
| | | clone.setDirectory(jgit2Folder); |
| | |
| | | |
| | | Iterable<PushResult> results = git.push().setPushAll().call(); |
| | | GitBlitSuite.close(git); |
| | | |
| | | |
| | | for (PushResult result : results) { |
| | | for (RemoteRefUpdate update : result.getRemoteUpdates()) { |
| | | assertEquals(Status.REJECTED_OTHER_REASON, update.getStatus()); |