diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/AuditTest.java | 1070 |
1 files changed, 535 insertions, 535 deletions
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 a9c13398bc..64e2fc8743 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 @@ -1,535 +1,535 @@ -/*
- * 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.eresource.CDOResource;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
-import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
-import org.eclipse.emf.cdo.tests.model1.Company;
-import org.eclipse.emf.cdo.tests.model5.GenListOfInt;
-import org.eclipse.emf.cdo.tests.model5.Model5Factory;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOURIUtil;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.net4j.signal.RemoteException;
-
-import org.eclipse.emf.common.util.URI;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-/**
- * @author Eike Stepper
- */
-@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
-public class AuditTest extends AbstractCDOTest
-{
- protected CDOSession session1;
-
- protected CDOSession openSession1()
- {
- session1 = openSession();
- return session1;
- }
-
- protected void closeSession1()
- {
- session1.close();
- }
-
- protected CDOSession openSession2()
- {
- return openSession();
- }
-
- public void testNewAudit() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- Company company = getModel1Factory().createCompany();
- company.setName("ESC");
- resource.getContents().add(company);
- long commitTime1 = transaction.commit().getTimeStamp();
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1);
- assertEquals("ESC", company.getName());
-
- company.setName("Sympedia");
- long commitTime2 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime1 < commitTime2);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Sympedia", company.getName());
-
- company.setName("Eclipse");
- long commitTime3 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime2 < commitTime3);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Eclipse", company.getName());
-
- closeSession1();
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- Company auditCompany = (Company)auditResource.getContents().get(0);
- assertEquals("ESC", auditCompany.getName());
-
- CDOView audit2 = session.openView(commitTime2);
- CDOResource auditResource2 = audit2.getResource(getResourcePath("/res1"));
- Company auditCompany2 = (Company)auditResource2.getContents().get(0);
- assertEquals("Sympedia", auditCompany2.getName());
- session.close();
- }
-
- public void testChangedAudit() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- Company company = getModel1Factory().createCompany();
- company.setName("ESC");
- resource.getContents().add(company);
- long commitTime1 = transaction.commit().getTimeStamp();
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1);
- assertEquals("ESC", company.getName());
-
- company.setName("Sympedia");
- long commitTime2 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime1 < commitTime2);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Sympedia", company.getName());
-
- company.setName("Eclipse");
- long commitTime3 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime2 < commitTime3);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Eclipse", company.getName());
-
- closeSession1();
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- {
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- Company auditCompany = (Company)auditResource.getContents().get(0);
- assertEquals("ESC", auditCompany.getName());
- }
-
- audit.setTimeStamp(commitTime2);
- {
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- Company auditCompany = (Company)auditResource.getContents().get(0);
- assertEquals("Sympedia", auditCompany.getName());
- }
-
- audit.setTimeStamp(commitTime3);
- {
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- Company auditCompany = (Company)auditResource.getContents().get(0);
- assertEquals("Eclipse", auditCompany.getName());
- }
-
- session.close();
- }
-
- public void testKeepHandle() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- Company company = getModel1Factory().createCompany();
- company.setName("ESC");
- resource.getContents().add(company);
- long commitTime1 = transaction.commit().getTimeStamp();
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1);
- assertEquals("ESC", company.getName());
-
- company.setName("Sympedia");
- long commitTime2 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime1 < commitTime2);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Sympedia", company.getName());
-
- company.setName("Eclipse");
- long commitTime3 = transaction.commit().getTimeStamp();
- assertEquals(true, commitTime2 < commitTime3);
- assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2);
- assertEquals("Eclipse", company.getName());
-
- closeSession1();
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- Company auditCompany = (Company)auditResource.getContents().get(0);
- assertEquals("ESC", auditCompany.getName());
-
- audit.setTimeStamp(commitTime2);
- assertEquals("Sympedia", auditCompany.getName());
-
- audit.setTimeStamp(commitTime3);
- assertEquals("Eclipse", auditCompany.getName());
- session.close();
- }
-
- public void testAddingContents() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- resource.getContents().add(getModel1Factory().createCompany());
- long commitTime1 = transaction.commit().getTimeStamp();
-
- resource.getContents().add(getModel1Factory().createCompany());
- long commitTime2 = transaction.commit().getTimeStamp();
-
- resource.getContents().add(getModel1Factory().createCompany());
- long commitTime3 = transaction.commit().getTimeStamp();
- closeSession1();
-
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- assertEquals(1, auditResource.getContents().size());
-
- audit.setTimeStamp(commitTime2);
- assertEquals(2, auditResource.getContents().size());
-
- audit.setTimeStamp(commitTime3);
- assertEquals(3, auditResource.getContents().size());
- session.close();
- }
-
- public void testRemovingContents() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- long commitTime1 = transaction.commit().getTimeStamp();
-
- resource.getContents().remove(2);
- long commitTime2 = transaction.commit().getTimeStamp();
-
- resource.getContents().remove(2);
- long commitTime3 = transaction.commit().getTimeStamp();
- closeSession1();
-
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- assertEquals(5, auditResource.getContents().size());
-
- audit.setTimeStamp(commitTime2);
- assertEquals(4, auditResource.getContents().size());
-
- audit.setTimeStamp(commitTime3);
- assertEquals(3, auditResource.getContents().size());
- session.close();
- }
-
- public void testRemovingContentsKeepHandle() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- Company company = getModel1Factory().createCompany();
- company.setName("ESC");
-
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(company);
- resource.getContents().add(getModel1Factory().createCompany());
- resource.getContents().add(getModel1Factory().createCompany());
- long commitTime1 = transaction.commit().getTimeStamp();
-
- resource.getContents().remove(2);
- long commitTime2 = transaction.commit().getTimeStamp();
-
- closeSession1();
- session = openSession2();
-
- CDOView audit = session.openView(commitTime1);
- CDOResource auditResource = audit.getResource(getResourcePath("/res1"));
- assertEquals(5, auditResource.getContents().size());
-
- Company auditCompany = (Company)auditResource.getContents().get(2);
- assertEquals("ESC", auditCompany.getName());
- assertClean(auditCompany, audit);
-
- audit.setTimeStamp(commitTime2);
- assertEquals(4, auditResource.getContents().size());
- assertInvalid(auditCompany);
-
- audit.setTimeStamp(commitTime1);
- assertInvalid(auditCompany);
- assertEquals(5, auditResource.getContents().size());
- session.close();
- }
-
- @Requires(IRepositoryConfig.CAPABILITY_RESTARTABLE)
- public void testConsistentHistoryForIsMany() throws Exception
- {
- ArrayList<List<Integer>> history = new ArrayList<List<Integer>>();
- ArrayList<Long> timestamps = new ArrayList<Long>();
-
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
-
- GenListOfInt persistentList = Model5Factory.eINSTANCE.createGenListOfInt();
- resource.getContents().add(persistentList);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().add(1);
- persistentList.getElements().add(2);
- persistentList.getElements().add(3);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().add(1, 4);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().add(0, 5);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().move(1, 3);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().move(4, 2);
- persistentList.getElements().move(1, 3);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().remove(2);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().add(1, 2);
- persistentList.getElements().remove(2);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- persistentList.getElements().clear();
- persistentList.getElements().add(6);
- persistentList.getElements().add(7);
- persistentList.getElements().add(8);
-
- timestamps.add(transaction.commit().getTimeStamp());
- history.add(new ArrayList<Integer>(persistentList.getElements()));
-
- resource.getContents().clear();
-
- transaction.commit();
- transaction.close();
- session.close();
- clearCache(getRepository().getRevisionManager());
- }
-
- {
- CDOSession session = openSession();
-
- for (int i = 0; i < timestamps.size(); i++)
- {
- msg("Checking timestamp " + i + " of " + timestamps.size() + ": " + timestamps.get(i));
- CDOView audit = session.openView(timestamps.get(i));
- CDOResource res = audit.getResource(getResourcePath("/res1"));
- GenListOfInt persistentList = (GenListOfInt)res.getContents().get(0);
-
- assertEquals(joinList(history.get(i)), joinList(persistentList.getElements()));
- audit.close();
- }
-
- CDOView view = session.openView();
- CDOResource res = view.getResource(getResourcePath("/res1"));
- assertEquals(true, res.getContents().isEmpty());
- }
- }
-
- private String joinList(List<Integer> list)
- {
- String result = "";
- for (Integer i : list)
- {
- result += " " + i;
- }
-
- return result;
- }
-
- public void testCanCreateAuditAtRepoCreationTime() throws Exception
- {
- CDOSession session = openSession1();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
- Company company = getModel1Factory().createCompany();
- resource.getContents().add(company);
- transaction.commit();
- closeSession1();
-
- session = openSession2();
- session.openView(session.getRepositoryInfo().getCreationTime());
- session.close();
- }
-
- public void testCannotCreateAuditWithTimestampPriorToRepo() throws Exception
- {
- Calendar calendar = GregorianCalendar.getInstance();
- calendar.set(Calendar.YEAR, 19);
- calendar.set(Calendar.MONTH, 11);
- calendar.set(Calendar.DAY_OF_MONTH, 11);
-
- long timeStampPriorToRepoCreation = calendar.getTime().getTime();
- CDOSession session = openSession1();
-
- try
- {
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
- Company company = getModel1Factory().createCompany();
- resource.getContents().add(company);
- transaction.commit();
- closeSession1();
-
- session = openSession2();
- session.openView(timeStampPriorToRepoCreation);
- fail("RemoteException expected");
- }
- catch (RemoteException eexpected)
- {
- // Success
- }
- finally
- {
- session.close();
- }
- }
-
- public void testCannotSetAuditTimestampPriorToRepo() throws Exception
- {
- Calendar calendar = GregorianCalendar.getInstance();
- calendar.set(Calendar.YEAR, 19);
- calendar.set(Calendar.MONTH, 11);
- calendar.set(Calendar.DAY_OF_MONTH, 11);
-
- long timeStampPriorToRepoCreation = calendar.getTime().getTime();
- CDOSession session = openSession1();
-
- try
- {
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/res1"));
- Company company = getModel1Factory().createCompany();
- resource.getContents().add(company);
- long commitTime1 = transaction.commit().getTimeStamp();
- closeSession1();
-
- session = openSession2();
- CDOView audit = session.openView(commitTime1);
- audit.setTimeStamp(timeStampPriorToRepoCreation);
- fail("Exception expected");
- }
- catch (Exception expected)
- {
- // Success
- }
- finally
- {
- session.close();
- }
- }
-
- public void testChangePath() throws Exception
- {
- long commitTime1;
- long commitTime2;
-
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
- commitTime1 = transaction.commit().getTimeStamp();
-
- resource.setPath(getResourcePath("/renamed"));
- commitTime2 = transaction.commit().getTimeStamp();
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView audit1 = session.openView(commitTime1);
- assertEquals(true, audit1.hasResource(getResourcePath("/my/resource")));
- assertEquals(false, audit1.hasResource(getResourcePath("/renamed")));
-
- CDOView audit2 = session.openView(commitTime2);
- assertEquals(false, audit2.hasResource(getResourcePath("/my/resource")));
- assertEquals(true, audit2.hasResource(getResourcePath("/renamed")));
- session.close();
- }
-
- public void testChangeURI() throws Exception
- {
- long commitTime1;
- long commitTime2;
-
- {
- CDOSession session = openSession();
- CDOTransaction transaction = session.openTransaction();
- CDOResource resource = transaction.createResource(getResourcePath("/my/resource"));
- commitTime1 = transaction.commit().getTimeStamp();
-
- URI uri = URI.createURI("cdo://repo1" + getResourcePath("/renamed"));
- assertEquals(CDOURIUtil.createResourceURI(session, getResourcePath("/renamed")), uri);
- resource.setURI(uri);
-
- commitTime2 = transaction.commit().getTimeStamp();
- session.close();
- }
-
- CDOSession session = openSession();
- CDOView audit1 = session.openView(commitTime1);
- assertEquals(true, audit1.hasResource(getResourcePath("/my/resource")));
- assertEquals(false, audit1.hasResource(getResourcePath("/renamed")));
-
- CDOView audit2 = session.openView(commitTime2);
- assertEquals(false, audit2.hasResource(getResourcePath("/my/resource")));
- assertEquals(true, audit2.hasResource(getResourcePath("/renamed")));
- session.close();
- }
-}
+/* + * 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.eresource.CDOResource; +import org.eclipse.emf.cdo.session.CDOSession; +import org.eclipse.emf.cdo.tests.config.IRepositoryConfig; +import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires; +import org.eclipse.emf.cdo.tests.model1.Company; +import org.eclipse.emf.cdo.tests.model5.GenListOfInt; +import org.eclipse.emf.cdo.tests.model5.Model5Factory; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.util.CDOURIUtil; +import org.eclipse.emf.cdo.view.CDOView; + +import org.eclipse.net4j.signal.RemoteException; + +import org.eclipse.emf.common.util.URI; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.List; + +/** + * @author Eike Stepper + */ +@Requires(IRepositoryConfig.CAPABILITY_AUDITING) +public class AuditTest extends AbstractCDOTest +{ + protected CDOSession session1; + + protected CDOSession openSession1() + { + session1 = openSession(); + return session1; + } + + protected void closeSession1() + { + session1.close(); + } + + protected CDOSession openSession2() + { + return openSession(); + } + + public void testNewAudit() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + Company company = getModel1Factory().createCompany(); + company.setName("ESC"); + resource.getContents().add(company); + long commitTime1 = transaction.commit().getTimeStamp(); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1); + assertEquals("ESC", company.getName()); + + company.setName("Sympedia"); + long commitTime2 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime1 < commitTime2); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Sympedia", company.getName()); + + company.setName("Eclipse"); + long commitTime3 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime2 < commitTime3); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Eclipse", company.getName()); + + closeSession1(); + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + Company auditCompany = (Company)auditResource.getContents().get(0); + assertEquals("ESC", auditCompany.getName()); + + CDOView audit2 = session.openView(commitTime2); + CDOResource auditResource2 = audit2.getResource(getResourcePath("/res1")); + Company auditCompany2 = (Company)auditResource2.getContents().get(0); + assertEquals("Sympedia", auditCompany2.getName()); + session.close(); + } + + public void testChangedAudit() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + Company company = getModel1Factory().createCompany(); + company.setName("ESC"); + resource.getContents().add(company); + long commitTime1 = transaction.commit().getTimeStamp(); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1); + assertEquals("ESC", company.getName()); + + company.setName("Sympedia"); + long commitTime2 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime1 < commitTime2); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Sympedia", company.getName()); + + company.setName("Eclipse"); + long commitTime3 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime2 < commitTime3); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Eclipse", company.getName()); + + closeSession1(); + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + { + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + Company auditCompany = (Company)auditResource.getContents().get(0); + assertEquals("ESC", auditCompany.getName()); + } + + audit.setTimeStamp(commitTime2); + { + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + Company auditCompany = (Company)auditResource.getContents().get(0); + assertEquals("Sympedia", auditCompany.getName()); + } + + audit.setTimeStamp(commitTime3); + { + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + Company auditCompany = (Company)auditResource.getContents().get(0); + assertEquals("Eclipse", auditCompany.getName()); + } + + session.close(); + } + + public void testKeepHandle() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + Company company = getModel1Factory().createCompany(); + company.setName("ESC"); + resource.getContents().add(company); + long commitTime1 = transaction.commit().getTimeStamp(); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime1); + assertEquals("ESC", company.getName()); + + company.setName("Sympedia"); + long commitTime2 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime1 < commitTime2); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Sympedia", company.getName()); + + company.setName("Eclipse"); + long commitTime3 = transaction.commit().getTimeStamp(); + assertEquals(true, commitTime2 < commitTime3); + assertEquals(true, session.getRepositoryInfo().getCreationTime() < commitTime2); + assertEquals("Eclipse", company.getName()); + + closeSession1(); + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + Company auditCompany = (Company)auditResource.getContents().get(0); + assertEquals("ESC", auditCompany.getName()); + + audit.setTimeStamp(commitTime2); + assertEquals("Sympedia", auditCompany.getName()); + + audit.setTimeStamp(commitTime3); + assertEquals("Eclipse", auditCompany.getName()); + session.close(); + } + + public void testAddingContents() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + resource.getContents().add(getModel1Factory().createCompany()); + long commitTime1 = transaction.commit().getTimeStamp(); + + resource.getContents().add(getModel1Factory().createCompany()); + long commitTime2 = transaction.commit().getTimeStamp(); + + resource.getContents().add(getModel1Factory().createCompany()); + long commitTime3 = transaction.commit().getTimeStamp(); + closeSession1(); + + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + assertEquals(1, auditResource.getContents().size()); + + audit.setTimeStamp(commitTime2); + assertEquals(2, auditResource.getContents().size()); + + audit.setTimeStamp(commitTime3); + assertEquals(3, auditResource.getContents().size()); + session.close(); + } + + public void testRemovingContents() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + long commitTime1 = transaction.commit().getTimeStamp(); + + resource.getContents().remove(2); + long commitTime2 = transaction.commit().getTimeStamp(); + + resource.getContents().remove(2); + long commitTime3 = transaction.commit().getTimeStamp(); + closeSession1(); + + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + assertEquals(5, auditResource.getContents().size()); + + audit.setTimeStamp(commitTime2); + assertEquals(4, auditResource.getContents().size()); + + audit.setTimeStamp(commitTime3); + assertEquals(3, auditResource.getContents().size()); + session.close(); + } + + public void testRemovingContentsKeepHandle() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + Company company = getModel1Factory().createCompany(); + company.setName("ESC"); + + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(company); + resource.getContents().add(getModel1Factory().createCompany()); + resource.getContents().add(getModel1Factory().createCompany()); + long commitTime1 = transaction.commit().getTimeStamp(); + + resource.getContents().remove(2); + long commitTime2 = transaction.commit().getTimeStamp(); + + closeSession1(); + session = openSession2(); + + CDOView audit = session.openView(commitTime1); + CDOResource auditResource = audit.getResource(getResourcePath("/res1")); + assertEquals(5, auditResource.getContents().size()); + + Company auditCompany = (Company)auditResource.getContents().get(2); + assertEquals("ESC", auditCompany.getName()); + assertClean(auditCompany, audit); + + audit.setTimeStamp(commitTime2); + assertEquals(4, auditResource.getContents().size()); + assertInvalid(auditCompany); + + audit.setTimeStamp(commitTime1); + assertInvalid(auditCompany); + assertEquals(5, auditResource.getContents().size()); + session.close(); + } + + @Requires(IRepositoryConfig.CAPABILITY_RESTARTABLE) + public void testConsistentHistoryForIsMany() throws Exception + { + ArrayList<List<Integer>> history = new ArrayList<List<Integer>>(); + ArrayList<Long> timestamps = new ArrayList<Long>(); + + { + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + + GenListOfInt persistentList = Model5Factory.eINSTANCE.createGenListOfInt(); + resource.getContents().add(persistentList); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().add(1); + persistentList.getElements().add(2); + persistentList.getElements().add(3); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().add(1, 4); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().add(0, 5); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().move(1, 3); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().move(4, 2); + persistentList.getElements().move(1, 3); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().remove(2); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().add(1, 2); + persistentList.getElements().remove(2); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + persistentList.getElements().clear(); + persistentList.getElements().add(6); + persistentList.getElements().add(7); + persistentList.getElements().add(8); + + timestamps.add(transaction.commit().getTimeStamp()); + history.add(new ArrayList<Integer>(persistentList.getElements())); + + resource.getContents().clear(); + + transaction.commit(); + transaction.close(); + session.close(); + clearCache(getRepository().getRevisionManager()); + } + + { + CDOSession session = openSession(); + + for (int i = 0; i < timestamps.size(); i++) + { + msg("Checking timestamp " + i + " of " + timestamps.size() + ": " + timestamps.get(i)); + CDOView audit = session.openView(timestamps.get(i)); + CDOResource res = audit.getResource(getResourcePath("/res1")); + GenListOfInt persistentList = (GenListOfInt)res.getContents().get(0); + + assertEquals(joinList(history.get(i)), joinList(persistentList.getElements())); + audit.close(); + } + + CDOView view = session.openView(); + CDOResource res = view.getResource(getResourcePath("/res1")); + assertEquals(true, res.getContents().isEmpty()); + } + } + + private String joinList(List<Integer> list) + { + String result = ""; + for (Integer i : list) + { + result += " " + i; + } + + return result; + } + + public void testCanCreateAuditAtRepoCreationTime() throws Exception + { + CDOSession session = openSession1(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + Company company = getModel1Factory().createCompany(); + resource.getContents().add(company); + transaction.commit(); + closeSession1(); + + session = openSession2(); + session.openView(session.getRepositoryInfo().getCreationTime()); + session.close(); + } + + public void testCannotCreateAuditWithTimestampPriorToRepo() throws Exception + { + Calendar calendar = GregorianCalendar.getInstance(); + calendar.set(Calendar.YEAR, 19); + calendar.set(Calendar.MONTH, 11); + calendar.set(Calendar.DAY_OF_MONTH, 11); + + long timeStampPriorToRepoCreation = calendar.getTime().getTime(); + CDOSession session = openSession1(); + + try + { + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + Company company = getModel1Factory().createCompany(); + resource.getContents().add(company); + transaction.commit(); + closeSession1(); + + session = openSession2(); + session.openView(timeStampPriorToRepoCreation); + fail("RemoteException expected"); + } + catch (RemoteException eexpected) + { + // Success + } + finally + { + session.close(); + } + } + + public void testCannotSetAuditTimestampPriorToRepo() throws Exception + { + Calendar calendar = GregorianCalendar.getInstance(); + calendar.set(Calendar.YEAR, 19); + calendar.set(Calendar.MONTH, 11); + calendar.set(Calendar.DAY_OF_MONTH, 11); + + long timeStampPriorToRepoCreation = calendar.getTime().getTime(); + CDOSession session = openSession1(); + + try + { + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/res1")); + Company company = getModel1Factory().createCompany(); + resource.getContents().add(company); + long commitTime1 = transaction.commit().getTimeStamp(); + closeSession1(); + + session = openSession2(); + CDOView audit = session.openView(commitTime1); + audit.setTimeStamp(timeStampPriorToRepoCreation); + fail("Exception expected"); + } + catch (Exception expected) + { + // Success + } + finally + { + session.close(); + } + } + + public void testChangePath() throws Exception + { + long commitTime1; + long commitTime2; + + { + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/my/resource")); + commitTime1 = transaction.commit().getTimeStamp(); + + resource.setPath(getResourcePath("/renamed")); + commitTime2 = transaction.commit().getTimeStamp(); + session.close(); + } + + CDOSession session = openSession(); + CDOView audit1 = session.openView(commitTime1); + assertEquals(true, audit1.hasResource(getResourcePath("/my/resource"))); + assertEquals(false, audit1.hasResource(getResourcePath("/renamed"))); + + CDOView audit2 = session.openView(commitTime2); + assertEquals(false, audit2.hasResource(getResourcePath("/my/resource"))); + assertEquals(true, audit2.hasResource(getResourcePath("/renamed"))); + session.close(); + } + + public void testChangeURI() throws Exception + { + long commitTime1; + long commitTime2; + + { + CDOSession session = openSession(); + CDOTransaction transaction = session.openTransaction(); + CDOResource resource = transaction.createResource(getResourcePath("/my/resource")); + commitTime1 = transaction.commit().getTimeStamp(); + + URI uri = URI.createURI("cdo://repo1" + getResourcePath("/renamed")); + assertEquals(CDOURIUtil.createResourceURI(session, getResourcePath("/renamed")), uri); + resource.setURI(uri); + + commitTime2 = transaction.commit().getTimeStamp(); + session.close(); + } + + CDOSession session = openSession(); + CDOView audit1 = session.openView(commitTime1); + assertEquals(true, audit1.hasResource(getResourcePath("/my/resource"))); + assertEquals(false, audit1.hasResource(getResourcePath("/renamed"))); + + CDOView audit2 = session.openView(commitTime2); + assertEquals(false, audit2.hasResource(getResourcePath("/my/resource"))); + assertEquals(true, audit2.hasResource(getResourcePath("/renamed"))); + session.close(); + } +} |