James Moger
2012-11-30 e377dce8818ecd55bb599a8532376cf55e56381a
commit | author | age
93f472 1 /*
JM 2  * Copyright 2011 gitblit.com.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.gitblit.tests;
17
7e8873 18 import static org.junit.Assert.assertEquals;
JM 19 import static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21
93f472 22 import java.io.File;
JM 23 import java.io.IOException;
24
7e8873 25 import org.junit.Test;
93f472 26
JM 27 import com.gitblit.ConfigUserService;
20714a 28 import com.gitblit.Constants.AccessRestrictionType;
93f472 29 import com.gitblit.FileUserService;
JM 30 import com.gitblit.IUserService;
20714a 31 import com.gitblit.models.RepositoryModel;
7e8873 32 import com.gitblit.models.TeamModel;
93f472 33 import com.gitblit.models.UserModel;
JM 34
7e8873 35 public class UserServiceTest {
93f472 36
7e8873 37     @Test
93f472 38     public void testFileUserService() throws IOException {
JM 39         File file = new File("us-test.properties");
40         file.delete();
7e8873 41         IUserService service = new FileUserService(file);
JM 42         testUsers(service);
fe24a0 43         testTeams(service);
93f472 44         file.delete();
JM 45     }
46
7e8873 47     @Test
93f472 48     public void testConfigUserService() throws IOException {
JM 49         File file = new File("us-test.conf");
50         file.delete();
7e8873 51         IUserService service = new ConfigUserService(file);
JM 52         testUsers(service);
fe24a0 53         testTeams(service);
93f472 54         file.delete();
JM 55     }
56
7e8873 57     protected void testUsers(IUserService service) {
93f472 58
JM 59         UserModel admin = service.getUserModel("admin");
60         assertTrue(admin == null);
61
dcf575 62         // add admin and admins team
JM 63         TeamModel admins = new TeamModel("admins");
64         admins.mailingLists.add("admins@localhost.com");
65         
93f472 66         admin = new UserModel("admin");
JM 67         admin.password = "password";
68         admin.canAdmin = true;
69         admin.excludeFromFederation = true;
dcf575 70         admin.teams.add(admins);
JM 71         
93f472 72         service.updateUserModel(admin);
JM 73         admin = null;
dcf575 74         admins = null;
93f472 75
JM 76         // add new user
77         UserModel newUser = new UserModel("test");
78         newUser.password = "testPassword";
20714a 79         newUser.addRepositoryPermission("repo1");
JM 80         newUser.addRepositoryPermission("repo2");
81         newUser.addRepositoryPermission("sub/repo3");
93f472 82         service.updateUserModel(newUser);
JM 83
84         // add one more new user and then test reload of first new user
ae0b13 85         newUser = new UserModel("GARBAGE");
93f472 86         newUser.password = "garbage";
JM 87         service.updateUserModel(newUser);
88
89         // confirm all added users
90         assertEquals(3, service.getAllUsernames().size());
ae0b13 91         assertTrue(service.getUserModel("garbage") != null);
JM 92         assertTrue(service.getUserModel("GaRbAgE") != null);
93         assertTrue(service.getUserModel("GARBAGE") != null);
93f472 94
JM 95         // confirm reloaded test user
96         newUser = service.getUserModel("test");
97         assertEquals("testPassword", newUser.password);
20714a 98         assertEquals(3, newUser.permissions.size());
JM 99         assertTrue(newUser.hasRepositoryPermission("repo1"));
100         assertTrue(newUser.hasRepositoryPermission("repo2"));
101         assertTrue(newUser.hasRepositoryPermission("sub/repo3"));
93f472 102
JM 103         // confirm authentication of test user
104         UserModel testUser = service.authenticate("test", "testPassword".toCharArray());
105         assertEquals("test", testUser.username);
106         assertEquals("testPassword", testUser.password);
107
108         // delete a repository role and confirm role removal from test user
109         service.deleteRepositoryRole("repo2");
110         testUser = service.getUserModel("test");
20714a 111         assertEquals(2, testUser.permissions.size());
93f472 112
JM 113         // delete garbage user and confirm user count
114         service.deleteUser("garbage");
115         assertEquals(2, service.getAllUsernames().size());
116
117         // rename repository and confirm role change for test user
118         service.renameRepositoryRole("repo1", "newrepo1");
119         testUser = service.getUserModel("test");
20714a 120         assertTrue(testUser.hasRepositoryPermission("newrepo1"));
93f472 121     }
fe24a0 122
JM 123     protected void testTeams(IUserService service) {
124
dcf575 125         // confirm we have 1 team (admins)
JM 126         assertEquals(1, service.getAllTeamNames().size());
127         assertEquals("admins", service.getAllTeamNames().get(0));
20714a 128         
JM 129         RepositoryModel newrepo1 = new RepositoryModel("newrepo1", null, null, null);
130         newrepo1.accessRestriction = AccessRestrictionType.VIEW;
131         RepositoryModel NEWREPO1 = new RepositoryModel("NEWREPO1", null, null, null);
132         NEWREPO1.accessRestriction = AccessRestrictionType.VIEW;
fe24a0 133
JM 134         // remove newrepo1 from test user
135         // now test user has no repositories
136         UserModel user = service.getUserModel("test");
20714a 137         user.permissions.clear();
fe24a0 138         service.updateUserModel(user);
JM 139         user = service.getUserModel("test");
20714a 140         assertEquals(0, user.permissions.size());
JM 141         assertFalse(user.canView(newrepo1));
142         assertFalse(user.canView(NEWREPO1));
fe24a0 143
JM 144         // create test team and add test user and newrepo1
145         TeamModel team = new TeamModel("testteam");
146         team.addUser("test");
20714a 147         team.addRepositoryPermission(newrepo1.name);
fe24a0 148         service.updateTeamModel(team);
JM 149
150         // confirm 1 user and 1 repo
151         team = service.getTeamModel("testteam");
20714a 152         assertEquals(1, team.permissions.size());
fe24a0 153         assertEquals(1, team.users.size());
JM 154
155         // confirm team membership
156         user = service.getUserModel("test");
20714a 157         assertEquals(0, user.permissions.size());
fe24a0 158         assertEquals(1, user.teams.size());
JM 159
160         // confirm team access
20714a 161         assertTrue(team.hasRepositoryPermission(newrepo1.name));
JM 162         assertTrue(user.canView(newrepo1));
163         assertTrue(team.hasRepositoryPermission(NEWREPO1.name));
164         assertTrue(user.canView(NEWREPO1));
fe24a0 165
JM 166         // rename the team and add new repository
20714a 167         RepositoryModel newrepo2 = new RepositoryModel("newrepo2", null, null, null);
JM 168         newrepo2.accessRestriction = AccessRestrictionType.VIEW;
169         RepositoryModel NEWREPO2 = new RepositoryModel("NEWREPO2", null, null, null);
170         NEWREPO2.accessRestriction = AccessRestrictionType.VIEW;
171         
172         team.addRepositoryPermission(newrepo2.name);
fe24a0 173         team.name = "testteam2";
JM 174         service.updateTeamModel("testteam", team);
175
176         team = service.getTeamModel("testteam2");
177         user = service.getUserModel("test");
178
179         // confirm user and team can access newrepo2
20714a 180         assertEquals(2, team.permissions.size());
JM 181         assertTrue(team.hasRepositoryPermission(newrepo2.name));
182         assertTrue(user.canView(newrepo2));
183         assertTrue(team.hasRepositoryPermission(NEWREPO2.name));
184         assertTrue(user.canView(NEWREPO2));
fe24a0 185
JM 186         // delete testteam2
187         service.deleteTeam("testteam2");
188         team = service.getTeamModel("testteam2");
189         user = service.getUserModel("test");
190
191         // confirm team does not exist and user can not access newrepo1 and 2
192         assertEquals(null, team);
20714a 193         assertFalse(user.canView(newrepo1));
JM 194         assertFalse(user.canView(newrepo2));
fe24a0 195
JM 196         // create new team and add it to user
197         // this tests the inverse team creation/team addition
198         team = new TeamModel("testteam");
20714a 199         team.addRepositoryPermission(NEWREPO1.name);
JM 200         team.addRepositoryPermission(NEWREPO2.name);
fe24a0 201         user.teams.add(team);
JM 202         service.updateUserModel(user);
203
204         // confirm the inverted team addition
205         user = service.getUserModel("test");
206         team = service.getTeamModel("testteam");
20714a 207         assertTrue(user.canView(newrepo1));
JM 208         assertTrue(user.canView(newrepo2));
fe24a0 209         assertTrue(team.hasUser("test"));
JM 210
211         // drop testteam from user and add nextteam to user
212         team = new TeamModel("nextteam");
20714a 213         team.addRepositoryPermission(NEWREPO1.name);
JM 214         team.addRepositoryPermission(NEWREPO2.name);
fe24a0 215         user.teams.clear();
JM 216         user.teams.add(team);
217         service.updateUserModel(user);
218
219         // confirm implicit drop
220         user = service.getUserModel("test");
221         team = service.getTeamModel("testteam");
20714a 222         assertTrue(user.canView(newrepo1));
JM 223         assertTrue(user.canView(newrepo2));
fe24a0 224         assertFalse(team.hasUser("test"));
JM 225         team = service.getTeamModel("nextteam");
226         assertTrue(team.hasUser("test"));
227
228         // delete the user and confirm team no longer has user
229         service.deleteUser("test");
230         team = service.getTeamModel("testteam");
231         assertFalse(team.hasUser("test"));
232
233         // delete both teams
234         service.deleteTeam("testteam");
235         service.deleteTeam("nextteam");
dcf575 236         
JM 237         // assert we still have the admins team
238         assertEquals(1, service.getAllTeamNames().size());
239         assertEquals("admins", service.getAllTeamNames().get(0));
240         
241         team = service.getTeamModel("admins");
242         assertEquals(1, team.mailingLists.size());
243         assertTrue(team.mailingLists.contains("admins@localhost.com"));
fe24a0 244     }
93f472 245 }