blob: d00d87b4ef8939297b88970c712305beb04f03b6 [file] [log] [blame]
/*
* 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
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.Category;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
/**
* See bug 439173.
*
* @author Leonid Ripeynih
*/
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
public class Bugzilla_439173_Test extends AbstractCDOTest
{
public void testSwitchTargetVersion() throws Exception
{
CDOSession session = openSession();
// Create an object in main branch
//
CDOTransaction mainTx = session.openTransaction();
String path = getResourcePath("test");
CDOResource resource = mainTx.createResource(path);
resource.getContents().add(createCategory("cat1"));
mainTx.commit();
mainTx.close();
// Create a branch and change object
//
CDOBranch branch = session.getBranchManager().getMainBranch().createBranch("branch");
CDOTransaction branchTx = session.openTransaction(branch);
resource = branchTx.getResource(path);
// Change resource in branch twice (so it's version becomes 2)
//
resource.getContents().add(createCategory("cat2"));
branchTx.commit();
resource.getContents().add(createCategory("cat3"));
branchTx.commit();
branchTx.close();
// Open another session to invalidate cache
//
session.close();
CDOSession cleanSession = openSession();
// Open view on new session and switch target
//
CDOView view = cleanSession.openView();
resource = view.getResource(path);
resource.getContents().size();
assertEquals(1, resource.cdoRevision().getVersion());
view.setBranch(branch);
assertEquals(2, resource.cdoRevision().getVersion());
}
public void testSwitchTargetVersionResourceID() throws Exception
{
CDOSession session = openSession();
// Create an object in main branch
//
CDOTransaction mainTx = session.openTransaction();
String sourcePath = getResourcePath("source");
String targetPath = getResourcePath("target");
CDOResource resource = mainTx.createResource(sourcePath);
Category category = createCategory("cat1");
resource.getContents().add(category);
mainTx.commit();
CDOID sourceResourceID = resource.cdoID();
mainTx.close();
// Create a branch and change object
//
CDOBranch branch = session.getBranchManager().getMainBranch().createBranch("branch");
CDOTransaction branchTx = session.openTransaction(branch);
resource = branchTx.getResource(sourcePath);
// Change category resource
//
CDOResource targetResource = branchTx.createResource(targetPath);
targetResource.getContents().addAll(resource.getContents());
branchTx.commit();
CDOID targetResourceID = targetResource.cdoID();
branchTx.close();
// Open another session to invalidate cache
//
session.close();
CDOSession cleanSession = openSession();
// Open view on new session and switch target
//
CDOView view = cleanSession.openView();
resource = view.getResource(sourcePath);
category = (Category)resource.getContents().get(0);
category.getName();
assertEquals(sourceResourceID, ((InternalCDORevision)CDOUtil.getCDOObject(category).cdoRevision()).getResourceID());
view.setBranch(branch);
assertEquals(targetResourceID, ((InternalCDORevision)CDOUtil.getCDOObject(category).cdoRevision()).getResourceID());
}
private Category createCategory(String name)
{
Category category = getModel1Factory().createCategory();
category.setName(name);
return category;
}
}