Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-09-25 10:48:17 +0000
committerEike Stepper2008-09-25 10:48:17 +0000
commit45b008a844699b5b6d0f3b90cc869dd7a0d37da4 (patch)
tree269d83757f1c02ac680a3cc2901f901f1943ce80 /plugins/org.eclipse.emf.cdo.tests
parent615a26b0ef27b21bb654385823df0d47b8ec259f (diff)
downloadcdo-45b008a844699b5b6d0f3b90cc869dd7a0d37da4.tar.gz
cdo-45b008a844699b5b6d0f3b90cc869dd7a0d37da4.tar.xz
cdo-45b008a844699b5b6d0f3b90cc869dd7a0d37da4.zip
[248325] Support CDOAudit.setTimeStamp()
https://bugs.eclipse.org/bugs/show_bug.cgi?id=248325
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests')
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AbstractCDOTest.java15
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java163
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java10
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java1
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java146
6 files changed, 293 insertions, 44 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
index 7fcc6e0362..545de35d61 100644
--- 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
@@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.tests;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
+import org.eclipse.emf.cdo.CDOTransaction;
import org.eclipse.emf.cdo.CDOView;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.tests.config.ConfigTest;
@@ -155,6 +156,20 @@ public abstract class AbstractCDOTest extends ConfigTest
assertEquals(false, CDOLegacyWrapper.isLegacyProxy(object));
}
+ protected static void assertCreatedTime(EObject eObject)
+ {
+ CDOObject object = CDOUtil.getCDOObject(eObject);
+ if (object != null)
+ {
+ CDOView view = object.cdoView();
+ if (view instanceof CDOTransaction)
+ {
+ CDOTransaction transaction = (CDOTransaction)view;
+ assertEquals(transaction.getLastCommitTime(), object.cdoRevision().getCreated());
+ }
+ }
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
index 8836d8a3ee..95b9a35ccb 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AllTestsAllConfigs.java
@@ -42,6 +42,7 @@ public class AllTestsAllConfigs extends ConfigTestSuite
testClasses.add(EnumTest.class);
testClasses.add(StateMachineTest.class);
testClasses.add(ViewTest.class);
+ testClasses.add(AuditTest.class);
testClasses.add(ResourceTest.class);
testClasses.add(ContainmentTest.class);
testClasses.add(InvalidationTest.class);
@@ -54,6 +55,7 @@ public class AllTestsAllConfigs extends ConfigTestSuite
testClasses.add(MetaTest.class);
testClasses.add(RevisionDeltaWithDeltaSupportTest.class);
testClasses.add(RevisionDeltaWithoutDeltaSupportTest.class);
+ testClasses.add(RevisionHolderTest.class);
testClasses.add(IndexReconstructionTest.class);
testClasses.add(AutoAttacherTest.class);
testClasses.add(SavepointTest.class);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java
index 47d6c2c155..ac47a2e822 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java
@@ -17,6 +17,11 @@ import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.server.IRepository;
import org.eclipse.emf.cdo.tests.model1.Company;
+import org.eclipse.emf.internal.cdo.CDOAuditImpl;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+
import java.util.Map;
/**
@@ -80,7 +85,165 @@ public class AuditTest extends AbstractCDOTest
CDOResource auditResource = audit.getResource("/res1");
Company auditCompany = (Company)auditResource.getContents().get(0);
assertEquals("ESC", auditCompany.getName());
+
+ CDOAudit audit2 = session.openAudit(commitTime2);
+ CDOResource auditResource2 = audit2.getResource("/res1");
+ Company auditCompany2 = (Company)auditResource2.getContents().get(0);
+ assertEquals("Sympedia", auditCompany2.getName());
+ session.close();
+ }
+
+ public void testRemoteAudit() throws Exception
+ {
+ CDOSession session = openModel1Session();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/res1");
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("ESC");
+ resource.getContents().add(company);
+ transaction.commit();
+ long commitTime1 = transaction.getLastCommitTime();
+ assertTrue(session.getRepositoryCreationTime() < commitTime1);
+ assertEquals("ESC", company.getName());
+ sleep(100);
+
+ company.setName("Sympedia");
+ transaction.commit();
+ long commitTime2 = transaction.getLastCommitTime();
+ assertTrue(commitTime1 < commitTime2);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
+ assertEquals("Sympedia", company.getName());
+ sleep(100);
+
+ company.setName("Eclipse");
+ transaction.commit();
+ long commitTime3 = transaction.getLastCommitTime();
+ assertTrue(commitTime2 < commitTime3);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
+ assertEquals("Eclipse", company.getName());
+ session.close();
+
+ CDOSession session2 = openModel1Session();
+ CDOAudit audit = session2.openAudit(commitTime1);
+ CDOResource auditResource = audit.getResource("/res1");
+ EList<EObject> contents = auditResource.getContents();
+ Company auditCompany = (Company)contents.get(0);
+ String name = auditCompany.getName();
+ assertEquals("ESC", name);
+
+ CDOAudit audit2 = session2.openAudit(commitTime2);
+ CDOResource auditResource2 = audit2.getResource("/res1");
+ Company auditCompany2 = (Company)auditResource2.getContents().get(0);
+ assertEquals("Sympedia", auditCompany2.getName());
+ session2.close();
+ }
+
+ public void testChangeLocalAudit() throws Exception
+ {
+ CDOSession session = openModel1Session();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/res1");
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("ESC");
+ resource.getContents().add(company);
+ transaction.commit();
+ long commitTime1 = transaction.getLastCommitTime();
+ assertTrue(session.getRepositoryCreationTime() < commitTime1);
+ assertEquals("ESC", company.getName());
+ sleep(100);
+
+ company.setName("Sympedia");
+ transaction.commit();
+ long commitTime2 = transaction.getLastCommitTime();
+ assertTrue(commitTime1 < commitTime2);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
+ assertEquals("Sympedia", company.getName());
+
+ company.setName("Eclipse");
+ transaction.commit();
+ long commitTime3 = transaction.getLastCommitTime();
+ assertTrue(commitTime2 < commitTime3);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
assertEquals("Eclipse", company.getName());
+
+ CDOAudit audit = session.openAudit(commitTime1);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("ESC", auditCompany.getName());
+ }
+
+ ((CDOAuditImpl)audit).setTimeStamp(commitTime2);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Sympedia", auditCompany.getName());
+ }
+
+ ((CDOAuditImpl)audit).setTimeStamp(commitTime3);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Eclipse", auditCompany.getName());
+ }
+
session.close();
}
+
+ public void testChangeRemoteAudit() throws Exception
+ {
+ CDOSession session = openModel1Session();
+ CDOTransaction transaction = session.openTransaction();
+ CDOResource resource = transaction.createResource("/res1");
+
+ Company company = getModel1Factory().createCompany();
+ company.setName("ESC");
+ resource.getContents().add(company);
+ transaction.commit();
+ long commitTime1 = transaction.getLastCommitTime();
+ assertTrue(session.getRepositoryCreationTime() < commitTime1);
+ assertEquals("ESC", company.getName());
+ sleep(100);
+
+ company.setName("Sympedia");
+ transaction.commit();
+ long commitTime2 = transaction.getLastCommitTime();
+ assertTrue(commitTime1 < commitTime2);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
+ assertEquals("Sympedia", company.getName());
+
+ company.setName("Eclipse");
+ transaction.commit();
+ long commitTime3 = transaction.getLastCommitTime();
+ assertTrue(commitTime2 < commitTime3);
+ assertTrue(session.getRepositoryCreationTime() < commitTime2);
+ assertEquals("Eclipse", company.getName());
+ session.close();
+
+ CDOSession session2 = openModel1Session();
+ CDOAudit audit = session2.openAudit(commitTime1);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("ESC", auditCompany.getName());
+ }
+
+ ((CDOAuditImpl)audit).setTimeStamp(commitTime2);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Sympedia", auditCompany.getName());
+ }
+
+ ((CDOAuditImpl)audit).setTimeStamp(commitTime3);
+ {
+ CDOResource auditResource = audit.getResource("/res1");
+ Company auditCompany = (Company)auditResource.getContents().get(0);
+ assertEquals("Eclipse", auditCompany.getName());
+ }
+
+ session2.close();
+ }
}
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java
index 1143d6daf4..f53dd1c57f 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InitialTest.java
@@ -302,6 +302,8 @@ public class InitialTest extends AbstractCDOTest
transaction.commit();
assertEquals(CDOState.CLEAN, resource.cdoState());
assertEquals(CDOState.CLEAN, CDOUtil.getCDOObject(supplier).cdoState());
+ assertCreatedTime(resource);
+ assertCreatedTime(supplier);
}
public void testReadResourceClean() throws Exception
@@ -331,6 +333,7 @@ public class InitialTest extends AbstractCDOTest
EList<EObject> contents = resource.getContents();
Supplier s = (Supplier)contents.get(0);
assertEquals(supplier, s);
+ assertCreatedTime(s);
}
public void testReadObjectClean() throws Exception
@@ -418,14 +421,21 @@ public class InitialTest extends AbstractCDOTest
msg("Committing");
transaction.commit();
+ long commitTime1 = transaction.getLastCommitTime();
+ assertCreatedTime(supplier);
msg("Setting name");
supplier.setName("Eike");
+ sleep(100);
msg("Committing");
transaction.commit();
+ long commitTime2 = transaction.getLastCommitTime();
+ assertTrue(commitTime1 < commitTime2);
+
assertEquals(CDOState.CLEAN, resource.cdoState());
assertEquals(CDOState.CLEAN, CDOUtil.getCDOObject(supplier).cdoState());
+ assertCreatedTime(supplier);
}
public void testGetResource() throws Exception
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
index df585ebec1..aa85e1a328 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
@@ -501,7 +501,6 @@ public class InvalidationTest extends AbstractCDOTest
msg("Checking after sync");
assertEquals(false, timeOuter.timedOut());
-
}
public void testPassiveUpdateOnAndOff() throws Exception
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
index 100f6a32fa..29e34f5007 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/RevisionHolderTest.java
@@ -22,12 +22,13 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.common.revision.CDORevisionResolver;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.cdo.internal.common.revision.cache.lru.DLRevisionHolder;
+import org.eclipse.emf.cdo.internal.common.revision.cache.lru.LRURevisionCache;
import org.eclipse.emf.cdo.internal.common.revision.cache.lru.LRURevisionHolder;
import org.eclipse.emf.cdo.internal.common.revision.cache.lru.LRURevisionList;
+import org.eclipse.emf.cdo.internal.common.revision.cache.lru.RevisionHolder;
import org.eclipse.emf.cdo.spi.common.InternalCDOList;
import org.eclipse.emf.cdo.spi.common.InternalCDORevision;
-import org.eclipse.net4j.tests.AbstractOMTest;
import org.eclipse.net4j.util.io.ExtendedDataOutput;
import java.io.IOException;
@@ -38,8 +39,48 @@ import java.util.Map;
/**
* @author Eike Stepper
*/
-public class RevisionHolderTest extends AbstractOMTest
+public class RevisionHolderTest extends AbstractCDOTest
{
+ public void testChronology() throws Exception
+ {
+ LRURevisionCache cache = new LRURevisionCache();
+ cache.activate();
+
+ TestRevision r1v1 = new TestRevision(1, 1, 1);
+ cache.addRevision(r1v1);
+ assertEquals(CDORevision.UNSPECIFIED_DATE, r1v1.getRevised());
+
+ TestRevision r1v2 = new TestRevision(1, 2, 6);
+ cache.addRevision(r1v2);
+ assertEquals(CDORevision.UNSPECIFIED_DATE, r1v2.getRevised());
+ assertEquals(r1v2.getCreated() - 1, r1v1.getRevised());
+
+ TestRevision r1v3 = new TestRevision(1, 3, 11);
+ cache.addRevision(r1v3);
+ assertEquals(CDORevision.UNSPECIFIED_DATE, r1v3.getRevised());
+ assertEquals(r1v3.getCreated() - 1, r1v2.getRevised());
+ assertEquals(r1v2.getCreated() - 1, r1v1.getRevised());
+
+ CDOID id = r1v1.getID();
+
+ RevisionHolder h1v3 = cache.getHolder(id);
+ assertEquals(r1v3, h1v3.getRevision());
+
+ RevisionHolder h1v2 = h1v3.getNext();
+ assertEquals(r1v2, h1v2.getRevision());
+
+ RevisionHolder h1v1 = h1v2.getNext();
+ assertEquals(r1v1, h1v1.getRevision());
+ assertEquals(null, h1v1.getNext());
+
+ h1v2 = h1v1.getPrev();
+ assertEquals(r1v2, h1v2.getRevision());
+
+ h1v3 = h1v2.getPrev();
+ assertEquals(r1v3, h1v3.getRevision());
+ assertEquals(null, h1v3.getPrev());
+ }
+
public void testAddHead() throws Exception
{
LinkedList<LRURevisionHolder> linkedList = new LinkedList<LRURevisionHolder>();
@@ -196,64 +237,103 @@ public class RevisionHolderTest extends AbstractOMTest
{
private CDOID id;
- public TestRevision(long id)
+ private int version;
+
+ private long created;
+
+ private long revised;
+
+ public TestRevision(long id, int version, long created, long revised)
{
this.id = CDOIDUtil.createLong(id);
+ this.version = version;
+ this.created = created;
+ this.revised = revised;
}
- public CDOClass getCDOClass()
+ public TestRevision(long id, int version, long created)
{
- return null;
+ this(id, version, created, CDORevision.UNSPECIFIED_DATE);
}
- public long getCreated()
+ public TestRevision(long id)
{
- return 0;
+ this(id, 0, CDORevision.UNSPECIFIED_DATE);
}
- public CDORevisionData getData()
+ public CDOID getID()
{
- return null;
+ return id;
}
- public CDOID getID()
+ public void setID(CDOID id)
{
- return id;
+ this.id = id;
}
- public long getRevised()
+ public int getVersion()
{
- return 0;
+ return version;
}
- public CDORevisionResolver getRevisionResolver()
+ public void setVersion(int version)
{
- return null;
+ this.version = version;
}
- public int getVersion()
+ public long getCreated()
{
- return 0;
+ return created;
}
- public boolean isCurrent()
+ public void setCreated(long created)
{
- return false;
+ this.created = created;
}
- public boolean isResource()
+ public long getRevised()
+ {
+ return revised;
+ }
+
+ public void setRevised(long revised)
{
- return false;
+ this.revised = revised;
+ }
+
+ public boolean isCurrent()
+ {
+ return revised == UNSPECIFIED_DATE;
}
public boolean isTransactional()
{
- return false;
+ return version < 0;
}
public boolean isValid(long timeStamp)
{
- return false;
+ return (revised == UNSPECIFIED_DATE || revised >= timeStamp) && timeStamp >= created;
+ }
+
+ public CDOClass getCDOClass()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public CDORevisionData getData()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public CDORevisionResolver getRevisionResolver()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean isResource()
+ {
+ throw new UnsupportedOperationException();
}
public CDORevisionDelta compare(CDORevision origin)
@@ -381,16 +461,6 @@ public class RevisionHolderTest extends AbstractOMTest
throw new UnsupportedOperationException();
}
- public void setCreated(long created)
- {
- throw new UnsupportedOperationException();
- }
-
- public void setID(CDOID id)
- {
- throw new UnsupportedOperationException();
- }
-
public void setListSize(CDOFeature feature, int size)
{
throw new UnsupportedOperationException();
@@ -401,11 +471,6 @@ public class RevisionHolderTest extends AbstractOMTest
throw new UnsupportedOperationException();
}
- public void setRevised(long revised)
- {
- throw new UnsupportedOperationException();
- }
-
public int setTransactional()
{
throw new UnsupportedOperationException();
@@ -421,11 +486,6 @@ public class RevisionHolderTest extends AbstractOMTest
throw new UnsupportedOperationException();
}
- public void setVersion(int version)
- {
- throw new UnsupportedOperationException();
- }
-
public int size(CDOFeature feature)
{
throw new UnsupportedOperationException();

Back to the top