blob: d2addcb1c9acf3635b3389b0ae41047eca2f352d [file] [log] [blame]
/*******************************************************************************
* Copyright 2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under 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.client.test.server;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.emfstore.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.client.model.WorkspaceManager;
import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand;
import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommandWithResult;
import org.eclipse.emf.emfstore.client.test.SetupHelper;
import org.eclipse.emf.emfstore.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.common.model.util.SerializationException;
import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException;
import org.eclipse.emf.emfstore.server.exceptions.UnknownSessionException;
import org.eclipse.emf.emfstore.server.model.ProjectInfo;
import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage;
import org.eclipse.emf.emfstore.server.model.versioning.HistoryInfo;
import org.eclipse.emf.emfstore.server.model.versioning.PrimaryVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.TagVersionSpec;
import org.eclipse.emf.emfstore.server.model.versioning.VersioningFactory;
import org.eclipse.emf.emfstore.server.model.versioning.operations.AttributeOperation;
import org.eclipse.emf.emfstore.server.model.versioning.operations.OperationsFactory;
import org.junit.Assert;
import org.junit.Test;
/**
* This TestCase tests all methods in the main {@link org.unicase.emfstore.EmfStore} interface.
*
* @author wesendon
*/
public class ServerInterfaceTest extends ServerTests {
/**
* Gets the list of all projects.
*
* @throws EmfStoreException in case of failure
*/
@Test
public void getProjectListTest() throws EmfStoreException {
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest());
}
/**
* Gets a project from the server.
*
* @throws EmfStoreException in case of failure
*/
/**
* @throws EmfStoreException
*/
@Test
public void getProjectTest() throws EmfStoreException {
ProjectSpace projectSpace2 = new EMFStoreCommandWithResult<ProjectSpace>() {
@Override
protected ProjectSpace doRun() {
try {
return WorkspaceManager
.getInstance()
.getCurrentWorkspace()
.checkout(TestSessionProvider.getInstance().getDefaultUsersession(), getProjectInfo(),
new NullProgressMonitor());
} catch (EmfStoreException e) {
Assert.fail();
return null;
}
}
}.run(false);
assertEqual(getProject(), projectSpace2.getProject());
}
/**
* Creates a project on the server and then deletes it.
*
* @see org.unicase.emfstore.EmfStore#createProject(org.eclipse.emf.emfstore.server.model.SessionId, String, String,
* org.eclipse.emf.emfstore.server.model.versioning.LogMessage)
* @see org.unicase.emfstore.EmfStore#getProjectList(org.eclipse.emf.emfstore.server.model.SessionId)
* @throws EmfStoreException in case of failure.
*/
/**
* @throws EmfStoreException
*/
@Test
public void createEmptyProjectTest() throws EmfStoreException {
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest());
new EMFStoreCommand() {
@Override
protected void doRun() {
ProjectSpace projectSpace = WorkspaceManager.getInstance().getCurrentWorkspace()
.createLocalProject("createEmptyProjectAndDelete", "TestProject");
try {
projectSpace.shareProject();
} catch (EmfStoreException e) {
Assert.fail();
}
}
}.run(false);
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest() + 1);
}
/**
* Creates a project, shares it with the server and then deletes it.
*
* @see org.unicase.emfstore.EmfStore#createProject(org.eclipse.emf.emfstore.server.model.SessionId, String, String,
* org.eclipse.emf.emfstore.server.model.versioning.LogMessage, Project)
* @see org.unicase.emfstore.EmfStore#getProjectList(org.eclipse.emf.emfstore.server.model.SessionId)
* @throws EmfStoreException in case of failure.
*/
/**
* @throws EmfStoreException
*/
@Test
public void shareProjectTest() throws EmfStoreException {
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest());
ProjectSpace projectSpace2 = new EMFStoreCommandWithResult<ProjectSpace>() {
@Override
protected ProjectSpace doRun() {
ProjectSpace projectSpace = WorkspaceManager.getInstance().getCurrentWorkspace()
.createLocalProject("createEmptyProjectAndDelete", "TestProject");
try {
projectSpace.shareProject();
return projectSpace;
} catch (EmfStoreException e) {
Assert.fail();
return null;
}
}
}.run(false);
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest() + 1);
assertNotNull(getProject());
assertEqual(getProject(), projectSpace2.getProject());
}
/**
* Deletes a project on the server.
*
* @throws EmfStoreException in case of failure
*/
/**
* @throws EmfStoreException
*/
@Test
public void deleteProjectTest() throws EmfStoreException {
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest());
WorkspaceManager.getInstance().getCurrentWorkspace().deleteRemoteProject(getServerInfo(), getProjectId(), true);
try {
List<ProjectInfo> remoteProjectList = WorkspaceManager.getInstance().getCurrentWorkspace()
.getRemoteProjectList(getServerInfo());
for (ProjectInfo projectInfo : remoteProjectList) {
if (projectInfo.getProjectId() == getProjectId()) {
assertTrue(false);
}
}
assertTrue(true);
} catch (EmfStoreException e) {
assertTrue(true);
}
assertTrue(WorkspaceManager.getInstance().getCurrentWorkspace().getRemoteProjectList(getServerInfo()).size() == getProjectsOnServerBeforeTest() - 1);
}
/**
* Resolves version spec.
*
* @throws EmfStoreException in case of failure.
*/
/**
* @throws EmfStoreException
*/
@Test
public void resolveVersionSpecTest() throws EmfStoreException {
List<ProjectInfo> remoteProjectList = WorkspaceManager.getInstance().getCurrentWorkspace()
.getRemoteProjectList(getServerInfo());
boolean sameVersionSpec = false;
for (ProjectInfo projectInfo : remoteProjectList) {
if (projectInfo.getVersion().equals(getProjectVersion())) {
sameVersionSpec = true;
}
}
if (sameVersionSpec) {
assertTrue(true);
} else {
assertTrue(false);
}
}
/**
* Creates a version.
*
* @throws EmfStoreException in case of failure
*/
/**
* @throws EmfStoreException
*/
@Test
public void createVersionTest() throws EmfStoreException {
PrimaryVersionSpec createdVersion = new EMFStoreCommandWithResult<PrimaryVersionSpec>() {
@Override
protected PrimaryVersionSpec doRun() {
getProject().addModelElement(
org.eclipse.emf.emfstore.server.model.ModelFactory.eINSTANCE.createProjectHistory());
try {
return getProjectSpace().commit(SetupHelper.createLogMessage("bla", "blablba"), null, null);
} catch (EmfStoreException e) {
throw new RuntimeException(e);
}
}
}.run(false);
PrimaryVersionSpec baseVersion = getProjectSpace().getBaseVersion();
assertTrue(baseVersion.equals(createdVersion));
}
/**
* Gets changes, which should be empty.
*
* @throws EmfStoreException in case of failure
*/
/**
* @throws EmfStoreException
*/
@Test
public void getEmptyChangesTest() throws EmfStoreException {
List<ChangePackage> changes = getProjectSpace().getChanges(SetupHelper.createPrimaryVersionSpec(0),
getProjectVersion());
assertTrue(changes.size() == 0);
}
/**
* Gets changes.
*
* @throws EmfStoreException in case of failure
* @throws SerializationException in case of failure
*/
/**
* @throws EmfStoreException
* @throws SerializationException
*/
@Test
public void getChangesTest() throws EmfStoreException, SerializationException {
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(
org.eclipse.emf.emfstore.server.model.ModelFactory.eINSTANCE.createProjectHistory());
}
}.run(false);
final AttributeOperation attributeOperation = OperationsFactory.eINSTANCE.createAttributeOperation();
attributeOperation.setModelElementId(getProject().getModelElementId(
(EObject) getProject().getAllModelElements().toArray()[0]));
attributeOperation.setFeatureName("name");
attributeOperation.setNewValue("nameeee");
PrimaryVersionSpec resolvedVersionSpec = projectSpace.getBaseVersion();
PrimaryVersionSpec versionSpec = new EMFStoreCommandWithResult<PrimaryVersionSpec>() {
@Override
protected PrimaryVersionSpec doRun() {
getProjectSpace().getOperations().add(attributeOperation);
try {
return getProjectSpace().commit(SetupHelper.createLogMessage("bla", "blablba"), null, null);
} catch (EmfStoreException e) {
throw new RuntimeException(e);
}
}
}.run(false);
List<ChangePackage> changes = getProjectSpace().getChanges(resolvedVersionSpec, versionSpec);
assertTrue(changes.size() == 1);
for (ChangePackage cp : changes) {
assertTrue(cp.getOperations().size() == 2);
assertTrue(ModelUtil.areEqual(cp.getOperations().get(1), attributeOperation));
}
}
/**
* Gets a historyInfo.
*
* @throws EmfStoreException in case of failure
*/
/**
* @throws EmfStoreException
*/
@Test
public void getHistoryInfoTest() throws EmfStoreException {
final String logMessage = "historyInfo";
PrimaryVersionSpec createdVersion = new EMFStoreCommandWithResult<PrimaryVersionSpec>() {
@Override
protected PrimaryVersionSpec doRun() {
getProject().addModelElement(
org.eclipse.emf.emfstore.server.model.ModelFactory.eINSTANCE.createProjectHistory());
try {
return getProjectSpace().commit(SetupHelper.createLogMessage("bla", logMessage), null, null);
} catch (EmfStoreException e) {
throw new RuntimeException(e);
}
}
}.run(false);
List<HistoryInfo> historyInfo = getProjectSpace().getHistoryInfo(
createHistoryQuery(createdVersion, createdVersion));
assertTrue(historyInfo.size() == 1);
// assertTrue(historyInfo.get(0).getLogMessage().getMessage().equals(logMessage));
}
/**
* Sets a tag on the head revision.
*
* @throws EmfStoreException in case of failure
*/
@Test
public void addTagTest() throws EmfStoreException {
String tagName = "testValue";
TagVersionSpec tag = VersioningFactory.eINSTANCE.createTagVersionSpec();
tag.setName(tagName);
getProjectSpace().addTag(getProjectVersion(), tag);
List<HistoryInfo> historyInfo = getProjectSpace().getHistoryInfo(
createHistoryQuery(getProjectVersion(), getProjectVersion()));
assertTrue(historyInfo.size() == 1);
EList<TagVersionSpec> tagSpecs = historyInfo.get(0).getTagSpecs();
assertEquals(3, tagSpecs.size());
assertEquals("HEAD", tagSpecs.get(0).getName());
assertEquals("HEAD: trunk", tagSpecs.get(1).getName());
assertEquals(tagName, tagSpecs.get(2).getName());
}
/**
* Removes a tag.
*
* @throws EmfStoreException in case of failure.
*/
/**
* @throws EmfStoreException
*/
@Test
public void removeTagTest() throws EmfStoreException {
String tagName = "testValue";
TagVersionSpec tag = VersioningFactory.eINSTANCE.createTagVersionSpec();
tag.setName(tagName);
getProjectSpace().addTag(getProjectVersion(), tag);
getProjectSpace().removeTag(getProjectVersion(), tag);
List<HistoryInfo> historyInfo = getProjectSpace().getHistoryInfo(
createHistoryQuery(getProjectVersion(), getProjectVersion()));
assertTrue(historyInfo.size() == 1);
EList<TagVersionSpec> tagSpecs = historyInfo.get(0).getTagSpecs();
assertEquals(2, tagSpecs.size());
assertEquals("HEAD", tagSpecs.get(0).getName());
assertEquals("HEAD: trunk", tagSpecs.get(1).getName());
}
/**
* Deletes session on server and creates new one.
*
* @throws EmfStoreException in case of failure
*/
// @Test
/**
* @throws EmfStoreException
*/
public void logOutTest() throws EmfStoreException {
Assert.assertNotNull(getConnectionManager().resolveUser(getSessionId(), null));
getConnectionManager().logout(getSessionId());
try {
getConnectionManager().resolveUser(getSessionId(), null);
// if no exception is thrown at this point, the test fails.
Assert.assertTrue(false);
} catch (UnknownSessionException e) {
Assert.assertTrue(true);
}
// relogin for next test
login();
Assert.assertNotNull(getConnectionManager().resolveUser(getSessionId(), null));
}
}