blob: 74d8c716032b2f4a7ebe9dfc81a4ba2c0f43b0e9 [file] [log] [blame]
/*
* Copyright (c) 2010-2012 Eike Stepper (Loehne, 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.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
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.transaction.CDOTransaction;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
/**
* @author Eike Stepper
*/
@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
public class CompareTest extends AbstractCDOTest
{
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public void testFromEmptyBranches() throws Exception
{
CDOSession session = openSession();
((org.eclipse.emf.cdo.net4j.CDONet4jSession)session).options().getNet4jProtocol().setTimeout(1000000000);
CDOBranch mainBranch = session.getBranchManager().getMainBranch();
CDOTransaction transaction = session.openTransaction(mainBranch);
CDOResource resource = transaction.createResource(getResourcePath("/res"));
EList<EObject> contents = resource.getContents();
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time1 = transaction.commit().getTimeStamp();
CDOBranch source1 = mainBranch.createBranch("source1", time1);
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time2 = transaction.commit().getTimeStamp();
CDOBranch source2 = mainBranch.createBranch("source2", time2);
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time3 = transaction.commit().getTimeStamp();
CDOBranch source3 = mainBranch.createBranch("source3", time3);
assertCompare(session, mainBranch.getHead(), source1.getHead(), 7, 1, 0);
assertCompare(session, mainBranch.getHead(), source2.getHead(), 3, 1, 0);
assertCompare(session, mainBranch.getHead(), source3.getHead(), 0, 0, 0);
assertCompare(session, mainBranch.getHead(), mainBranch.getPoint(time1), 7, 1, 0);
assertCompare(session, mainBranch.getHead(), mainBranch.getPoint(time2), 3, 1, 0);
assertCompare(session, mainBranch.getHead(), mainBranch.getPoint(time3), 0, 0, 0);
}
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public void testFromBranchWithAdditions() throws Exception
{
CDOSession session = openSession();
CDOBranch mainBranch = session.getBranchManager().getMainBranch();
CDOTransaction transaction = session.openTransaction(mainBranch);
CDOResource resource = transaction.createResource(getResourcePath("/res"));
EList<EObject> contents = resource.getContents();
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time1 = transaction.commit().getTimeStamp();
CDOBranch source1 = mainBranch.createBranch("source1", time1);
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
transaction.commit();
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
transaction.commit();
sleep(10);
CDOTransaction tx1 = session.openTransaction(source1);
CDOResource res1 = tx1.getResource(getResourcePath("/res"));
EList<EObject> contents1 = res1.getContents();
addCompany(contents1);
addCompany(contents1);
tx1.commit();
tx1.close();
assertCompare(session, mainBranch.getHead(), source1.getHead(), 7, 1, 2);
}
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public void testAdditionsInSourceAndTarget() throws Exception
{
CDOSession session = openSession();
CDOBranch mainBranch = session.getBranchManager().getMainBranch();
CDOTransaction transaction = session.openTransaction(mainBranch);
CDOResource resource = transaction.createResource(getResourcePath("/res"));
EList<EObject> contents = resource.getContents();
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time1 = transaction.commit().getTimeStamp();
CDOBranch source1 = mainBranch.createBranch("source1", time1);
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time2 = transaction.commit().getTimeStamp();
CDOBranch source2 = mainBranch.createBranch("source2", time2);
sleep(10);
addCompany(contents);
addCompany(contents);
addCompany(contents);
transaction.commit();
sleep(10);
CDOTransaction tx1 = session.openTransaction(source1);
CDOResource res1 = tx1.getResource(getResourcePath("/res"));
EList<EObject> contents1 = res1.getContents();
addCompany(contents1);
addCompany(contents1);
tx1.commit();
tx1.close();
sleep(10);
CDOTransaction tx2 = session.openTransaction(source2);
CDOResource res2 = tx2.getResource(getResourcePath("/res"));
EList<EObject> contents2 = res2.getContents();
addCompany(contents2);
tx2.commit();
tx2.close();
assertCompare(session, mainBranch.getHead(), source1.getHead(), 7, 1, 2);
assertCompare(session, mainBranch.getHead(), source2.getHead(), 3, 1, 1);
assertCompare(session, source1.getHead(), source2.getHead(), 2, 1, 5);
}
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public void testFromBranchWithChangesInSource() throws Exception
{
CDOSession session = openSession();
CDOBranch mainBranch = session.getBranchManager().getMainBranch();
CDOTransaction transaction = session.openTransaction(mainBranch);
CDOResource resource = transaction.createResource(getResourcePath("/res" + 0));
EList<EObject> contents = resource.getContents();
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time = transaction.commit().getTimeStamp();
CDOBranch source = mainBranch.createBranch("source" + 0, time);
sleep(10);
CDOTransaction tx1 = session.openTransaction(source);
CDOResource res1 = tx1.getResource(getResourcePath("/res" + 0));
EList<EObject> contents1 = res1.getContents();
((Company)contents1.get(0)).setName("Company0");
((Company)contents1.get(1)).setName("Company1");
((Company)contents1.get(2)).setName("Company2");
tx1.commit();
tx1.close();
assertCompare(session, mainBranch.getHead(), source.getHead(), 0, 3, 0);
}
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public void testFromBranchWithRemovalsInSource() throws Exception
{
CDOSession session = openSession();
CDOBranch mainBranch = session.getBranchManager().getMainBranch();
CDOTransaction transaction = session.openTransaction(mainBranch);
CDOResource resource = transaction.createResource(getResourcePath("/res"));
EList<EObject> contents = resource.getContents();
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
addCompany(contents);
long time = transaction.commit().getTimeStamp();
CDOBranch source = mainBranch.createBranch("source", time);
sleep(10);
CDOTransaction tx1 = session.openTransaction(source);
CDOResource res1 = tx1.getResource(getResourcePath("/res"));
EList<EObject> contents1 = res1.getContents();
((Company)contents1.get(0)).setName("Company0");
contents1.remove(1);
tx1.commit();
tx1.close();
assertCompare(session, mainBranch.getHead(), source.getHead(), 1, 2, 0);
}
private Company addCompany(EList<EObject> contents)
{
Company company = getModel1Factory().createCompany();
contents.add(company);
return company;
}
private void assertCompare(CDOSession session, CDOBranchPoint target, CDOBranchPoint source, int n, int c, int d)
{
CDOView view = session.openView(target.getBranch(), target.getTimeStamp());
CDOChangeSetData result = view.compareRevisions(source);
assertEquals(n == 0 && c == 0 && d == 0, result.isEmpty());
assertEquals("NewObjects", n, result.getNewObjects().size());
assertEquals("ChangedObjects", c, result.getChangedObjects().size());
assertEquals("DetachedObjects", d, result.getDetachedObjects().size());
view.close();
view = session.openView(source.getBranch(), source.getTimeStamp());
result = view.compareRevisions(target);
assertEquals(n == 0 && c == 0 && d == 0, result.isEmpty());
assertEquals("NewObjects", d, result.getNewObjects().size());
assertEquals("ChangedObjects", c, result.getChangedObjects().size());
assertEquals("DetachedObjects", n, result.getDetachedObjects().size());
view.close();
}
}