From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/test/java/com/gitblit/tests/RpcTests.java | 99 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 86 insertions(+), 13 deletions(-) diff --git a/src/test/java/com/gitblit/tests/RpcTests.java b/src/test/java/com/gitblit/tests/RpcTests.java index bd7f277..51b4671 100644 --- a/src/test/java/com/gitblit/tests/RpcTests.java +++ b/src/test/java/com/gitblit/tests/RpcTests.java @@ -15,11 +15,6 @@ */ package com.gitblit.tests; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -37,9 +32,9 @@ import com.gitblit.Constants.AuthorizationControl; import com.gitblit.Constants.PermissionType; import com.gitblit.Constants.RegistrantType; +import com.gitblit.GitBlitException.ForbiddenException; import com.gitblit.GitBlitException.UnauthorizedException; import com.gitblit.Keys; -import com.gitblit.RpcServlet; import com.gitblit.models.FederationModel; import com.gitblit.models.FederationProposal; import com.gitblit.models.FederationSet; @@ -49,15 +44,16 @@ import com.gitblit.models.ServerStatus; import com.gitblit.models.TeamModel; import com.gitblit.models.UserModel; +import com.gitblit.servlet.RpcServlet; import com.gitblit.utils.RpcUtils; /** * Tests all the rpc client utility methods, the rpc filter and rpc servlet. - * + * * @author James Moger - * + * */ -public class RpcTests { +public class RpcTests extends GitblitUnitTest { String url = GitBlitSuite.url; String account = GitBlitSuite.account; @@ -101,6 +97,20 @@ list = RpcUtils.getUsers(url, "admin", "admin".toCharArray()); assertTrue("User list is empty!", list.size() > 0); + } + + @Test + public void testGetUser() throws IOException { + UserModel user = null; + try { + user = RpcUtils.getUser("admin", url, null, null); + } catch (ForbiddenException e) { + } + assertNull("Server allows anyone to get user!", user); + + user = RpcUtils.getUser("admin", url, "admin", "admin".toCharArray()); + assertEquals("User is not the admin!", "admin", user.username); + assertTrue("User is not an administrator!", user.canAdmin()); } @Test @@ -200,7 +210,7 @@ assertTrue("Failed to update repository!", RpcUtils.updateRepository(retrievedRepository.name, retrievedRepository, url, account, password.toCharArray())); retrievedRepository = findRepository(retrievedRepository.name); - + // memberships UserModel testMember = new UserModel("justadded"); assertTrue(RpcUtils.createUser(testMember, url, account, password.toCharArray())); @@ -257,7 +267,7 @@ public void testTeamAdministration() throws IOException { List<TeamModel> teams = RpcUtils.getTeams(url, account, password.toCharArray()); assertEquals(1, teams.size()); - + // Create the A-Team TeamModel aTeam = new TeamModel("A-Team"); aTeam.users.add("admin"); @@ -287,7 +297,7 @@ } } assertNotNull(helloworld); - + // Confirm that we have added the team List<String> helloworldTeams = RpcUtils.getRepositoryTeams(helloworld, url, account, password.toCharArray()); @@ -304,7 +314,7 @@ helloworldTeams = RpcUtils.getRepositoryTeams(helloworld, url, account, password.toCharArray()); assertEquals(0, helloworldTeams.size()); - + // delete the A-Team assertTrue(RpcUtils.deleteTeam(aTeam, url, account, password.toCharArray())); @@ -387,4 +397,67 @@ assertNotNull(branches); assertTrue(branches.size() > 0); } + + @Test + public void testFork() throws Exception { + // test forking by an administrator + // admins are all-powerful and can fork the unforakable :) + testFork(account, password, true, true); + testFork(account, password, false, true); + + // test forking by a permitted normal user + UserModel forkUser = new UserModel("forkuser"); + forkUser.password = forkUser.username; + forkUser.canFork = true; + RpcUtils.deleteUser(forkUser, url, account, password.toCharArray()); + RpcUtils.createUser(forkUser, url, account, password.toCharArray()); + testFork(forkUser.username, forkUser.password, true, true); + testFork(forkUser.username, forkUser.password, false, false); + RpcUtils.deleteUser(forkUser, url, account, password.toCharArray()); + + // test forking by a non-permitted normal user + UserModel noForkUser = new UserModel("noforkuser"); + noForkUser.password = noForkUser.username; + noForkUser.canFork = false; + RpcUtils.deleteUser(noForkUser, url, account, password.toCharArray()); + RpcUtils.createUser(noForkUser, url, account, password.toCharArray()); + testFork(forkUser.username, forkUser.password, true, false); + testFork(forkUser.username, forkUser.password, false, false); + RpcUtils.deleteUser(noForkUser, url, account, password.toCharArray()); + } + + private void testFork(String forkAcct, String forkAcctPassword, boolean allowForks, boolean expectSuccess) throws Exception { + // test does not exist + RepositoryModel dne = new RepositoryModel(); + dne.name = "doesNotExist.git"; + assertFalse(String.format("Successfully forked %s!", dne.name), + RpcUtils.forkRepository(dne, url, forkAcct, forkAcctPassword.toCharArray())); + + // delete any previous fork + RepositoryModel fork = findRepository(String.format("~%s/helloworld.git", forkAcct)); + if (fork != null) { + RpcUtils.deleteRepository(fork, url, account, password.toCharArray()); + } + + // update the origin to allow forks or not + RepositoryModel origin = findRepository("helloworld.git"); + origin.allowForks = allowForks; + RpcUtils.updateRepository(origin.name, origin, url, account, password.toCharArray()); + + // fork the repository + if (expectSuccess) { + assertTrue(String.format("Failed to fork %s!", origin.name), + RpcUtils.forkRepository(origin, url, forkAcct, forkAcctPassword.toCharArray())); + } else { + assertFalse(String.format("Successfully forked %s!", origin.name), + RpcUtils.forkRepository(origin, url, forkAcct, forkAcctPassword.toCharArray())); + } + + // attempt another fork + assertFalse(String.format("Successfully forked %s!", origin.name), + RpcUtils.forkRepository(origin, url, forkAcct, forkAcctPassword.toCharArray())); + + // delete the fork repository + RpcUtils.deleteRepository(fork, url, account, password.toCharArray()); + } } -- Gitblit v1.9.1