• Views
  • Iteration Report
  • My Iteration Report
  •  
OMERO.server
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Last Change
  • Annotate
  • Revision Log

root/trunk/components/client/test/ome/client/itests/sec/AdminTest.java

Revision 2003, 7.4 kB (checked in by jmoore, 12 months ago)

StructuredAnnotations : Starting integration testing

  • Had to reorder hibernate jars above jboss jars in .classpath
  • Removed StringAnnotation in favor of single TextAnnotation
  • Assuming that we will move back to using Dataset.ANNOTATIONLINKS for counts
  • Tests compiling
  • Fixes to foreign key names
  • Again using SaxReader? to generate annotation links
  • Added QueryAnnotation and BoolAnnotation
  • Added generated method signatures to IAnnotated
  • Moved to using AnnotationSessionFactory?

Conflicts:

components/server/test/ome/server/itests/PojosServiceTest.java

  • Property svn:keywords set to
    Date
    Revision
    Id
    URL
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 */
7package ome.client.itests.sec;
8
9import ome.api.IAdmin;
10import ome.conditions.ApiUsageException;
11import ome.conditions.SecurityViolation;
12import ome.model.core.Image;
13import ome.model.internal.Permissions;
14import ome.model.internal.Permissions.Right;
15import ome.model.internal.Permissions.Role;
16import ome.model.meta.Experimenter;
17import ome.model.meta.ExperimenterGroup;
18import ome.model.meta.GroupExperimenterMap;
19import ome.system.Login;
20import ome.system.Roles;
21import ome.system.ServiceFactory;
22
23import org.testng.annotations.Test;
24
25public 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.

Download in other formats:

  • Plain Text
  • Original Format

Trac Powered

Powered by Trac 0.11
By Edgewall Software.

Visit the Trac open source project at
http://trac.edgewall.org/