Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-06-11 05:58:57 +0000
committerEike Stepper2012-06-11 05:58:57 +0000
commit4e5317b65d21a08dd2a3f0c7cfabf2484ec35f68 (patch)
tree4900fcd362e37c4bb6437b4da708c0d796c25acd /plugins
parentf1db8cd1815ae61d194044ddad8d6ae0fea15cdc (diff)
downloadcdo-4e5317b65d21a08dd2a3f0c7cfabf2484ec35f68.tar.gz
cdo-4e5317b65d21a08dd2a3f0c7cfabf2484ec35f68.tar.xz
cdo-4e5317b65d21a08dd2a3f0c7cfabf2484ec35f68.zip
[380629] Design a default Security model
https://bugs.eclipse.org/bugs/show_bug.cgi?id=380629
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java885
1 files changed, 443 insertions, 442 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
index 4808b72a83..09fe57e803 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java
@@ -1,442 +1,443 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.tests;
-
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.server.IRepository;
-import org.eclipse.emf.cdo.server.ISession;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
-import org.eclipse.emf.cdo.spi.server.ISessionProtocol;
-import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
-import org.eclipse.emf.cdo.tests.config.impl.SessionConfig;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CommitException;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.net4j.signal.ISignalProtocol;
-import org.eclipse.net4j.signal.RemoteException;
-import org.eclipse.net4j.signal.SignalProtocol.TimeoutChangedEvent;
-import org.eclipse.net4j.util.WrappedException;
-import org.eclipse.net4j.util.container.ContainerEventAdapter;
-import org.eclipse.net4j.util.container.IContainer;
-import org.eclipse.net4j.util.event.IEvent;
-import org.eclipse.net4j.util.event.IListener;
-import org.eclipse.net4j.util.om.OMPlatform;
-import org.eclipse.net4j.util.om.log.OMLogHandler;
-import org.eclipse.net4j.util.om.log.OMLogger;
-import org.eclipse.net4j.util.om.log.OMLogger.Level;
-import org.eclipse.net4j.util.security.PasswordCredentials;
-import org.eclipse.net4j.util.security.PasswordCredentialsProvider;
-import org.eclipse.net4j.util.security.UserManager;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.util.EContentAdapter;
-import org.eclipse.emf.spi.cdo.InternalCDOSession;
-
-import java.util.concurrent.CountDownLatch;
-
-/**
- * @author Eike Stepper
- */
-public class SessionTest extends AbstractCDOTest
-{
- private static final String USER_ID = "stepper"; //$NON-NLS-1$
-
- private static final char[] PASSWORD1 = "eike2007".toCharArray(); //$NON-NLS-1$
-
- private static final char[] PASSWORD2 = "invalid".toCharArray(); //$NON-NLS-1$
-
- public void testIsSupportingAudits() throws Exception
- {
- CDOSession session = openSession();
- boolean serverAudits = getRepository().isSupportingAudits();
- boolean clientAudits = session.getRepositoryInfo().isSupportingAudits();
- assertEquals(serverAudits, clientAudits);
- session.close();
- }
-
- public void testRefresh() throws CommitException
- {
- CDOSession session1 = openSession();
- session1.options().setPassiveUpdateEnabled(false);
- CDOTransaction transaction = session1.openTransaction();
- CDOResource resource1 = transaction.createResource(getResourcePath("ttt"));
- resource1.getContents().add(getModel1Factory().createCategory());
- transaction.commit();
-
- CDOSession session2 = openSession();
- session2.options().setPassiveUpdateEnabled(false);
- CDOView view = session2.openView();
- CDOResource resource2 = view.getResource(getResourcePath("ttt"));
- assertEquals(1, resource2.getContents().size());
-
- resource1.getContents().add(getModel1Factory().createCategory());
- transaction.commit();
- dump(session1);
-
- dump(session2);
- assertEquals(1, resource2.getContents().size());
-
- session2.refresh();
- dump(session2);
- assertEquals(2, resource2.getContents().size());
- }
-
- public void testRefreshWithPackages() throws CommitException
- {
- CDOSession session1 = openSession();
- session1.options().setPassiveUpdateEnabled(false);
- CDOTransaction transaction = session1.openTransaction();
- CDOResource resource1 = transaction.createResource(getResourcePath("ttt"));
- transaction.commit();
-
- CDOSession session2 = openSession();
- session2.options().setPassiveUpdateEnabled(false);
- CDOView view = session2.openView();
- CDOResource resource2 = view.getResource(getResourcePath("ttt"));
- assertEquals(0, resource2.getContents().size());
-
- resource1.getContents().add(getModel1Factory().createCategory());
- transaction.commit();
- dump(session1);
-
- dump(session2);
- assertEquals(0, resource2.getContents().size());
-
- session2.refresh();
- dump(session2);
- assertEquals(1, resource2.getContents().size());
- }
-
- private void dump(CDOSession session)
- {
- InternalCDORevisionCache cache = ((InternalCDOSession)session).getRevisionManager().getCache();
- CDORevisionUtil.dumpAllRevisions(cache.getAllRevisions(), System.out);
- }
-
- public void testEContentAdapter() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("ttt"));
- resource.getContents().add(getModel1Factory().createCompany());
- transaction.commit();
-
- transaction.getResourceSet().eAdapters().add(new EContentAdapter()
- {
- @Override
- public void notifyChanged(Notification notification)
- {
- super.notifyChanged(notification);
- System.out.println(notification);
- }
- });
-
- OMLogHandler logHandler = new OMLogHandler()
- {
- public void logged(OMLogger logger, Level level, String msg, Throwable t)
- {
- fail("Detaching the resource set adapter should not log inactive transaction exception");
- }
- };
-
- try
- {
- OMPlatform.INSTANCE.addLogHandler(logHandler);
- session.close();
- }
- finally
- {
- OMPlatform.INSTANCE.removeLogHandler(logHandler);
- }
- }
-
- public void testLastUpdateLocal() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- transaction.createResource(getResourcePath("ttt"));
- long commitTime = transaction.commit().getTimeStamp();
-
- waitForUpdate(commitTime, session);
- session.close();
- }
-
- public void testLastUpdateRemote() throws Exception
- {
- CDOSession session1 = openSession();
- final CDOTransaction transaction = session1.openTransaction();
- transaction.createResource(getResourcePath("ttt"));
- long commitTime1 = transaction.commit().getTimeStamp();
-
- final CDOSession session2 = openSession();
- waitForUpdate(commitTime1, session2);
-
- transaction.createResource(getResourcePath("xxx"));
- long commitTime2 = transaction.commit().getTimeStamp();
- waitForUpdate(commitTime2, session2);
-
- session1.close();
- session2.close();
- }
-
- private void waitForUpdate(final long commitTime, final CDOSession session) throws InterruptedException
- {
- new PollingTimeOuter()
- {
- @Override
- protected boolean successful()
- {
- return commitTime >= session.getLastUpdateTime();
- }
- }.assertNoTimeOut();
- }
-
- public void testWaitForUpdateLocal() throws Exception
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- transaction.createResource(getResourcePath("ttt"));
- long commitTime = transaction.commit().getTimeStamp();
-
- assertEquals(true, session.waitForUpdate(commitTime, DEFAULT_TIMEOUT));
- session.close();
- }
-
- public void testWaitForUpdateRemote() throws Exception
- {
- final CDOTransaction transaction = openSession().openTransaction();
- transaction.createResource(getResourcePath("ttt"));
-
- final CountDownLatch startLatch = new CountDownLatch(1);
- final CountDownLatch stopLatch = new CountDownLatch(1);
- final long[] commitTime = { 0 };
- new Thread()
- {
- @Override
- public void run()
- {
- try
- {
- startLatch.await();
-
- msg("Committing NOW!");
- commitTime[0] = transaction.commit().getTimeStamp();
-
- stopLatch.countDown();
- }
- catch (Exception ex)
- {
- throw WrappedException.wrap(ex);
- }
- }
- }.start();
-
- CDOSession session2 = openSession();
-
- startLatch.countDown();
- stopLatch.await();
- assertEquals(true, session2.waitForUpdate(commitTime[0], DEFAULT_TIMEOUT));
-
- transaction.getSession().close();
- session2.close();
- }
-
- public void testNoAuthentication() throws Exception
- {
- IRepository repository = getRepository("authrepo1");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
- new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD1)));
-
- CDOSession session = openSession("authrepo1");
- assertEquals(null, session.getUserID());
- assertEquals(null, repository.getSessionManager().getSessions()[0].getUserID());
- session.close();
- }
-
- @CleanRepositoriesBefore
- public void testWithAuthentication() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- IRepository repository = getRepository("authrepo2");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
- new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD1)));
-
- CDOSession session = openSession("authrepo2");
- assertEquals(USER_ID, session.getUserID());
- assertEquals(USER_ID, repository.getSessionManager().getSessions()[0].getUserID());
- session.close();
- }
-
- public void testWithAuthenticationNoCredentialsProvider() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- getRepository("authrepo3");
-
- try
- {
- openSession("authrepo3");
- fail("RemoteException expected");
- }
- catch (RemoteException success)
- {
- assertEquals(SecurityException.class, success.getCause().getClass());
- }
- }
-
- public void testWithAuthenticationNoCredentials() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- getRepository("authrepo4");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER, new PasswordCredentialsProvider(null));
-
- try
- {
- openSession("authrepo4");
- fail("RemoteException expected");
- }
- catch (RemoteException success)
- {
- assertEquals(SecurityException.class, success.getCause().getClass());
- }
- }
-
- public void testWithAuthenticationWrongCredentials() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- getRepository("authrepo5");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
- new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD2)));
-
- try
- {
- openSession("authrepo5");
- fail("RemoteException expected");
- }
- catch (RemoteException success)
- {
- assertEquals(SecurityException.class, success.getCause().getClass());
- }
- }
-
- public void testWithAuthenticationNoUserID() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- getRepository("authrepo6");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
- new PasswordCredentialsProvider(new PasswordCredentials(null, PASSWORD2)));
-
- try
- {
- openSession("authrepo6");
- fail("RemoteException expected");
- }
- catch (RemoteException success)
- {
- assertEquals(SecurityException.class, success.getCause().getClass());
- }
- }
-
- public void testWithAuthenticationNoPassword() throws Exception
- {
- UserManager userManager = new UserManager();
- userManager.activate();
- userManager.addUser(USER_ID, PASSWORD1);
-
- getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
- getRepository("authrepo7");
-
- getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
- new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, null)));
-
- try
- {
- openSession("authrepo7");
- fail("RemoteException expected");
- }
- catch (RemoteException success)
- {
- assertEquals(SecurityException.class, success.getCause().getClass());
- }
- }
-
- public void testProtocolTimeoutChangedEvent() throws Exception
- {
- final boolean[] eventSent = { false };
-
- org.eclipse.emf.cdo.net4j.CDONet4jSession session = (org.eclipse.emf.cdo.net4j.CDONet4jSession)openSession();
- session.options().getNet4jProtocol().addListener(new IListener()
- {
- public void notifyEvent(IEvent event)
- {
- if (event instanceof TimeoutChangedEvent)
- {
- TimeoutChangedEvent e = (TimeoutChangedEvent)event;
- System.out.println(e);
- eventSent[0] = true;
- }
- }
- });
-
- session.options().getNet4jProtocol().setTimeout(20L * 1000L);
- assertEquals(true, eventSent[0]);
- }
-
- public void testSetProtocolTimeout() throws Exception
- {
- IRepository repository = getRepository();
- repository.getSessionManager().addListener(new ContainerEventAdapter<ISession>()
- {
- @Override
- protected void onAdded(IContainer<ISession> container, ISession session)
- {
- ISessionProtocol protocol = session.getProtocol();
- if (protocol instanceof ISignalProtocol)
- {
- ISignalProtocol<?> signalProtocol = (ISignalProtocol<?>)protocol;
- signalProtocol.setTimeout(30L * 1000L);
- }
- }
- });
-
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- transaction.createResource(getResourcePath("ttt"));
- transaction.commit();
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.tests;
+
+import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
+import org.eclipse.emf.cdo.common.util.NotAuthenticatedException;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.server.IRepository;
+import org.eclipse.emf.cdo.server.ISession;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
+import org.eclipse.emf.cdo.spi.server.ISessionProtocol;
+import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
+import org.eclipse.emf.cdo.tests.config.impl.SessionConfig;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.signal.ISignalProtocol;
+import org.eclipse.net4j.signal.RemoteException;
+import org.eclipse.net4j.signal.SignalProtocol.TimeoutChangedEvent;
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.container.ContainerEventAdapter;
+import org.eclipse.net4j.util.container.IContainer;
+import org.eclipse.net4j.util.event.IEvent;
+import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.om.OMPlatform;
+import org.eclipse.net4j.util.om.log.OMLogHandler;
+import org.eclipse.net4j.util.om.log.OMLogger;
+import org.eclipse.net4j.util.om.log.OMLogger.Level;
+import org.eclipse.net4j.util.security.PasswordCredentials;
+import org.eclipse.net4j.util.security.PasswordCredentialsProvider;
+import org.eclipse.net4j.util.security.UserManager;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.spi.cdo.InternalCDOSession;
+
+import java.util.concurrent.CountDownLatch;
+
+/**
+ * @author Eike Stepper
+ */
+public class SessionTest extends AbstractCDOTest
+{
+ private static final String USER_ID = "stepper"; //$NON-NLS-1$
+
+ private static final char[] PASSWORD1 = "eike2007".toCharArray(); //$NON-NLS-1$
+
+ private static final char[] PASSWORD2 = "invalid".toCharArray(); //$NON-NLS-1$
+
+ public void testIsSupportingAudits() throws Exception
+ {
+ CDOSession session = openSession();
+ boolean serverAudits = getRepository().isSupportingAudits();
+ boolean clientAudits = session.getRepositoryInfo().isSupportingAudits();
+ assertEquals(serverAudits, clientAudits);
+ session.close();
+ }
+
+ public void testRefresh() throws CommitException
+ {
+ CDOSession session1 = openSession();
+ session1.options().setPassiveUpdateEnabled(false);
+ CDOTransaction transaction = session1.openTransaction();
+ CDOResource resource1 = transaction.createResource(getResourcePath("ttt"));
+ resource1.getContents().add(getModel1Factory().createCategory());
+ transaction.commit();
+
+ CDOSession session2 = openSession();
+ session2.options().setPassiveUpdateEnabled(false);
+ CDOView view = session2.openView();
+ CDOResource resource2 = view.getResource(getResourcePath("ttt"));
+ assertEquals(1, resource2.getContents().size());
+
+ resource1.getContents().add(getModel1Factory().createCategory());
+ transaction.commit();
+ dump(session1);
+
+ dump(session2);
+ assertEquals(1, resource2.getContents().size());
+
+ session2.refresh();
+ dump(session2);
+ assertEquals(2, resource2.getContents().size());
+ }
+
+ public void testRefreshWithPackages() throws CommitException
+ {
+ CDOSession session1 = openSession();
+ session1.options().setPassiveUpdateEnabled(false);
+ CDOTransaction transaction = session1.openTransaction();
+ CDOResource resource1 = transaction.createResource(getResourcePath("ttt"));
+ transaction.commit();
+
+ CDOSession session2 = openSession();
+ session2.options().setPassiveUpdateEnabled(false);
+ CDOView view = session2.openView();
+ CDOResource resource2 = view.getResource(getResourcePath("ttt"));
+ assertEquals(0, resource2.getContents().size());
+
+ resource1.getContents().add(getModel1Factory().createCategory());
+ transaction.commit();
+ dump(session1);
+
+ dump(session2);
+ assertEquals(0, resource2.getContents().size());
+
+ session2.refresh();
+ dump(session2);
+ assertEquals(1, resource2.getContents().size());
+ }
+
+ private void dump(CDOSession session)
+ {
+ InternalCDORevisionCache cache = ((InternalCDOSession)session).getRevisionManager().getCache();
+ CDORevisionUtil.dumpAllRevisions(cache.getAllRevisions(), System.out);
+ }
+
+ public void testEContentAdapter() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource(getResourcePath("ttt"));
+ resource.getContents().add(getModel1Factory().createCompany());
+ transaction.commit();
+
+ transaction.getResourceSet().eAdapters().add(new EContentAdapter()
+ {
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ super.notifyChanged(notification);
+ System.out.println(notification);
+ }
+ });
+
+ OMLogHandler logHandler = new OMLogHandler()
+ {
+ public void logged(OMLogger logger, Level level, String msg, Throwable t)
+ {
+ fail("Detaching the resource set adapter should not log inactive transaction exception");
+ }
+ };
+
+ try
+ {
+ OMPlatform.INSTANCE.addLogHandler(logHandler);
+ session.close();
+ }
+ finally
+ {
+ OMPlatform.INSTANCE.removeLogHandler(logHandler);
+ }
+ }
+
+ public void testLastUpdateLocal() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ transaction.createResource(getResourcePath("ttt"));
+ long commitTime = transaction.commit().getTimeStamp();
+
+ waitForUpdate(commitTime, session);
+ session.close();
+ }
+
+ public void testLastUpdateRemote() throws Exception
+ {
+ CDOSession session1 = openSession();
+ final CDOTransaction transaction = session1.openTransaction();
+ transaction.createResource(getResourcePath("ttt"));
+ long commitTime1 = transaction.commit().getTimeStamp();
+
+ final CDOSession session2 = openSession();
+ waitForUpdate(commitTime1, session2);
+
+ transaction.createResource(getResourcePath("xxx"));
+ long commitTime2 = transaction.commit().getTimeStamp();
+ waitForUpdate(commitTime2, session2);
+
+ session1.close();
+ session2.close();
+ }
+
+ private void waitForUpdate(final long commitTime, final CDOSession session) throws InterruptedException
+ {
+ new PollingTimeOuter()
+ {
+ @Override
+ protected boolean successful()
+ {
+ return commitTime >= session.getLastUpdateTime();
+ }
+ }.assertNoTimeOut();
+ }
+
+ public void testWaitForUpdateLocal() throws Exception
+ {
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ transaction.createResource(getResourcePath("ttt"));
+ long commitTime = transaction.commit().getTimeStamp();
+
+ assertEquals(true, session.waitForUpdate(commitTime, DEFAULT_TIMEOUT));
+ session.close();
+ }
+
+ public void testWaitForUpdateRemote() throws Exception
+ {
+ final CDOTransaction transaction = openSession().openTransaction();
+ transaction.createResource(getResourcePath("ttt"));
+
+ final CountDownLatch startLatch = new CountDownLatch(1);
+ final CountDownLatch stopLatch = new CountDownLatch(1);
+ final long[] commitTime = { 0 };
+ new Thread()
+ {
+ @Override
+ public void run()
+ {
+ try
+ {
+ startLatch.await();
+
+ msg("Committing NOW!");
+ commitTime[0] = transaction.commit().getTimeStamp();
+
+ stopLatch.countDown();
+ }
+ catch (Exception ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+ }.start();
+
+ CDOSession session2 = openSession();
+
+ startLatch.countDown();
+ stopLatch.await();
+ assertEquals(true, session2.waitForUpdate(commitTime[0], DEFAULT_TIMEOUT));
+
+ transaction.getSession().close();
+ session2.close();
+ }
+
+ public void testNoAuthentication() throws Exception
+ {
+ IRepository repository = getRepository("authrepo1");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
+ new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD1)));
+
+ CDOSession session = openSession("authrepo1");
+ assertEquals(null, session.getUserID());
+ assertEquals(null, repository.getSessionManager().getSessions()[0].getUserID());
+ session.close();
+ }
+
+ @CleanRepositoriesBefore
+ public void testWithAuthentication() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ IRepository repository = getRepository("authrepo2");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
+ new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD1)));
+
+ CDOSession session = openSession("authrepo2");
+ assertEquals(USER_ID, session.getUserID());
+ assertEquals(USER_ID, repository.getSessionManager().getSessions()[0].getUserID());
+ session.close();
+ }
+
+ public void testWithAuthenticationNoCredentialsProvider() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ getRepository("authrepo3");
+
+ try
+ {
+ openSession("authrepo3");
+ fail("RemoteException expected");
+ }
+ catch (RemoteException success)
+ {
+ assertEquals(SecurityException.class, success.getCause().getClass());
+ }
+ }
+
+ public void testWithAuthenticationNoCredentials() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ getRepository("authrepo4");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER, new PasswordCredentialsProvider(null));
+
+ try
+ {
+ openSession("authrepo4");
+ fail("NotAuthenticatedException expected");
+ }
+ catch (NotAuthenticatedException success)
+ {
+ // Success
+ }
+ }
+
+ public void testWithAuthenticationWrongCredentials() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ getRepository("authrepo5");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
+ new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, PASSWORD2)));
+
+ try
+ {
+ openSession("authrepo5");
+ fail("RemoteException expected");
+ }
+ catch (RemoteException success)
+ {
+ assertEquals(SecurityException.class, success.getCause().getClass());
+ }
+ }
+
+ public void testWithAuthenticationNoUserID() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ getRepository("authrepo6");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
+ new PasswordCredentialsProvider(new PasswordCredentials(null, PASSWORD2)));
+
+ try
+ {
+ openSession("authrepo6");
+ fail("RemoteException expected");
+ }
+ catch (RemoteException success)
+ {
+ assertEquals(SecurityException.class, success.getCause().getClass());
+ }
+ }
+
+ public void testWithAuthenticationNoPassword() throws Exception
+ {
+ UserManager userManager = new UserManager();
+ userManager.activate();
+ userManager.addUser(USER_ID, PASSWORD1);
+
+ getTestProperties().put(RepositoryConfig.PROP_TEST_USER_MANAGER, userManager);
+ getRepository("authrepo7");
+
+ getTestProperties().put(SessionConfig.PROP_TEST_CREDENTIALS_PROVIDER,
+ new PasswordCredentialsProvider(new PasswordCredentials(USER_ID, null)));
+
+ try
+ {
+ openSession("authrepo7");
+ fail("RemoteException expected");
+ }
+ catch (RemoteException success)
+ {
+ assertEquals(SecurityException.class, success.getCause().getClass());
+ }
+ }
+
+ public void testProtocolTimeoutChangedEvent() throws Exception
+ {
+ final boolean[] eventSent = { false };
+
+ org.eclipse.emf.cdo.net4j.CDONet4jSession session = (org.eclipse.emf.cdo.net4j.CDONet4jSession)openSession();
+ session.options().getNet4jProtocol().addListener(new IListener()
+ {
+ public void notifyEvent(IEvent event)
+ {
+ if (event instanceof TimeoutChangedEvent)
+ {
+ TimeoutChangedEvent e = (TimeoutChangedEvent)event;
+ System.out.println(e);
+ eventSent[0] = true;
+ }
+ }
+ });
+
+ session.options().getNet4jProtocol().setTimeout(20L * 1000L);
+ assertEquals(true, eventSent[0]);
+ }
+
+ public void testSetProtocolTimeout() throws Exception
+ {
+ IRepository repository = getRepository();
+ repository.getSessionManager().addListener(new ContainerEventAdapter<ISession>()
+ {
+ @Override
+ protected void onAdded(IContainer<ISession> container, ISession session)
+ {
+ ISessionProtocol protocol = session.getProtocol();
+ if (protocol instanceof ISignalProtocol)
+ {
+ ISignalProtocol<?> signalProtocol = (ISignalProtocol<?>)protocol;
+ signalProtocol.setTimeout(30L * 1000L);
+ }
+ }
+ });
+
+ CDOSession session = openSession();
+ CDOTransaction transaction = session.openTransaction();
+ transaction.createResource(getResourcePath("ttt"));
+ transaction.commit();
+ }
+}

Back to the top