• 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/server/test/ome/server/itests/sec/AdminTest.java

Revision 3075, 19.3 kB (checked in by andrew, 2 months ago)

Update to September 2008 Data Model
Major update to the data model mapping files.
Minor updates to other files to fix the resulting errors / warnings.
Temporary fix for removal of Color object - replaced with ColorFix? until it can be removed completely.

  • 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.server.itests.sec;
8
9import java.util.ArrayList;
10import java.util.List;
11import java.util.UUID;
12
13import ome.conditions.ApiUsageException;
14import ome.conditions.SecurityViolation;
15import ome.conditions.ValidationException;
16import ome.model.IObject;
17import ome.model.containers.Dataset;
18import ome.model.containers.Project;
19import ome.model.core.Image;
20import ome.model.internal.Permissions;
21import ome.model.internal.Permissions.Flag;
22import ome.model.meta.Experimenter;
23import ome.model.meta.ExperimenterGroup;
24import ome.server.itests.AbstractManagedContextTest;
25import ome.system.Roles;
26import ome.util.IdBlock;
27
28import org.testng.annotations.ExpectedExceptions;
29import org.testng.annotations.Test;
30
31public class AdminTest extends AbstractManagedContextTest {
32
33    // ~ IAdmin.createUser
34    // =========================================================================
35
36    @Test
37    @ExpectedExceptions(ApiUsageException.class)
38    public void testUserAccountCreationWithNull() throws Exception {
39        iAdmin.createUser(null, null);
40    }
41
42    @Test
43    @ExpectedExceptions(ApiUsageException.class)
44    public void testUserAccountCreationWithEmpty() throws Exception {
45        Experimenter e = new Experimenter();
46        iAdmin.createUser(e, null);
47    }
48
49    @Test
50    @ExpectedExceptions(ApiUsageException.class)
51    public void testUserAccountCreationWithUnknownGroup() throws Exception {
52        Experimenter e = new Experimenter();
53        iAdmin.createUser(e, uuid()); // uuid won't exist
54    }
55
56    @Test
57    public void testUserAccountCreation() throws Exception {
58        ExperimenterGroup g = testGroup();
59        iAdmin.createGroup(g);
60        Experimenter e = testExperimenter();
61        e = iAdmin.getExperimenter(iAdmin.createUser(e, g.getName()));
62        assertNotNull(e.getEmail());
63        assertNotNull(e.getOmeName());
64        assertNotNull(e.getFirstName());
65        assertNotNull(e.getLastName());
66        int size = e.sizeOfGroupExperimenterMap();
67        assertTrue(String.format("%d not 2", size), size == 2);
68    }
69
70    // ~ IAdmin.createSystemUser
71    // =========================================================================
72
73    @Test
74    @ExpectedExceptions(ApiUsageException.class)
75    public void testSysUserAccountCreationWithNull() throws Exception {
76        iAdmin.createUser(null, null);
77    }
78
79    @Test
80    @ExpectedExceptions(ApiUsageException.class)
81    public void testSysUserAccountCreationWithEmpty() throws Exception {
82        Experimenter e = new Experimenter();
83        iAdmin.createSystemUser(e);
84    }
85
86    @Test
87    public void testSysUserAccountCreation() throws Exception {
88        Experimenter e = testExperimenter();
89        e = iAdmin.getExperimenter(iAdmin.createSystemUser(e));
90        assertNotNull(e.getEmail());
91        assertNotNull(e.getOmeName());
92        assertNotNull(e.getFirstName());
93        assertNotNull(e.getLastName());
94        assertTrue(iAdmin.containedGroups(e.getId()).length == 2);
95        assertTrue(e.sizeOfGroupExperimenterMap() == 2);
96    }
97
98    // ~ IAdmin.createExperimenter
99    // =========================================================================
100
101    @Test
102    @ExpectedExceptions(ApiUsageException.class)
103    public void testExperimenterAccountCreationWithAllNulls() throws Exception {
104        iAdmin.createExperimenter(null, null, (ome.model.meta.ExperimenterGroup[])null);
105    }
106
107    @Test
108    @ExpectedExceptions(ApiUsageException.class)
109    public void testExperimenterAccountCreationWithEmpty() throws Exception {
110        Experimenter e = new Experimenter();
111        iAdmin.createExperimenter(e, null, (ome.model.meta.ExperimenterGroup[])null);
112    }
113
114    @Test
115    public void testExperimenterAccountCreation() throws Exception {
116        Experimenter e = testExperimenter();
117        e = iAdmin.getExperimenter(iAdmin.createExperimenter(e,
118                new ExperimenterGroup(0L, false), (ome.model.meta.ExperimenterGroup[])null));
119        assertNotNull(e.getEmail());
120        assertNotNull(e.getOmeName());
121        assertNotNull(e.getFirstName());
122        assertNotNull(e.getLastName());
123        assertTrue(e.sizeOfGroupExperimenterMap() == 1);
124    }
125
126    @Test(groups = "ticket:1021")
127    public void testDefaultGroupNotAddedTwice() throws Exception {
128        List<ExperimenterGroup> groups = iAdmin.lookupGroups();
129        ExperimenterGroup def = null, nonDef = null;
130        for (ExperimenterGroup group : groups) {
131            if (group.getName().equals("user")
132                    || group.getName().equals("system")) {
133                continue;
134            }
135            if (def == null) {
136                def = group;
137            } else if (nonDef == null) {
138                nonDef = group;
139            } else {
140                break;
141            }
142        }
143        assertNotNull(def);
144        assertNotNull(nonDef);
145
146        Experimenter e = testExperimenter();
147        long id = iAdmin.createExperimenter(e, def, nonDef);
148        e = iAdmin.lookupExperimenter(e.getOmeName());
149        assertEquals("should be 2", 2, e.sizeOfGroupExperimenterMap());
150
151        e = testExperimenter();
152        id = iAdmin.createExperimenter(e, def, nonDef, def);
153        e = iAdmin.lookupExperimenter(e.getOmeName());
154        assertEquals("should still be 2", 2, e.sizeOfGroupExperimenterMap());
155
156    }
157
158    private ExperimenterGroup testGroup() {
159        ExperimenterGroup g = new ExperimenterGroup();
160        g.setName(uuid());
161        return g;
162    }
163
164    private Experimenter testExperimenter() {
165        Experimenter e = new Experimenter();
166        e.setEmail("blah");
167        e.setFirstName("foo");
168        e.setLastName("bar");
169        e.setOmeName(UUID.randomUUID().toString());
170        return e;
171    }
172
173    // ~ Groups
174    // =========================================================================
175    @Test(groups = "ticket:293")
176    public void testUserCanOnlySetDetailsOnOwnObject() throws Exception {
177        ExperimenterGroup g = testGroup();
178        iAdmin.createGroup(g);
179
180        Experimenter e1 = testExperimenter();
181        iAdmin.createUser(e1, g.getName());
182
183        loginUser(e1.getOmeName());
184
185        Image i = new Image();
186        i.setName("test");
187        i = iUpdate.saveAndReturnObject(i);
188
189        // this user should not be able to change things
190        Experimenter e2 = testExperimenter();
191        iAdmin.createUser(e2, g.getName());
192
193        loginUser(e2.getOmeName());
194
195        try {
196            iAdmin.changeOwner(i, e2.getOmeName());
197            fail("secvio!");
198        } catch (SecurityViolation sv) {
199        }
200        try {
201            iAdmin.changeGroup(i, "system");
202            fail("secvio!");
203        } catch (SecurityViolation sv) {
204        }
205        try {
206            iAdmin.changePermissions(i, Permissions.EMPTY);
207            fail("secvio!");
208        } catch (SecurityViolation sv) {
209        }
210
211        // guarantee that the client-side check for ticket:293 still holds.
212        // see: TicketsUpTo500Test
213        loginUser(e1.getOmeName());
214        iAdmin.changePermissions(i, Permissions.EMPTY);
215        iAdmin.changePermissions(i, Permissions.DEFAULT);
216        loginRoot();
217        iAdmin.changePermissions(i, Permissions.EMPTY);
218        iAdmin.changePermissions(i, Permissions.DEFAULT);
219
220    }
221
222    @Test
223    public void testUserCanOnlySetDetailsToOwnGroup() throws Exception {
224        ExperimenterGroup g = testGroup();
225        iAdmin.createGroup(g);
226
227        Experimenter e1 = testExperimenter();
228        e1.setId(iAdmin.createUser(e1, g.getName()));
229
230        ExperimenterGroup g1 = new ExperimenterGroup(), g2 = new ExperimenterGroup();
231
232        g1.setName(uuid());
233        g2.setName(uuid());
234
235        g1.setId(iAdmin.createGroup(g1));
236        g2.setId(iAdmin.createGroup(g2));
237
238        login(e1.getOmeName(), g.getName(), "Test");
239
240        Image i = new Image();
241        i.setName("test");
242        i = iUpdate.saveAndReturnObject(i);
243
244        try {
245            iAdmin.changeGroup(i, g2.getName());
246            fail("secvio!");
247        } catch (SecurityViolation sv) {
248            // ok
249        }
250
251        // add the user to these groups and try again.
252        iAdmin.addGroups(e1, g1, g2);
253
254        // should now work.
255        iAdmin.changeGroup(i, g2.getName());
256
257    }
258
259    @Test(groups = "ticket:343")
260    public void testSetGroupOwner() throws Exception {
261        ExperimenterGroup g = testGroup();
262        iAdmin.createGroup(g);
263
264        Experimenter e1 = testExperimenter();
265        e1.setId(iAdmin.createUser(e1, g.getName()));
266
267        ExperimenterGroup g1 = new ExperimenterGroup();
268        g1.setName(uuid());
269        g1.setId(iAdmin.createGroup(g1));
270
271        loginRoot();
272
273        iAdmin.setGroupOwner(g1, e1);
274
275        ExperimenterGroup test = iQuery
276                .get(ExperimenterGroup.class, g1.getId());
277        assertEquals(test.getDetails().getOwner().getId(), e1.getId());
278
279    }
280
281    // ~ chgrp
282    // =========================================================================
283    @Test
284    public void testUserUsesChgrpThroughAdmin() throws Exception {
285
286        Experimenter e = loginNewUser();
287
288        // a second group
289        loginRoot();
290        ExperimenterGroup g = new ExperimenterGroup();
291        g.setName(UUID.randomUUID().toString());
292        g = iAdmin.getGroup(iAdmin.createGroup(g));
293        iAdmin.addGroups(e, g);
294        loginUser(e.getOmeName());
295
296        // create a new image
297        Image i = new Image();
298        i.setName(UUID.randomUUID().toString());
299        i = factory.getUpdateService().saveAndReturnObject(i);
300
301        // it should be in some other group
302        Long group = i.getDetails().getGroup().getId();
303        assertFalse(group.equals(g.getId()));
304
305        // now let's try to change that group
306        factory.getAdminService().changeGroup(i, g.getName());
307        Image copy = factory.getQueryService().get(Image.class, i.getId());
308        Long test = copy.getDetails().getGroup().getId();
309
310        assertFalse(test.equals(group));
311        assertTrue(test.equals(g.getId()));
312
313    }
314
315    // ~ IAdmin.setDefaultGroup
316    // =========================================================================
317    @Test
318    public void testSetDefaultGroup() throws Exception {
319        loginRoot();
320
321        // test group
322        String gid = uuid();
323        ExperimenterGroup g = new ExperimenterGroup();
324        g.setName(gid);
325        g = iAdmin.getGroup(iAdmin.createGroup(g));
326
327        // create a new user for the test
328        Experimenter e = new Experimenter();
329        e.setFirstName("user admin setters");
330        e.setLastName("test");
331        e.setOmeName(UUID.randomUUID().toString());
332        e = iAdmin.getExperimenter(iAdmin.createUser(e, gid));
333
334        // check current default group
335        ExperimenterGroup def = iAdmin.getDefaultGroup(e.getId());
336        assertEquals(def.getId(), g.getId());
337
338        // new test group
339        String gid2 = uuid();
340        ExperimenterGroup g2 = new ExperimenterGroup();
341        g2.setName(gid2);
342        g2 = iAdmin.getGroup(iAdmin.createGroup(g2));
343
344        // now change
345        iAdmin.addGroups(e, g2);
346        iAdmin.setDefaultGroup(e, g2);
347
348        // test
349        def = iAdmin.getDefaultGroup(e.getId());
350        assertEquals(def.getId(), g2.getId());
351
352    }
353
354    // ~ IAdmin.addGroups & .removeGroups
355    // =========================================================================
356    @Test
357    public void testPlusAndMinusGroups() throws Exception {
358        loginRoot();
359
360        ExperimenterGroup g = testGroup();
361        iAdmin.createGroup(g);
362
363        // create a new user for the test
364        Experimenter e = new Experimenter();
365        e.setFirstName("user admin setters");
366        e.setLastName("test");
367        e.setOmeName(UUID.randomUUID().toString());
368        e = iAdmin.getExperimenter(iAdmin.createUser(e, g.getName()));
369
370        int size = e.sizeOfGroupExperimenterMap();
371        assertTrue(String.format("%d not 2", size), size == 2);
372
373        // two new test groups
374        ExperimenterGroup g1 = new ExperimenterGroup();
375        g1.setName(UUID.randomUUID().toString());
376        g1 = iAdmin.getGroup(iAdmin.createGroup(g1));
377        ExperimenterGroup g2 = new ExperimenterGroup();
378        g2.setName(UUID.randomUUID().toString());
379        g2 = iAdmin.getGroup(iAdmin.createGroup(g2));
380
381        iAdmin.addGroups(e, g1, g2);
382
383        // test
384        e = iAdmin.lookupExperimenter(e.getOmeName());
385        assertTrue(e.linkedExperimenterGroupList().size() == 4);
386
387        iAdmin.removeGroups(e, g1);
388        e = iAdmin.lookupExperimenter(e.getOmeName());
389        assertTrue(e.linkedExperimenterGroupList().size() == 3);
390    }
391
392    // ~ IAdmin.contained*
393    // =========================================================================
394    @Test
395    public void testContainedUsersAndGroups() throws Exception {
396        loginRoot();
397
398        ExperimenterGroup g = testGroup();
399        iAdmin.createGroup(g);
400
401        // create a new user for the test
402        Experimenter e = new Experimenter();
403        e.setFirstName("user admin setters");
404        e.setLastName("test");
405        e.setOmeName(UUID.randomUUID().toString());
406        e = iAdmin.getExperimenter(iAdmin.createUser(e, g.getName()));
407
408        // two new test groups
409        ExperimenterGroup g1 = new ExperimenterGroup();
410        g1.setName(UUID.randomUUID().toString());
411        g1 = iAdmin.getGroup(iAdmin.createGroup(g1));
412        ExperimenterGroup g2 = new ExperimenterGroup();
413        g2.setName(UUID.randomUUID().toString());
414        g2 = iAdmin.getGroup(iAdmin.createGroup(g2));
415
416        // add them all together
417        iAdmin.addGroups(e, g1, g2);
418
419        // test
420        Experimenter[] es = iAdmin.containedExperimenters(g1.getId());
421        assertTrue(es.length == 1);
422        assertTrue(es[0].getId().equals(e.getId()));
423
424        ExperimenterGroup[] gs = iAdmin.containedGroups(e.getId());
425        assertTrue(gs.length == 4);
426        List<Long> ids = new ArrayList<Long>();
427        for (ExperimenterGroup group : gs) {
428            ids.add(group.getId());
429        }
430        assertTrue(ids.contains(1L));
431        assertTrue(ids.contains(g1.getId()));
432        assertTrue(ids.contains(g2.getId()));
433    }
434
435    // ~ IAdmin.lookup* & .get*
436    // =========================================================================
437    @Test
438    public void testLookupAndGet() throws Exception {
439        loginRoot();
440        // create a new user for the test
441        Experimenter e = new Experimenter();
442        e.setFirstName("user admin setters");
443        e.setLastName("test");
444        e.setOmeName(UUID.randomUUID().toString());
445        e = iAdmin.getExperimenter(iAdmin.createSystemUser(e));
446
447        loginUser(e.getOmeName());
448
449        Experimenter test_e = iAdmin.lookupExperimenter(e.getOmeName());
450        ExperimenterGroup test_g = iAdmin.getGroup(0L);
451
452        assertTrue(test_e.linkedExperimenterGroupList().size() == 2);
453        assertTrue(test_g.eachLinkedExperimenter(new IdBlock()).contains(
454                e.getId()));
455    }
456
457    @Test(groups = "ticket:910")
458    public void testLookupGroupsReturnsExperimentersWithGroupsLoaded() {
459        loginRoot();
460
461        List<ExperimenterGroup> list = iAdmin.lookupGroups();
462        ExperimenterGroup group = list.get(0);
463        Experimenter exp = group.linkedExperimenterList().get(0);
464        assertNotNull(exp.getPrimaryGroupExperimenterMap());
465    }
466
467    // ~ IAdmin.unlock
468    // =========================================================================
469
470    @Test
471    public void testUnlock() throws Exception {
472        loginRoot();
473
474        boolean[] unlocked;
475
476        Project pt, p = new Project();
477        p.setName("unlock test");
478
479        Dataset dt, d = new Dataset();
480        d.setName("unlock test");
481
482        pt = iUpdate.saveAndReturnObject(p);
483        unlocked = iAdmin.unlock(pt);
484        assertTrue(unlocked[0]);
485
486        pt.linkDataset(d);
487        pt = iUpdate.saveAndReturnObject(pt);
488        assertTrue(pt.getDetails().getPermissions().isSet(Flag.LOCKED));
489        unlocked = iAdmin.unlock(pt);
490        assertFalse(unlocked[0]);
491        iUpdate.deleteObject((IObject) pt.collectDatasetLinks(null).get(0));
492        unlocked = iAdmin.unlock(pt);
493        assertTrue(unlocked[0]);
494        pt = iQuery.get(pt.getClass(), pt.getId());
495        assertFalse(pt.getDetails().getPermissions().isSet(Flag.LOCKED));
496
497    }
498
499    // ~ Passwords
500    // =========================================================================
501
502    /**
503     * using this test to visually inspect the log output for changeUserPassword
504     * it will fail and so there should be no side-effects.
505     */
506    // SECURITY CHECKS AREN'T DONE FROM WITHIN. NEED TO HANDLE THIS!!!
507    @Test(groups = { "ticket:209", "security", "broken" })
508    public void testUnallowedPasswordChange() throws Exception {
509        loginRoot();
510
511        // and a new group
512        ExperimenterGroup g = new ExperimenterGroup();
513        g.setName(UUID.randomUUID().toString());
514        iAdmin.createGroup(g);
515
516        // create a new user for the test
517        Experimenter e = new Experimenter();
518        e.setFirstName("user admin setters");
519        e.setLastName("test");
520        e.setOmeName(UUID.randomUUID().toString());
521        iAdmin.createUser(e, g.getName());
522
523        loginUser(e.getOmeName());
524        try {
525            iAdmin.changeUserPassword("root", "THIS SHOULD NOT BE VISIBLE.");
526            fail("secvio!");
527        } catch (SecurityViolation ex) {
528            // ok.
529        }
530
531    }
532
533    // ~ Security context
534    // =========================================================================
535
536    @Test(groups = "ticket:328")
537    public void testRoles() throws Exception {
538        loginRoot();
539
540        Roles r = iAdmin.getSecurityRoles();
541        assertNotNull(r.getRootName());
542        assertNotNull(r.getSystemGroupName());
543        assertNotNull(r.getUserGroupName());
544    }
545
546    // ~ Deletion
547    // =========================================================================
548
549    public void testDeleteGroup() {
550        ExperimenterGroup g = testGroup();
551        long gid = iAdmin.createGroup(g);
552
553        Experimenter e1 = testExperimenter();
554        iAdmin.createUser(e1, g.getName());
555
556        iAdmin.deleteGroup(new ExperimenterGroup(gid, false));
557    }
558
559    public void testDeleteUser() {
560        ExperimenterGroup g = testGroup();
561        iAdmin.createGroup(g);
562
563        Experimenter e1 = testExperimenter();
564        long uid = iAdmin.createUser(e1, g.getName());
565
566        iAdmin.deleteExperimenter(new Experimenter(uid, false));
567    }
568
569    @Test(expectedExceptions = ValidationException.class)
570    public void testDeleteUserWithObject() {
571        ExperimenterGroup g = testGroup();
572        iAdmin.createGroup(g);
573
574        Experimenter e1 = testExperimenter();
575        long uid = iAdmin.createUser(e1, g.getName());
576
577        // Now make something
578        loginUser(e1.getOmeName());
579        java.sql.Timestamp testTimestamp = new java.sql.Timestamp(System.currentTimeMillis());
580        iUpdate.saveObject(new Image(testTimestamp, "name"));
581
582        loginRoot();
583        iAdmin.deleteExperimenter(new Experimenter(uid, false));
584    }
585
586    // ~ Bugs
587    // =========================================================================
588
589    public void testSetDefaultGroupCanNotUpateRows() throws Exception {
590
591        Experimenter e1 = loginNewUser();
592        Experimenter e2 = loginNewUser();
593        loginRoot();
594
595        ExperimenterGroup eg = iAdmin.getDefaultGroup(e1.getId());
596        iAdmin.addGroups(e2, eg);
597        iAdmin.setDefaultGroup(e2, eg);
598
599    }
600
601}
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/