/* * Copyright (c) 2014, 2015 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: * Esteban Dugueperoux - initial API and implementation */ package org.eclipse.emf.cdo.tests.bugzilla; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.tests.AbstractCDOTest; import org.eclipse.emf.cdo.tests.model1.Company; import org.eclipse.emf.cdo.tests.model1.Supplier; import org.eclipse.emf.cdo.transaction.CDOSavepoint; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CommitConflictException; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.spi.cdo.CDOMergingConflictResolver; import org.junit.Assert; /** * Bug 430794 - Using {@link CDOMergingConflictResolver} with {@link CDOSavepoint} provokes a {@link CommitConflictException} on server side. * * @author Esteban Dugueperoux */ public class Bugzilla_430794_Test extends AbstractCDOTest { public void testConflictResolutionWithSavepoint() throws Exception { Supplier s0 = getModel1Factory().createSupplier(); Supplier s1 = getModel1Factory().createSupplier(); Supplier s2 = getModel1Factory().createSupplier(); Company company = getModel1Factory().createCompany(); EList<Supplier> suppliers = company.getSuppliers(); suppliers.add(s0); CDOSession session1 = openSession(); CDOTransaction transactionOfUser1 = session1.openTransaction(); CDOResource resourceOfUser1 = transactionOfUser1.createResource(getResourcePath("/test1")); resourceOfUser1.getContents().add(company); transactionOfUser1.commit(); CDOSession session2 = openSession(); CDOTransaction transactionOfUser2 = session2.openTransaction(); transactionOfUser2.options().addConflictResolver(new CDOMergingConflictResolver()); CDOResource resourceOfUser2 = transactionOfUser2.getResource(getResourcePath("/test1")); Company companyRefFromUser2 = (Company)resourceOfUser2.getContents().get(0); companyRefFromUser2.getSuppliers().add(s1); transactionOfUser2.setSavepoint(); company.getSuppliers().add(s2); commitAndSync(transactionOfUser1, transactionOfUser2); Assert.assertTrue(transactionOfUser2.isDirty()); Assert.assertEquals(3, companyRefFromUser2.getSuppliers().size()); Assert.assertEquals(0, transactionOfUser2.getConflicts().size()); Assert.assertEquals(1, transactionOfUser2.getNewObjects().size()); commitAndSync(transactionOfUser2, transactionOfUser1); } }