root/trunk/components/client/test/ome/client/itests/sec/AdminTest.java
| Revision 2003, 7.4 kB (checked in by jmoore, 12 months ago) | |
|---|---|
|
|
| Line | |
|---|---|
| 1 | /* |
| 2 | * $Id$ |
| 3 | * |
| 4 | * Copyright 2006 University of Dundee. All rights reserved. |
| 5 | * Use is subject to license terms supplied in LICENSE.txt |
| 6 | */ |
| 7 | package ome.client.itests.sec; |
| 8 | |
| 9 | import ome.api.IAdmin; |
| 10 | import ome.conditions.ApiUsageException; |
| 11 | import ome.conditions.SecurityViolation; |
| 12 | import ome.model.core.Image; |
| 13 | import ome.model.internal.Permissions; |
| 14 | import ome.model.internal.Permissions.Right; |
| 15 | import ome.model.internal.Permissions.Role; |
| 16 | import ome.model.meta.Experimenter; |
| 17 | import ome.model.meta.ExperimenterGroup; |
| 18 | import ome.model.meta.GroupExperimenterMap; |
| 19 | import ome.system.Login; |
| 20 | import ome.system.Roles; |
| 21 | import ome.system.ServiceFactory; |
| 22 | |
| 23 | import org.testng.annotations.Test; |
| 24 | |
| 25 | public class AdminTest extends AbstractAccountTest { |
| 26 | |
| 27 | // ~ chown / chgrp / chmod |
| 28 | // ========================================================================= |
| 29 | |
| 30 | @Test |
| 31 | public void testChownThroughIUpdateActuallyWorks() throws Exception { |
| 32 | ServiceFactory u = createUser(); |
| 33 | |
| 34 | // target user |
| 35 | Experimenter target = createNewUser(rootAdmin); |
| 36 | |
| 37 | // new image |
| 38 | Image i = new Image(); |
| 39 | i.setName("test"); |
| 40 | i = u.getUpdateService().saveAndReturnObject(i); |
| 41 | |
| 42 | // change owner |
| 43 | Image test = rootQuery.get(Image.class, i.getId()); |
| 44 | test.getDetails().setOwner(target); |
| 45 | rootUpdate.saveObject(test); |
| 46 | test = rootQuery.get(Image.class, i.getId()); |
| 47 | assertEquals(test.getDetails().getOwner().getId(), target.getId()); |
| 48 | } |
| 49 | |
| 50 | @Test(groups = "ticket:397") |
| 51 | public void testChangePermissionsCantMisuseAdminAction() throws Exception { |
| 52 | |
| 53 | ServiceFactory u = createUser(); |
| 54 | |
| 55 | // make an image |
| 56 | Image i = new Image(); |
| 57 | i.setName("adminactiontest"); |
| 58 | i = u.getUpdateService().saveAndReturnObject(i); |
| 59 | |
| 60 | // use changePerms to change the permissions |
| 61 | // but try to pass in a trojan horse |
| 62 | Permissions perms = new Permissions().grant(Role.WORLD, Right.WRITE); |
| 63 | i.getDetails().setOwner(new Experimenter(0L, false)); |
| 64 | u.getAdminService().changePermissions(i, perms); |
| 65 | i = u.getQueryService().get(i.getClass(), i.getId()); |
| 66 | assertFalse(i.getDetails().getOwner().getId().equals(0L)); |
| 67 | |
| 68 | } |
| 69 | |
| 70 | // ~ updating users |
| 71 | // ========================================================================= |
| 72 | |
| 73 | /** |
| 74 | * Here the only change made was to allow all users to get the default group |
| 75 | * for another user. Since this is visible anyway, there's no major concern. |
| 76 | */ |
| 77 | @Test(groups = "ticket:688") |
| 78 | public void testGetDefaultGroup() throws Exception { |
| 79 | ServiceFactory u = createUser(); |
| 80 | ome.api.IAdmin uAdmin = u.getAdminService(); |
| 81 | long uid = uAdmin.getEventContext().getCurrentUserId(); |
| 82 | rootAdmin.getDefaultGroup(uid); |
| 83 | uAdmin.getDefaultGroup(uid); |
| 84 | } |
| 85 | |
| 86 | /** |
| 87 | * Setting the default group, however, is more critical. If a user is not |
| 88 | * the admin, then we must be careful to not allow them to change other |
| 89 | * user's groups, nor to elevate their privileges |
| 90 | */ |
| 91 | @Test(groups = "ticket:688") |
| 92 | public void testSetDefaultGroup() throws Exception { |
| 93 | |
| 94 | Roles roles = rootAdmin.getSecurityRoles(); |
| 95 | |
| 96 | // Creating our target user and group |
| 97 | ExperimenterGroup newgrp = new ExperimenterGroup(); |
| 98 | newgrp.setName(java.util.UUID.randomUUID().toString()); |
| 99 | long gid = rootAdmin.createGroup(newgrp); |
| 100 | newgrp.setId(gid); |
| 101 | |
| 102 | Experimenter user = createNewUser(rootAdmin); // in default group |
| 103 | Login ul = new Login(user.getOmeName(), ""); |
| 104 | ServiceFactory usf = new ServiceFactory(ul); |
| 105 | IAdmin ua = usf.getAdminService(); |
| 106 | |
| 107 | ExperimenterGroup oldgrp = rootAdmin.getDefaultGroup(user.getId()); |
| 108 | rootAdmin.addGroups(user, newgrp); |
| 109 | |
| 110 | // Let's make sure this still works properly |
| 111 | Experimenter admin = createNewSystemUser(rootAdmin); |
| 112 | Login al = new Login(admin.getOmeName(), ""); |
| 113 | ServiceFactory asf = new ServiceFactory(al); |
| 114 | IAdmin aa = asf.getAdminService(); |
| 115 | ExperimenterGroup currgrp = aa.getDefaultGroup(user.getId()); |
| 116 | assertEquals(oldgrp.getName(), currgrp.getName()); |
| 117 | aa.setDefaultGroup(user, newgrp); |
| 118 | |
| 119 | // And now let's see what a user can do |
| 120 | try { |
| 121 | ExperimenterGroup sysGrp = ua.lookupGroup(roles |
| 122 | .getSystemGroupName()); |
| 123 | ua.setDefaultGroup(user, sysGrp); |
| 124 | } catch (ApiUsageException aue) { |
| 125 | // good! |
| 126 | } |
| 127 | |
| 128 | try { |
| 129 | ua.setDefaultGroup(admin, newgrp); |
| 130 | } catch (SecurityViolation sv) { |
| 131 | // good! |
| 132 | } |
| 133 | |
| 134 | // Resetting; should work. |
| 135 | ua.setDefaultGroup(user, oldgrp); |
| 136 | |
| 137 | } |
| 138 | |
| 139 | @Test(groups = "ticket:688") |
| 140 | public void testUpdateUser() throws Exception { |
| 141 | |
| 142 | // A new user |
| 143 | ServiceFactory u = createUser(); |
| 144 | IAdmin ua = u.getAdminService(); |
| 145 | String name = ua.getEventContext().getCurrentUserName(); |
| 146 | Experimenter self = ua.lookupExperimenter(name); |
| 147 | |
| 148 | // A new group which the user can attempt to add |
| 149 | ExperimenterGroup grp = new ExperimenterGroup(); |
| 150 | grp.setName(java.util.UUID.randomUUID().toString()); |
| 151 | long gid = rootAdmin.createGroup(grp); |
| 152 | ExperimenterGroup grpPrx = new ExperimenterGroup(gid, false); |
| 153 | |
| 154 | // Groups (non-changeable) |
| 155 | ExperimenterGroup dfault = ua.getDefaultGroup(self.getId()); |
| 156 | ExperimenterGroup groups[] = ua.containedGroups(self.getId()); |
| 157 | java.util.Set<Long> s = new java.util.HashSet<Long>(); |
| 158 | for (ExperimenterGroup g : groups) { |
| 159 | s.add(g.getId()); |
| 160 | } |
| 161 | |
| 162 | // Fields (changeable) |
| 163 | Long id; |
| 164 | String on, fn, mn, ln, em, in, uuid; |
| 165 | id = self.getId(); |
| 166 | on = self.getOmeName(); |
| 167 | fn = self.getFirstName(); |
| 168 | mn = self.getMiddleName(); |
| 169 | ln = self.getLastName(); |
| 170 | em = self.getEmail(); |
| 171 | in = self.getInstitution(); |
| 172 | |
| 173 | uuid = java.util.UUID.randomUUID().toString(); |
| 174 | |
| 175 | self.setId(-1L); |
| 176 | self.setOmeName(uuid); |
| 177 | self.setFirstName(uuid); |
| 178 | self.setMiddleName(uuid); |
| 179 | self.setLastName(uuid); |
| 180 | self.setEmail(uuid); |
| 181 | self.setInstitution(uuid); |
| 182 | |
| 183 | GroupExperimenterMap map = self.linkExperimenterGroup(grpPrx); |
| 184 | self.setPrimaryGroupExperimenterMap(map); |
| 185 | |
| 186 | // Update and reacquire |
| 187 | ua.updateSelf(self); |
| 188 | self = ua.getExperimenter(id); |
| 189 | |
| 190 | // Should be changed |
| 191 | assertEquals(id, self.getId()); |
| 192 | assertEquals(name, self.getOmeName()); |
| 193 | assertFalse(fn.equals(self.getFirstName())); |
| 194 | assertNull(mn); |
| 195 | assertNotNull(self.getMiddleName()); |
| 196 | assertFalse(ln.equals(self.getLastName())); |
| 197 | assertNull(em); |
| 198 | assertNotNull(self.getEmail()); |
| 199 | assertNull(in); |
| 200 | assertNotNull(self.getInstitution()); |
| 201 | |
| 202 | // Should not be changed |
| 203 | ExperimenterGroup check[] = rootAdmin.containedGroups(id); |
| 204 | java.util.Set<Long> s2 = new java.util.HashSet<Long>(); |
| 205 | for (ExperimenterGroup g : check) { |
| 206 | s2.add(g.getId()); |
| 207 | } |
| 208 | assertEquals(s.size(), s2.size()); |
| 209 | assertEquals(dfault.getId(), rootAdmin.getDefaultGroup(id).getId()); |
| 210 | } |
| 211 | |
| 212 | // ~ utilities |
| 213 | // ========================================================================= |
| 214 | |
| 215 | private ServiceFactory createUser() { |
| 216 | Experimenter e = createNewUser(rootAdmin); |
| 217 | Login l = new Login(e.getOmeName(), ""); |
| 218 | ServiceFactory u = new ServiceFactory(l); |
| 219 | return u; |
| 220 | } |
| 221 | |
| 222 | } |
Note: See TracBrowser
for help on using the browser.
