package org.springmodules.jcr; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.jcr.NamespaceRegistry; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Workspace; import javax.jcr.observation.ObservationManager; import junit.framework.TestCase; import org.easymock.MockControl; import org.springmodules.jcr.support.ListSessionHolderProviderManager; public class JcrSessionFactoryTests extends TestCase { private JcrSessionFactory factory; private MockControl repoCtrl; private Repository repo; protected void setUp() throws Exception { super.setUp(); repoCtrl = MockControl.createControl(Repository.class); repo = (Repository) repoCtrl.getMock(); factory = new JcrSessionFactory(); factory.setRepository(repo); } protected void tearDown() throws Exception { super.tearDown(); try { repoCtrl.verify(); } catch (IllegalStateException ex) { // ignore: test method didn't call replay } repoCtrl = null; repo = null; factory = null; } /* * Test method for 'org.springmodules.jcr.JcrSessionFactory.getSession()' */ public void testGetSession() { try { repoCtrl.expectAndReturn(repo.login(null, null), null); factory.getSession(); } catch (RepositoryException e) { e.printStackTrace(); } } /* * Test method for * 'org.springmodules.jcr.JcrSessionFactory.afterPropertiesSet' */ public void testAfterPropertiesSet() throws Exception { try { factory.setRepository(null); factory.afterPropertiesSet(); fail("expected exception (session factory badly initialized"); } catch (IllegalArgumentException e) { } } public void testConstructor() { factory = new JcrSessionFactory(repo, "ws", null); assertEquals(repo, factory.getRepository()); assertEquals("ws", factory.getWorkspaceName()); assertNull(factory.getCredentials()); factory.setWorkspaceName("ws"); assertEquals(factory.getWorkspaceName(), "ws"); } public void testEquals() { assertEquals(factory.hashCode(), repo.hashCode() + 17 * 37); assertFalse(factory.equals(null)); assertEquals(factory, factory); MockControl repoCtrl2; Repository repo2; repoCtrl2 = MockControl.createNiceControl(Repository.class); repo2 = (Repository) repoCtrl2.getMock(); repoCtrl2.replay(); repoCtrl.replay(); JcrSessionFactory fact2 = new JcrSessionFactory(); fact2.setRepository(repo2); assertFalse(factory.equals(fact2)); } public void testAddListeners() throws RepositoryException { EventListenerDefinition def1 = new EventListenerDefinition(); EventListenerDefinition def2 = new EventListenerDefinition(); EventListenerDefinition listeners[] = new EventListenerDefinition[] { def1, def2 }; factory.setEventListeners(listeners); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); MockControl wsCtrl = MockControl.createControl(Workspace.class); Workspace ws = (Workspace) wsCtrl.getMock(); MockControl omCtrl = MockControl.createControl(ObservationManager.class); ObservationManager oManager = (ObservationManager) omCtrl.getMock(); repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getObservationManager(), oManager); oManager.addEventListener(def1.getListener(), def1.getEventTypes(), def1.getAbsPath(), def1.isDeep(), def1 .getUuid(), def1.getNodeTypeName(), def1.isNoLocal()); oManager.addEventListener(def2.getListener(), def2.getEventTypes(), def2.getAbsPath(), def2.isDeep(), def2 .getUuid(), def2.getNodeTypeName(), def2.isNoLocal()); repoCtrl.replay(); sessionCtrl.replay(); wsCtrl.replay(); omCtrl.replay(); // coverage madness assertSame(listeners, factory.getEventListeners()); Session sess = factory.getSession(); assertSame(session, sess); repoCtrl.verify(); sessionCtrl.verify(); wsCtrl.verify(); omCtrl.verify(); } public void testRegisterNamespaces() throws Exception { Properties namespaces = new Properties(); namespaces.put("foo", "bar"); namespaces.put("hocus", "pocus"); factory.setNamespaces(namespaces); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); MockControl wsCtrl = MockControl.createControl(Workspace.class); Workspace ws = (Workspace) wsCtrl.getMock(); MockControl nrCtrl = MockControl.createControl(NamespaceRegistry.class); NamespaceRegistry registry = (NamespaceRegistry) nrCtrl.getMock(); // afterPropertiesSet repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getNamespaceRegistry(), registry); nrCtrl.expectAndReturn(registry.getPrefixes(), new String[0]); // destroy registry.registerNamespace("foo", "bar"); registry.registerNamespace("hocus", "pocus"); nrCtrl.replay(); wsCtrl.replay(); sessionCtrl.replay(); repoCtrl.replay(); factory.afterPropertiesSet(); factory.destroy(); nrCtrl.verify(); wsCtrl.verify(); sessionCtrl.verify(); } public void testForceRegistryNamespace() throws Exception { String foo = "foo"; Properties namespaces = new Properties(); namespaces.put(foo, "bar"); namespaces.put("hocus", "pocus"); factory.setNamespaces(namespaces); factory.setForceNamespacesRegistration(true); factory.setSkipExistingNamespaces(false); factory.setKeepNewNamespaces(false); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); MockControl wsCtrl = MockControl.createControl(Workspace.class); Workspace ws = (Workspace) wsCtrl.getMock(); MockControl nrCtrl = MockControl.createControl(NamespaceRegistry.class); NamespaceRegistry registry = (NamespaceRegistry) nrCtrl.getMock(); // afterPropertiesSet repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getNamespaceRegistry(), registry); // destroy repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getNamespaceRegistry(), registry); // registry record String[] prefixes = new String[] { foo }; String oldURI = "old bar"; nrCtrl.expectAndReturn(registry.getPrefixes(), prefixes); nrCtrl.expectAndReturn(registry.getURI(foo), oldURI); registry.unregisterNamespace(foo); registry.registerNamespace(foo, "bar"); registry.registerNamespace("hocus", "pocus"); registry.unregisterNamespace("foo"); registry.unregisterNamespace("hocus"); registry.registerNamespace(foo, oldURI); nrCtrl.replay(); wsCtrl.replay(); sessionCtrl.replay(); repoCtrl.replay(); factory.afterPropertiesSet(); factory.destroy(); nrCtrl.verify(); wsCtrl.verify(); sessionCtrl.verify(); } public void testKeepRegistryNamespace() throws Exception { Properties namespaces = new Properties(); namespaces.put("foo", "bar"); namespaces.put("hocus", "pocus"); factory.setNamespaces(namespaces); factory.setKeepNewNamespaces(true); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); MockControl wsCtrl = MockControl.createControl(Workspace.class); Workspace ws = (Workspace) wsCtrl.getMock(); MockControl nrCtrl = MockControl.createControl(NamespaceRegistry.class); NamespaceRegistry registry = (NamespaceRegistry) nrCtrl.getMock(); // afterPropertiesSet repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getNamespaceRegistry(), registry); nrCtrl.expectAndReturn(registry.getPrefixes(), new String[0]); registry.registerNamespace("foo", "bar"); registry.registerNamespace("hocus", "pocus"); nrCtrl.replay(); wsCtrl.replay(); sessionCtrl.replay(); repoCtrl.replay(); factory.afterPropertiesSet(); factory.destroy(); nrCtrl.verify(); wsCtrl.verify(); sessionCtrl.verify(); } public void testSkipRegisteredNamespaces() throws Exception { Properties namespaces = new Properties(); namespaces.put("foo", "bar"); namespaces.put("hocus", "pocus"); factory.setNamespaces(namespaces); factory.setSkipExistingNamespaces(false); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); MockControl wsCtrl = MockControl.createControl(Workspace.class); Workspace ws = (Workspace) wsCtrl.getMock(); MockControl nrCtrl = MockControl.createControl(NamespaceRegistry.class); NamespaceRegistry registry = (NamespaceRegistry) nrCtrl.getMock(); // afterPropertiesSet repoCtrl.expectAndReturn(repo.login(null, null), session); sessionCtrl.expectAndReturn(session.getWorkspace(), ws); wsCtrl.expectAndReturn(ws.getNamespaceRegistry(), registry); registry.registerNamespace("foo", "bar"); registry.registerNamespace("hocus", "pocus"); nrCtrl.expectAndReturn(registry.getPrefixes(), new String[0]); nrCtrl.replay(); wsCtrl.replay(); sessionCtrl.replay(); repoCtrl.replay(); factory.afterPropertiesSet(); factory.destroy(); nrCtrl.verify(); wsCtrl.verify(); sessionCtrl.verify(); } public void testDefaultSesionHolder() throws Exception { factory.afterPropertiesSet(); Session session = factory.getSession(); SessionHolder holder = factory.getSessionHolder(session); assertSame(SessionHolder.class, holder.getClass()); // default session holder provider assertSame(SessionHolder.class, factory.getSessionHolder(null).getClass()); } public void testSessionHolder() throws Exception { final String REPO_NAME = "hocus_pocus"; repoCtrl.expectAndReturn(repo.getDescriptor(Repository.REP_NAME_DESC), REPO_NAME); MockControl sessionCtrl = MockControl.createControl(Session.class); Session session = (Session) sessionCtrl.getMock(); repoCtrl.expectAndReturn(repo.login(null, null), session); repoCtrl.replay(); sessionCtrl.replay(); List providers = new ArrayList(); providers.add(new SessionHolderProvider() { /** * @see org.springmodules.jcr.SessionHolderProvider#acceptsRepository(java.lang.String) */ public boolean acceptsRepository(String repositoryName) { return REPO_NAME.equals(repositoryName); } /** * @see org.springmodules.jcr.SessionHolderProvider#createSessionHolder(javax.jcr.Session) */ public SessionHolder createSessionHolder(Session session) { return new CustomSessionHolder(session); } }); ListSessionHolderProviderManager providerManager = new ListSessionHolderProviderManager(); providerManager.setProviders(providers); factory.setSessionHolderProviderManager(providerManager); factory.afterPropertiesSet(); Session sess = factory.getSession(); assertSame(session, sess); assertSame(CustomSessionHolder.class, factory.getSessionHolder(sess).getClass()); repoCtrl.verify(); sessionCtrl.verify(); } /** * Used for testing. * * @author Costin Leau * */ private class CustomSessionHolder extends SessionHolder { /** * @param session */ public CustomSessionHolder(Session session) { super(session); } } }