/******************************************************************************* | |
* Copyright (c) 2008-2011 Chair for Applied Software Engineering, | |
* Technische Universitaet Muenchen. | |
* 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: | |
******************************************************************************/ | |
package org.eclipse.emf.emfstore.server.test; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertNotNull; | |
import static org.junit.Assert.fail; | |
import java.io.IOException; | |
import org.eclipse.emf.emfstore.internal.client.model.ModelPackage; | |
import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace; | |
import org.eclipse.emf.emfstore.internal.client.model.exceptions.EMFStorePropertiesOutdatedException; | |
import org.eclipse.emf.emfstore.internal.client.model.impl.ProjectSpaceBase; | |
import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommand; | |
import org.eclipse.emf.emfstore.internal.client.properties.PropertyManager; | |
import org.eclipse.emf.emfstore.internal.common.model.PropertyStringValue; | |
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil; | |
import org.eclipse.emf.emfstore.internal.server.exceptions.AccessControlException; | |
import org.eclipse.emf.emfstore.server.exceptions.ESException; | |
import org.eclipse.emf.emfstore.test.model.TestmodelFactory; | |
import org.junit.AfterClass; | |
import org.junit.Assert; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
public class PropertiesTest extends TransmissionTests { | |
private static final String SECOND_TEST_PROP = "SecondTest"; //$NON-NLS-1$ | |
private static final String FIRST_PROP_KEY = "FirstPropKey"; //$NON-NLS-1$ | |
private static PropertyManager propertyManager1; | |
private static PropertyManager propertyManager2; | |
@BeforeClass | |
public static void beforeClass() { | |
startEMFStore(); | |
} | |
@AfterClass | |
public static void afterClass() { | |
stopEMFStore(); | |
} | |
@Test | |
public void testSharedProperties() throws ESException { | |
propertyManager1 = getProjectSpace1().getPropertyManager(); | |
propertyManager2 = getProjectSpace2().getPropertyManager(); | |
new EMFStoreCommand() { | |
@Override | |
protected void doRun() { | |
propertyManager1.setSharedStringProperty(FIRST_PROP_KEY, "test1"); //$NON-NLS-1$ | |
propertyManager2.setSharedStringProperty(SECOND_TEST_PROP, "test2"); //$NON-NLS-1$ | |
try { | |
propertyManager1.synchronizeSharedProperties(); | |
propertyManager2.synchronizeSharedProperties(); | |
propertyManager1.synchronizeSharedProperties(); | |
} catch (final ESException e) { | |
throw new RuntimeException(e); | |
} catch (final EMFStorePropertiesOutdatedException e) { | |
throw new RuntimeException(e); | |
} | |
} | |
}.run(false); | |
// 1. Test, ob transmit funktioniert | |
Assert.assertEquals("test1", propertyManager1.getSharedStringProperty(FIRST_PROP_KEY)); //$NON-NLS-1$ | |
Assert.assertEquals("test1", propertyManager2.getSharedStringProperty(FIRST_PROP_KEY)); //$NON-NLS-1$ | |
Assert.assertEquals("test2", propertyManager1.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
Assert.assertEquals("test2", propertyManager2.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
Assert.assertEquals(propertyManager1.getSharedStringProperty(FIRST_PROP_KEY), | |
propertyManager2.getSharedStringProperty(FIRST_PROP_KEY)); | |
Assert.assertEquals(propertyManager2.getSharedStringProperty(SECOND_TEST_PROP), | |
propertyManager1.getSharedStringProperty(SECOND_TEST_PROP)); | |
new EMFStoreCommand() { | |
@Override | |
protected void doRun() { | |
propertyManager1.setSharedStringProperty(SECOND_TEST_PROP, "test4"); //$NON-NLS-1$ | |
propertyManager2.setSharedStringProperty(SECOND_TEST_PROP, "test5"); //$NON-NLS-1$ | |
try { | |
propertyManager1.synchronizeSharedProperties(); | |
propertyManager2.synchronizeSharedProperties(); | |
propertyManager1.synchronizeSharedProperties(); | |
} catch (final ESException e) { | |
throw new RuntimeException(e); | |
} catch (final EMFStorePropertiesOutdatedException e) { | |
throw new RuntimeException(e); | |
} | |
} | |
}.run(false); | |
// 2. Funktioniert update | |
Assert.assertEquals("test5", propertyManager1.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
Assert.assertEquals("test5", propertyManager2.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
} | |
@Test | |
public void testVersionedProperty() { | |
propertyManager1 = getProjectSpace1().getPropertyManager(); | |
propertyManager2 = getProjectSpace2().getPropertyManager(); | |
new EMFStoreCommand() { | |
@Override | |
protected void doRun() { | |
propertyManager1.setSharedVersionedStringProperty(SECOND_TEST_PROP, "test1"); //$NON-NLS-1$ | |
propertyManager2.setSharedVersionedStringProperty(SECOND_TEST_PROP, "test2"); //$NON-NLS-1$ | |
try { | |
propertyManager1.synchronizeSharedProperties(); | |
} catch (final AccessControlException e) { | |
fail(e.getMessage()); | |
} catch (final ESException e) { | |
fail(e.getMessage()); | |
} catch (final EMFStorePropertiesOutdatedException e) { | |
fail(e.getMessage()); | |
} | |
try { | |
propertyManager2.synchronizeSharedProperties(); | |
fail(); | |
} catch (final ESException e) { | |
fail(); | |
} catch (final EMFStorePropertiesOutdatedException e) { | |
assertEquals(1, e.getOutdatedProperties().size()); | |
assertEquals( | |
propertyManager1.getSharedStringProperty(SECOND_TEST_PROP), | |
((PropertyStringValue) e.getOutdatedProperties().get(0).getValue()).getValue()); | |
} | |
} | |
}.run(false); | |
// check if rollback succeeded | |
Assert.assertEquals("test1", propertyManager1.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
Assert.assertEquals("test1", propertyManager2.getSharedStringProperty(SECOND_TEST_PROP)); //$NON-NLS-1$ | |
} | |
@Test | |
public void testLocalProperties() throws IOException { | |
new EMFStoreCommand() { | |
@Override | |
protected void doRun() { | |
getProjectSpace1().getPropertyManager().setLocalProperty("foo", //$NON-NLS-1$ | |
TestmodelFactory.eINSTANCE.createTestElement()); | |
} | |
}.run(false); | |
((ProjectSpaceBase) getProjectSpace1()).save(); | |
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource( | |
ModelPackage.eINSTANCE.getProjectSpace(), | |
getProjectSpace1().eResource().getURI(), false); | |
assertNotNull(loadedProjectSpace.getPropertyManager().getLocalProperty("foo")); //$NON-NLS-1$ | |
} | |
} |