/* * Copyright (c) 2016 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.CDOObject; import org.eclipse.emf.cdo.common.lock.CDOLockState; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.tests.AbstractLockingTest; import org.eclipse.emf.cdo.tests.model1.Company; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.util.CDOUtil; /** * @author Eike Stepper */ public class Bugzilla_387563b_Test extends AbstractLockingTest { public void testNoImplicitLockingOfNewObject() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); transaction.options().setAutoReleaseLocksEnabled(true); CDOResource resource = transaction.createResource(getResourcePath("test1")); resource.getContents().add(company); CDOObject cdoObject = CDOUtil.getCDOObject(company); CDOLockState lockState = cdoObject.cdoLockState(); assertNull(lockState.getWriteLockOwner()); transaction.commit(); assertWriteLock(false, company); } public void testExplicitLockingOfNewObject() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); transaction.options().setAutoReleaseLocksEnabled(true); CDOResource resource = transaction.createResource(getResourcePath("test1")); resource.getContents().add(company); CDOObject cdoObject = CDOUtil.getCDOObject(company); cdoObject.cdoWriteLock().lock(); CDOLockState lockState = cdoObject.cdoLockState(); assertEquals(transaction, lockState.getWriteLockOwner()); transaction.commit(); assertWriteLock(false, company); } public void testExplicitLockingOfNewObjectExemption() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); transaction.options().setAutoReleaseLocksEnabled(true); transaction.options().addAutoReleaseLocksExemptions(false, company); CDOResource resource = transaction.createResource(getResourcePath("test1")); resource.getContents().add(company); CDOObject cdoObject = CDOUtil.getCDOObject(company); cdoObject.cdoWriteLock().lock(); CDOLockState lockState = cdoObject.cdoLockState(); assertEquals(transaction, lockState.getWriteLockOwner()); transaction.commit(); assertWriteLock(true, company); } public void testExplicitLockingAndUnlockingOfNewObject() throws Exception { Company company = getModel1Factory().createCompany(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); transaction.options().setAutoReleaseLocksEnabled(true); transaction.options().addAutoReleaseLocksExemptions(false, company); CDOResource resource = transaction.createResource(getResourcePath("test1")); resource.getContents().add(company); CDOObject cdoObject = CDOUtil.getCDOObject(company); cdoObject.cdoWriteLock().lock(); CDOLockState lockState = cdoObject.cdoLockState(); assertEquals(transaction, lockState.getWriteLockOwner()); cdoObject.cdoWriteLock().unlock(); lockState = cdoObject.cdoLockState(); assertNull(lockState.getWriteLockOwner()); transaction.commit(); assertWriteLock(false, company); } }