blob: 59087a7833ac7c416b19d3ca35b63014d5ffaf2c [file] [log] [blame]
/*
* Copyright (c) 2012, 2013, 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.hibernate;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOObjectHistory;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.server.InternalRepository;
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.Customer;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.concurrent.ConcurrencyUtil;
/**
* @author Martin Taal
*/
@Requires(IRepositoryConfig.CAPABILITY_AUDITING)
public class Hibernate_Missing_Version_Test extends AbstractCDOTest
{
@Override
protected void doSetUp() throws Exception
{
disableConsole();
super.doSetUp();
skipStoreWithoutRawAccess();
}
@Override
protected void doTearDown() throws Exception
{
disableConsole();
super.doTearDown();
}
public void testVersionChange() throws Exception
{
CDOSession session = openSession();
Customer lastCustomer = null;
{
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/res1"));
Customer customer = getModel1Factory().createCustomer();
customer.setName("Martin");
resource.getContents().add(customer);
transaction.commit();
lastCustomer = customer;
}
{
CDOTransaction transaction = session.openTransaction();
Customer customer = transaction.getObject(lastCustomer);// (Customer)resource.getContents().get(0);
customer.setName("Eike");
assertEquals(1, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
transaction.commit();
assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
lastCustomer = customer;
}
{
CDOTransaction transaction = session.openTransaction();
Customer customer = lastCustomer; // transaction.getObject(lastCustomer);//
// (Customer)resource.getContents().get(0);
customer.setName("Peter");
assertEquals(2, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
transaction.commit();
// assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
lastCustomer = customer;
}
getRepository().getRevisionManager().getCache().clear();
// now go to another repo
InternalRepository repo2 = getRepository("repo2", true);
repo2.getRevisionManager().getCache().clear();
{
CDOSession session2 = openSession("repo2");
CDOTransaction transaction = session2.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/res1"));
Customer customer = (Customer)resource.getContents().get(0);
customer.setName("John");
assertEquals(3, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
transaction.commit();
assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
session2.close();
}
{
CDOSession session2 = openSession("repo2");
CDOTransaction transaction = session2.openTransaction();
CDOResource resource = transaction.getResource(getResourcePath("/res1"));
Customer customer = (Customer)resource.getContents().get(0);
customer.setName("Mike");
assertEquals(4, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
transaction.commit();
assertEquals(5, CDOUtil.getCDOObject(customer).cdoRevision().getVersion());
session2.close();
}
{
CDOSession session2 = openSession("repo2");
CDOView view = session2.openView();
CDOResource resource = view.getResource(getResourcePath("/res1"));
Customer customer = (Customer)resource.getContents().get(0);
assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 4));
assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 3));
assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 2));
assertNotNull(CDOUtil.getRevisionByVersion(CDOUtil.getCDOObject(customer), 1));
CDOObjectHistory history = getCDOObjectHistory(view, customer);
assertEquals(5, history.getElements().length);
// for (CDOCommitInfo cdoCommitInfo : history.getElements())
// {
//
// }
view.close();
session2.close();
}
}
private synchronized CDOObjectHistory getCDOObjectHistory(CDOView audit, Object object)
{
CDOObjectHistory cdoObjectHistory = audit.getHistory((CDOObject)object);
cdoObjectHistory.triggerLoad();
long startTime = System.currentTimeMillis();
while (cdoObjectHistory.isLoading())
{
ConcurrencyUtil.sleep(10);
// waited too long
if (System.currentTimeMillis() - startTime > 5000)
{
throw new IllegalStateException("commit info could not be loaded");
}
}
return cdoObjectHistory;
}
}