/** * <copyright> Copyright (c) 2008-2009 Jonas Helming, Maximilian Koegel. 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 </copyright> */ package org.eclipse.emf.emfstore.client.test.server; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.emfstore.client.test.SetupHelper; import org.eclipse.emf.emfstore.common.model.Project; 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.VersionSpec; 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 { /** * If the user is logged in, the result of resolve user mustn't be null. * * @see org.unicase.emfstore.EmfStore#resolveUser(org.eclipse.emf.emfstore.server.model.SessionId, * org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnitId) * @throws EmfStoreException in case of failure */ @Test public void resolveUserTest() throws EmfStoreException { assertTrue(getConnectionManager().resolveUser(getSessionId(), null) != null); // TODO: test with orgunitid argument } /** * Gets the list of all projects. * * @throws EmfStoreException in case of failure */ @Test public void getProjectListTest() throws EmfStoreException { assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest()); } /** * Gets a project from the server. * * @throws EmfStoreException in case of failure */ @Test public void getProjectTest() throws EmfStoreException { Project project = getConnectionManager().getProject(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); assertEqual(getGeneratedProject(), project); } /** * 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. */ @Test public void createEmptyProjectTest() throws EmfStoreException { assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest()); getConnectionManager().createEmptyProject(getSessionId(), "createEmptyProjectAndDelete", "TestProject", SetupHelper.createLogMessage("super", "a logmessage")); assertTrue(getConnectionManager().getProjectList(getSessionId()).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. */ @Test public void shareProjectTest() throws EmfStoreException { assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest()); ProjectInfo projectInfo = getConnectionManager().createProject(getSessionId(), "createProjectAndDelete", "TestProject", SetupHelper.createLogMessage("super", "a logmessage"), getGeneratedProject()); assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest() + 1); assertNotNull(getGeneratedProject()); assertEqual(getGeneratedProject(), getConnectionManager().getProject(getSessionId(), projectInfo.getProjectId(), VersionSpec.HEAD_VERSION)); } /** * Deletes a project on the server. * * @throws EmfStoreException in case of failure */ @Test public void deleteProjectTest() throws EmfStoreException { assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest()); getConnectionManager().deleteProject(getSessionId(), getGeneratedProjectId(), false); try { getConnectionManager().getProject(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); assertTrue(false); } catch (EmfStoreException e) { assertTrue(true); } assertTrue(getConnectionManager().getProjectList(getSessionId()).size() == getProjectsOnServerBeforeTest() - 1); } /** * Resolves version spec. * * @throws EmfStoreException in case of failure. */ @Test public void resolveVersionSpecTest() throws EmfStoreException { PrimaryVersionSpec resolvedVersionSpec = getConnectionManager().resolveVersionSpec(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); assertTrue(resolvedVersionSpec.equals(getGeneratedProjectVersion())); } /** * Creates a version. * * @throws EmfStoreException in case of failure */ @Test public void createVersionTest() throws EmfStoreException { PrimaryVersionSpec resolvedVersionSpec = getConnectionManager().resolveVersionSpec(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); PrimaryVersionSpec createdVersion = getConnectionManager().createVersion(getSessionId(), getGeneratedProjectId(), resolvedVersionSpec, VersioningFactory.eINSTANCE.createChangePackage(), SetupHelper.createLogMessage("bla", "blablba")); resolvedVersionSpec = getConnectionManager().resolveVersionSpec(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); assertTrue(resolvedVersionSpec.equals(createdVersion)); } /** * Gets changes, which should be empty. * * @throws EmfStoreException in case of failure */ @Test public void getEmptyChangesTest() throws EmfStoreException { List<ChangePackage> changes = getConnectionManager().getChanges(getSessionId(), getGeneratedProjectId(), SetupHelper.createPrimaryVersionSpec(0), getGeneratedProjectVersion()); assertTrue(changes.size() == 0); } /** * Gets changes. * * @throws EmfStoreException in case of failure * @throws SerializationException in case of failure */ @Test public void getChangesTest() throws EmfStoreException, SerializationException { ChangePackage changePackage = VersioningFactory.eINSTANCE.createChangePackage(); AttributeOperation attributeOperation = OperationsFactory.eINSTANCE.createAttributeOperation(); attributeOperation.setModelElementId(getGeneratedProject().getModelElementId( (EObject) getGeneratedProject().getAllModelElements().toArray()[0])); attributeOperation.setFeatureName("name"); attributeOperation.setNewValue("nameeee"); changePackage.getOperations().add(attributeOperation); PrimaryVersionSpec resolvedVersionSpec = getConnectionManager().resolveVersionSpec(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); PrimaryVersionSpec versionSpec = getConnectionManager().createVersion(getSessionId(), getGeneratedProjectId(), resolvedVersionSpec, changePackage, SetupHelper.createLogMessage("", "")); List<ChangePackage> changes = getConnectionManager().getChanges(getSessionId(), getGeneratedProjectId(), resolvedVersionSpec, versionSpec); assertTrue(changes.size() == 1); for (ChangePackage cp : changes) { assertTrue(cp.getOperations().size() == 1); assertTrue(ModelUtil.eObjectToString(cp.getOperations().get(0)).equals( ModelUtil.eObjectToString(attributeOperation))); } } /** * Gets a historyInfo. * * @throws EmfStoreException in case of failure */ @Test public void getHistoryInfoTest() throws EmfStoreException { String logMessage = "historyInfo"; PrimaryVersionSpec resolvedVersionSpec = getConnectionManager().resolveVersionSpec(getSessionId(), getGeneratedProjectId(), VersionSpec.HEAD_VERSION); PrimaryVersionSpec createdVersion = getConnectionManager().createVersion(getSessionId(), getGeneratedProjectId(), resolvedVersionSpec, VersioningFactory.eINSTANCE.createChangePackage(), SetupHelper.createLogMessage("bla", logMessage)); List<HistoryInfo> historyInfo = getConnectionManager().getHistoryInfo(getSessionId(), getGeneratedProjectId(), 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); getConnectionManager().addTag(getSessionId(), getGeneratedProjectId(), getGeneratedProjectVersion(), tag); List<HistoryInfo> historyInfo = getConnectionManager().getHistoryInfo(getSessionId(), getGeneratedProjectId(), createHistoryQuery(getGeneratedProjectVersion(), getGeneratedProjectVersion())); assertTrue(historyInfo.size() == 1); for (TagVersionSpec tagVersionSpec : historyInfo.get(0).getTagSpecs()) { if (!tagVersionSpec.getName().equals("HEAD")) { assertTrue(tagVersionSpec.getName().equals(tagName)); } } } /** * Removes a tag. * * @throws EmfStoreException in case of failure. */ @Test public void removeTagTest() throws EmfStoreException { String tagName = "testValue"; TagVersionSpec tag = VersioningFactory.eINSTANCE.createTagVersionSpec(); tag.setName(tagName); getConnectionManager().addTag(getSessionId(), getGeneratedProjectId(), getGeneratedProjectVersion(), tag); getConnectionManager().removeTag(getSessionId(), getGeneratedProjectId(), getGeneratedProjectVersion(), tag); List<HistoryInfo> historyInfo = getConnectionManager().getHistoryInfo(getSessionId(), getGeneratedProjectId(), createHistoryQuery(getGeneratedProjectVersion(), getGeneratedProjectVersion())); assertTrue(historyInfo.size() == 1); for (TagVersionSpec tagVersionSpec : historyInfo.get(0).getTagSpecs()) { if (!tagVersionSpec.getName().equals("HEAD")) { assertTrue(tagVersionSpec.getName().equals(tagName)); } } } /** * Deletes session on server and creates new one. * * @throws EmfStoreException in case of failure */ @Test 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(SetupHelper.getServerInfo()); Assert.assertNotNull(getConnectionManager().resolveUser(getSessionId(), null)); } }