Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java243
1 files changed, 243 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
new file mode 100644
index 0000000000..53fa8774b1
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java
@@ -0,0 +1,243 @@
+/***************************************************************************
+ * Copyright (c) 2004-2007 Eike Stepper, Germany.
+ * 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.CDOObject;
+import org.eclipse.emf.cdo.CDOSession;
+import org.eclipse.emf.cdo.CDOState;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.internal.server.ContainerRepositoryProvider;
+import org.eclipse.emf.cdo.internal.server.Repository;
+import org.eclipse.emf.cdo.server.CDOServerUtil;
+import org.eclipse.emf.cdo.server.db.IMappingStrategy;
+import org.eclipse.emf.cdo.server.internal.db.DBStore;
+import org.eclipse.emf.cdo.server.internal.db.HorizontalMappingStrategy;
+import org.eclipse.emf.cdo.tests.model1.Model1Package;
+import org.eclipse.emf.cdo.util.CDOUtil;
+
+import org.eclipse.net4j.db.ConnectionProvider;
+import org.eclipse.net4j.db.DBUtil;
+import org.eclipse.net4j.db.IDBAdapter;
+import org.eclipse.net4j.db.internal.derby.DerbyAdapter;
+import org.eclipse.net4j.tests.AbstractTransportTest;
+import org.eclipse.net4j.util.container.IManagedContainer;
+
+import org.eclipse.emf.internal.cdo.util.FSMUtil;
+
+import javax.sql.DataSource;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+
+/**
+ * @author Eike Stepper
+ */
+public abstract class AbstractCDOTest extends AbstractTransportTest
+{
+ public static final String REPOSITORY_NAME = "repo1";
+
+ @Override
+ protected IManagedContainer createContainer()
+ {
+ IManagedContainer container = super.createContainer();
+ CDOUtil.prepareContainer(container);
+ CDOServerUtil.prepareContainer(container, new ContainerRepositoryProvider(container));
+ CDOServerUtil.addRepository(container, createRepository());
+ return container;
+ }
+
+ protected Repository createRepository()
+ {
+ IMappingStrategy mappingStrategy = new HorizontalMappingStrategy();
+ IDBAdapter dbAdapter = new DerbyAdapter();
+
+ Properties properties = new Properties();
+ properties.put("driverClass", "org.apache.derby.jdbc.EmbeddedDataSource");
+ properties.put("databaseName", "C:/temp/cdo-repo1");
+ properties.put("createDatabase", "create");
+ DataSource dataSource = DBUtil.createDataSource(properties);
+ ConnectionProvider connectionProvider = DBUtil.createConnectionProvider(dataSource);
+
+ DBStore store = new DBStore(mappingStrategy, dbAdapter, connectionProvider);
+ mappingStrategy.setStore(store);
+
+ Repository repository = new Repository();
+ repository.setName(REPOSITORY_NAME);
+ repository.setStore(store);
+
+ store.setRepository(repository);
+ return repository;
+ }
+
+ @Override
+ protected void doSetUp() throws Exception
+ {
+ super.doSetUp();
+ startTransport();
+ }
+
+ protected CDOSession openModel1Session()
+ {
+ CDOSession session = CDOUtil.openSession(getConnector(), REPOSITORY_NAME);
+ session.getPackageRegistry().putEPackage(Model1Package.eINSTANCE);
+ return session;
+ }
+
+ protected void assertTransient(CDOObject object)
+ {
+ assertTrue(FSMUtil.isTransient(object));
+ assertEquals(null, object.cdoID());
+ assertEquals(null, object.cdoRevision());
+ assertEquals(null, object.cdoView());
+ assertEquals(object.eResource(), object.cdoResource());
+ }
+
+ protected void assertNotTransient(CDOObject object)
+ {
+ assertFalse(FSMUtil.isTransient(object));
+ assertNotNull(object.cdoID());
+ assertNotNull(object.cdoRevision());
+ assertNotNull(object.cdoView());
+ assertNotNull(object.cdoResource());
+ assertNotNull(object.eResource());
+ assertEquals(object.eResource(), object.cdoResource());
+ }
+
+ protected void assertNew(CDOObject object)
+ {
+ assertNotTransient(object);
+ assertEquals(CDOState.NEW, object.cdoState());
+ }
+
+ protected void assertDirty(CDOObject object)
+ {
+ assertNotTransient(object);
+ assertEquals(CDOState.DIRTY, object.cdoState());
+ }
+
+ protected void assertClean(CDOObject object)
+ {
+ assertNotTransient(object);
+ assertEquals(CDOState.CLEAN, object.cdoState());
+ }
+
+ protected void assertProxy(CDOObject object)
+ {
+ assertFalse(FSMUtil.isTransient(object));
+ assertNotNull(object.cdoID());
+ assertNotNull(object.cdoView());
+ assertNotNull(object.cdoResource());
+ assertNotNull(object.eResource());
+ assertEquals(object.eResource(), object.cdoResource());
+ assertEquals(CDOState.PROXY, object.cdoState());
+ }
+
+ protected void assertContent(CDOObject container, CDOObject contained)
+ {
+ assertEquals(container.eResource(), contained.eResource());
+ assertEquals(container.cdoResource(), contained.cdoResource());
+ assertTrue(container.eContents().contains(contained));
+ if (container instanceof CDOResource)
+ {
+ assertEquals(null, contained.eContainer());
+ assertTrue(((CDOResource)container).getContents().contains(contained));
+ }
+ else
+ {
+ assertEquals(container, contained.eContainer());
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static interface ITimeOuter
+ {
+ public boolean timedOut() throws InterruptedException;
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static abstract class PollingTimeOuter implements ITimeOuter
+ {
+ private int retries;
+
+ private long interval;
+
+ public PollingTimeOuter(int retries, long interval)
+ {
+ this.retries = retries;
+ this.interval = interval;
+ }
+
+ public int getRetries()
+ {
+ return retries;
+ }
+
+ public long getInterval()
+ {
+ return interval;
+ }
+
+ public boolean timedOut() throws InterruptedException
+ {
+ for (int i = 0; i < retries; i++)
+ {
+ if (successful())
+ {
+ return false;
+ }
+
+ Thread.sleep(interval);
+ }
+
+ return true;
+ }
+
+ protected abstract boolean successful();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class LockTimeOuter implements ITimeOuter
+ {
+ private Lock lock;
+
+ private long millis;
+
+ public LockTimeOuter(Lock lock, long millis)
+ {
+ this.lock = lock;
+ this.millis = millis;
+ }
+
+ public Lock getLock()
+ {
+ return lock;
+ }
+
+ public long getMillis()
+ {
+ return millis;
+ }
+
+ public boolean timedOut() throws InterruptedException
+ {
+ Condition condition = lock.newCondition();
+ return !condition.await(millis, TimeUnit.MILLISECONDS);
+ }
+ }
+} \ No newline at end of file

Back to the top