1
15
16 package gate.security;
17
18 import java.util.List;
19
20 import junit.framework.*;
21
22 import gate.*;
23 import gate.Factory;
24 import gate.Gate;
25 import gate.util.*;
26
27
29 public class TestSecurity extends TestCase
30 {
31
32 private static final boolean DEBUG = false;
33 private static final int ADMIN_GROUP_ID = 0;
34 private static final int ADMIN_USER_ID = 0;
35
36 private static final int SUAHILI_GROUP_ID = 101;
37 private static final int ENGLISH_GROUP_ID = 101;
38
39
40
41 private static String JDBC_URL;
42
43 private boolean exceptionThrown = false;
44
45
46 public TestSecurity(String name) throws GateException { super(name); }
47
48
49 public void setUp() throws Exception {
50 if (! DataStoreRegister.getConfigData().containsKey("url-test"))
51 throw new GateRuntimeException("DB URL not configured in gate.xml");
52 else
53 JDBC_URL =
54 (String) DataStoreRegister.getConfigData().get("url-test");
55 }
57
60 public void tearDown() throws Exception {
61 }
63
64 public void testSecurityTables() throws Exception {
65 AccessController ac = Factory.createAccessController(JDBC_URL);
67 ac.open();
68
69 User myUser = ac.findUser("kalina");
70 Assert.assertNotNull(myUser);
71 Assert.assertEquals(myUser.getName(), "kalina");
72
73 List myGroups = myUser.getGroups();
74
75 Assert.assertNotNull(myGroups);
76 for (int i = 0; i< myGroups.size(); i++) {
77 Group myGroup = (Group)myGroups.get(i);
79 if (i == 0)
80 Assert.assertEquals(myGroup.getName(), "English Language Group");
81 else if (i == 1)
82 Assert.assertEquals(myGroup.getName(), "Suahili Group");
83 }
87 Session mySession = ac.login("kalina", "sesame",
88 ac.findGroup("English Language Group").getID());
89 Assert.assertNotNull(mySession);
90
92 }
94
95
96 public void testUserGroupManipulation() throws Exception {
97
98 AccessController ac = Factory.createAccessController(JDBC_URL);
100 ac.open();
101
102 List groups = ac.listGroups();
104 Assert.assertNotNull(groups);
105
106 if(DEBUG)
107 Err.prln("+++ found ["+groups.size()+"] groups...");
108
109 List users = ac.listUsers();
110 Assert.assertNotNull(users);
111 if(DEBUG)
112 Err.prln("+++ found ["+users.size()+"] users...");
113
114 Session adminSession = ac.login("ADMIN", "sesame",new Long(ADMIN_GROUP_ID));
116 Assert.assertNotNull(adminSession);
118 Assert.assertTrue(true == ac.isValidSession(adminSession));
120 Assert.assertTrue(adminSession.isPrivilegedSession());
122
123 User myUser;
125 try {
126 myUser = ac.createUser("myUser", "myPassword",adminSession);
127 } catch (gate.security.SecurityException ex) {
128 adminSession = ac.login("ADMIN", "sesame", ac.findGroup("ADMINS").getID());
130 Assert.assertTrue(adminSession.isPrivilegedSession());
132
133 myUser = ac.createUser("myUser", "myPassword",adminSession);
134 }
135
136 Assert.assertNotNull(ac.findUser("myUser"));
138 Assert.assertEquals(myUser,ac.findUser("myUser"));
140 Assert.assertEquals(myUser.getName(),ac.findUser("myUser").getName());
142
143
144
145 Group myGroup = ac.createGroup("myGroup",adminSession);
146 Assert.assertNotNull(ac.findGroup("myGroup"));
148 Assert.assertEquals(myGroup,ac.findGroup("myGroup"));
150 Assert.assertEquals(myGroup.getName(), "myGroup");
152
153
154
155 myGroup.addUser(myUser, adminSession);
157 Assert.assertTrue(myGroup.getUsers().contains(myUser));
159
160 Assert.assertTrue(myUser.getGroups().contains(myGroup));
162
163 String oldName = myGroup.getName();
165 myGroup.setName("my new group", adminSession);
166 Assert.assertEquals("my new group",myGroup.getName());
168 Assert.assertNotNull(ac.findGroup("my new group"));
172 exceptionThrown = false;
175 try { ac.findGroup(oldName); }
176 catch(SecurityException sex) {exceptionThrown = true;}
177 Assert.assertTrue(exceptionThrown);
178
179 oldName = myUser.getName();
181 myUser.setName("my new user", adminSession);
182 Assert.assertEquals("my new user",myUser.getName());
184 Assert.assertNotNull(ac.findUser("my new user"));
188 exceptionThrown = false;
191 try { ac.findUser(oldName); }
192 catch(SecurityException sex) {exceptionThrown = true;}
193 Assert.assertTrue(exceptionThrown);
194
195 myUser.setName(oldName, adminSession);
197
198 List myUsers = myGroup.getUsers();
200 Assert.assertNotNull(myUsers);
201 for (int i = 0; i< myUsers.size(); i++) {
202 User myUser1 = ac.findUser(((User)myUsers.get(i)).getID());
205 Assert.assertTrue(myUser1.getGroups().contains(myGroup));
207
208
209 }
211 myGroup.setName("my new group again", adminSession);
213 Assert.assertEquals("my new group again",myGroup.getName());
215
216 Session mySession = ac.login("myUser", "myPassword",
218 ac.findGroup("my new group again").getID());
219 Assert.assertNotNull(mySession);
221 Assert.assertTrue(true == ac.isValidSession(mySession));
223
224 ac.logout(mySession);
226 Assert.assertTrue(false == ac.isValidSession(mySession));
228
229 exceptionThrown = false;
231 try {
232 myGroup.removeUser(myUser,mySession);
233 }
234 catch(SecurityException ex) {
235 exceptionThrown = true;
236 if(DEBUG)
237 Err.prln("++++ OK, got exception ["+ex.getMessage()+"]");
238 }
239 Assert.assertTrue(true == exceptionThrown);
240
241 mySession = ac.login("myUser", "myPassword",
243 ac.findGroup("my new group again").getID());
244 Assert.assertNotNull(mySession);
246 Assert.assertTrue(true == ac.isValidSession(mySession));
248
249 ac.deleteGroup(myGroup, adminSession);
251 exceptionThrown = false;
253 try {
254 ac.findGroup(myGroup.getName());
255 }
256 catch(SecurityException se) {
257 if(DEBUG)
258 Err.prln("++ OK, got exception");
259
260 exceptionThrown = true;
261 }
262 Assert.assertTrue(exceptionThrown);
263
264 Assert.assertTrue(false == myUser.getGroups().contains(myGroup));
266
267 Assert.assertTrue(false == ac.isValidSession(mySession));
269
270 Group suahiliGrp = ac.findGroup(new Long(TestSecurity.SUAHILI_GROUP_ID));
272 Assert.assertNotNull(suahiliGrp);
273 suahiliGrp.addUser(myUser,adminSession);
274 Assert.assertTrue(suahiliGrp.getUsers().contains(myUser));
276 Assert.assertTrue(myUser.getGroups().contains(suahiliGrp));
278 Session newSession = ac.login("myUser","myPassword",suahiliGrp.getID());
280 Assert.assertTrue(ac.isValidSession(newSession));
282
283
284
287 ac.deleteUser(myUser, adminSession);
289 exceptionThrown = false;
291 try {
292 ac.findUser(myUser.getName());
293 }
294 catch(SecurityException se) {
295
296 if(DEBUG)
297 Err.prln("++ OK, got exception");
298
299 exceptionThrown = true;
300 }
301 Assert.assertTrue(exceptionThrown);
302 Assert.assertTrue(false == suahiliGrp.getUsers().contains(myUser));
304 Assert.assertTrue(false == ac.isValidSession(newSession));
306
307
309
311 }
313
314
315
316 public static Test suite() {
317 return new TestSuite(TestSecurity.class);
318 }
320 public static void main(String[] args){
321 try{
322 Gate.setLocalWebServer(false);
323 Gate.setNetConnected(false);
324 Gate.init();
325 TestSecurity test = new TestSecurity("");
326
327 test.setUp();
328 test.testSecurityTables();
329 test.tearDown();
330
331 test.setUp();
332 test.testUserGroupManipulation();
333 test.tearDown();
334
335 }catch(Exception e){
336 e.printStackTrace();
337 }
338 }
339 }