/* * $Id$ * * Copyright 2007-2014 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.itests.sec; import java.util.HashSet; import java.util.List; import java.util.Set; import ome.api.IAdmin; import ome.api.IQuery; import ome.api.ISession; import ome.model.meta.Experimenter; import ome.model.meta.ExperimenterGroup; import ome.model.meta.Session; import ome.parameters.Parameters; import ome.server.itests.AbstractManagedContextTest; import ome.server.itests.LoginInterceptor; import ome.system.EventContext; import ome.system.Principal; import ome.system.ServiceFactory; import org.testng.annotations.Test; /** * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta2 */ public class SessionTest extends AbstractManagedContextTest { @Test public void testSimpleCreate() throws Exception { loginRoot(); final Experimenter e = loginNewUser(); final IAdmin a = iAdmin; final ServiceFactory f = factory; final LoginInterceptor aop = loginAop; final boolean[] success = new boolean[1]; Thread t = new Thread() { @Override public void run() { ISession service = f.getServiceByClass(ISession.class); Session s = service.createSession(new Principal(e.getOmeName(), "user", "Test"), "ome"); aop.p = new Principal(s.getUuid(), "user", "Test"); // Now we should be able to do something. EventContext ec = a.getEventContext(); AbstractManagedContextTest.assertEquals( ec.getCurrentUserName(), e.getOmeName()); service.closeSession(s); success[0] = true; } }; t.start(); t.join(); assertTrue(success[0]); } @Test public void testCreationByRoot() throws Exception { Experimenter e = loginNewUser(); loginRoot(); ISession service = this.factory.getSessionService(); Principal p = new Principal(e.getOmeName(), "user", "Test"); Session s = service.createSessionWithTimeout(p, 10 * 1000L); } @Test(groups = "ticket:1229") public void testUpdateDefaultGroup() throws Exception { ISession s = this.factory.getSessionService(); IAdmin a = this.factory.getAdminService(); Experimenter e = loginNewUser(); ExperimenterGroup g = new ExperimenterGroup(uuid(), false); g = new ExperimenterGroup(a.createGroup(g), false); loginRoot(); a.addGroups(e, g); loginUser(e.getOmeName()); String uuid = a.getEventContext().getCurrentSessionUuid(); sessionManager.setSecurityContext(new Principal(uuid), g); } /** * This test original used ISession.updateSession() which is where the bug * was. With setSecurityContext() this shouldn't be the case, but leaving * test for the moment. */ @Test(groups = "ticket:1385") public void testUpdateDefaultGroupTwice() throws Exception { ISession s = this.factory.getSessionService(); IAdmin a = this.factory.getAdminService(); Experimenter e = loginNewUser(); ExperimenterGroup g1 = new ExperimenterGroup(uuid(), false); g1 = new ExperimenterGroup(a.createGroup(g1), false); ExperimenterGroup g2 = new ExperimenterGroup(uuid(), false); g2 = new ExperimenterGroup(a.createGroup(g2), false); loginRoot(); a.addGroups(e, g1, g2); loginUser(e.getOmeName()); String uuid = a.getEventContext().getCurrentSessionUuid(); Principal principal = new Principal(uuid); sessionManager.setSecurityContext(principal, g1); sessionManager.setSecurityContext(principal, g2); // But now if we try to get the session again, boom. s.getSession(uuid); } @Test(groups = "session-uuid") public void testQuerySession() throws Exception { final IAdmin a = this.factory.getAdminService(); final IQuery q = this.factory.getQueryService(); loginNewUser(); final String uuid = a.getEventContext().getCurrentSessionUuid(); loginNewUser(); final List<Object[]> rv = q.projection( "select uuid from Session order by id desc", new Parameters().page(0, 100)); final Set<String> uuids = new HashSet<String>(); for (Object[] item : rv) { uuids.add(item[0].toString()); } assertFalse(uuids.contains(uuid)); } @Test(groups = "session-uuid") public void testSessionContext() throws Exception { final ISession s = this.factory.getSessionService(); loginNewUser(); assertNull(s.getMyOpenSessions().get(0).getDetails().contextAt(0)); } }