/** * <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 java.util.HashMap; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.emfstore.client.model.Configuration; import org.eclipse.emf.emfstore.client.model.ServerInfo; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; import org.eclipse.emf.emfstore.client.model.connectionmanager.ConnectionManager; import org.eclipse.emf.emfstore.client.model.connectionmanager.KeyStoreManager; import org.eclipse.emf.emfstore.client.test.SetupHelper; import org.eclipse.emf.emfstore.common.model.ModelFactory; 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.ServerConfiguration; import org.eclipse.emf.emfstore.server.exceptions.EmfStoreException; import org.eclipse.emf.emfstore.server.exceptions.InvalidInputException; import org.eclipse.emf.emfstore.server.model.ProjectId; import org.eclipse.emf.emfstore.server.model.ProjectInfo; import org.eclipse.emf.emfstore.server.model.SessionId; import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnitId; import org.eclipse.emf.emfstore.server.model.accesscontrol.AccesscontrolFactory; import org.eclipse.emf.emfstore.server.model.accesscontrol.roles.RolesPackage; import org.eclipse.emf.emfstore.server.model.versioning.ChangePackage; import org.eclipse.emf.emfstore.server.model.versioning.HistoryQuery; import org.eclipse.emf.emfstore.server.model.versioning.LogMessage; 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.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; /** * Superclass for server tests. * * @author wesendon */ public class ServerTests { /** * @return the sessionId */ public static SessionId getSessionId() { return sessionId; } /** * @return the connectionManager */ public static ConnectionManager getConnectionManager() { return connectionManager; } /** * @return the generatedProject */ public static Project getGeneratedProject() { return generatedProject; } /** * @return the generatedProjectId */ public static ProjectId getGeneratedProjectId() { return generatedProjectId; } public static ProjectInfo getProjectInfo() { return projectInfo; } /** * @return the projectsOnServerBeforeTest */ public static int getProjectsOnServerBeforeTest() { return projectsOnServerBeforeTest; } /** * @return the generatedProjectVersion */ public static PrimaryVersionSpec getGeneratedProjectVersion() { return generatedProjectVersion; } private static SessionId sessionId; private static ConnectionManager connectionManager; private static Project generatedProject; private static ProjectId generatedProjectId; private static ProjectInfo projectInfo; private static int projectsOnServerBeforeTest; private static PrimaryVersionSpec generatedProjectVersion; private static HashMap<Class<?>, Object> arguments; /** * Start server and gain sessionid. * * @throws EmfStoreException in case of failure */ @BeforeClass public static void setUpBeforeClass() throws EmfStoreException { ServerConfiguration.setTesting(true); SetupHelper.addUserFileToServer(false); SetupHelper.startSever(); connectionManager = WorkspaceManager.getInstance().getConnectionManager(); login(SetupHelper.getServerInfo()); // FIXME: readd when new project generator is available generatedProject = ModelFactory.eINSTANCE.createProject(); projectsOnServerBeforeTest = 1; initArguments(); } /** * sets users on server. * * @throws EmfStoreException in case of failure */ public static void setupUsers() throws EmfStoreException { try { ACOrgUnitId orgUnitId = SetupHelper.createUserOnServer(getSessionId(), "reader"); SetupHelper.setUsersRole(getSessionId(), orgUnitId, RolesPackage.eINSTANCE.getReaderRole(), getGeneratedProjectId()); orgUnitId = SetupHelper.createUserOnServer(getSessionId(), "writer1"); SetupHelper.setUsersRole(getSessionId(), orgUnitId, RolesPackage.eINSTANCE.getWriterRole(), getGeneratedProjectId()); orgUnitId = SetupHelper.createUserOnServer(getSessionId(), "writer2"); SetupHelper.setUsersRole(getSessionId(), orgUnitId, RolesPackage.eINSTANCE.getWriterRole(), getGeneratedProjectId()); orgUnitId = SetupHelper.createUserOnServer(getSessionId(), "projectadmin"); SetupHelper.setUsersRole(getSessionId(), orgUnitId, RolesPackage.eINSTANCE.getProjectAdminRole(), getGeneratedProjectId()); } catch (InvalidInputException e) { // do nothing, user already exists. } } /** * Sets the connection manager. * * @param cm connection manager */ protected static void setConnectionManager(ConnectionManager cm) { connectionManager = cm; } /** * @param serverInfo serverinfo * @throws EmfStoreException in case of failure */ protected static void login(ServerInfo serverInfo) throws EmfStoreException { sessionId = login(serverInfo, "super", "super"); WorkspaceManager.getInstance().getAdminConnectionManager().initConnection(serverInfo, sessionId); } /** * @param serverInfo serverinfo * @param username username * @param password password * @return sessionId * @throws EmfStoreException in case of failure */ protected static SessionId login(ServerInfo serverInfo, String username, String password) throws EmfStoreException { return connectionManager.logIn(username, KeyStoreManager.getInstance().encrypt(password, serverInfo), serverInfo, Configuration.getClientVersion()); } /** * Shuts down server after testing. */ @AfterClass public static void tearDownAfterClass() { SetupHelper.stopServer(); // SetupHelper.cleanupServer(); } /** * Compares two projects. * * @param expected expected * @param compare to be compared */ public static void assertEqual(Project expected, Project compare) { try { if (!ModelUtil.eObjectToString(expected).equals(ModelUtil.eObjectToString(compare))) { throw new AssertionError("Projects are not equal."); } } catch (SerializationException e) { throw new AssertionError("Couldn't compare projects."); } } /** * Adds a project to the server before test. * * @throws EmfStoreException in case of failure */ @Before public void beforeTest() throws EmfStoreException { projectInfo = connectionManager.createProject(sessionId, "initialProject", "TestProject", SetupHelper.createLogMessage("super", "a logmessage"), generatedProject); generatedProjectId = projectInfo.getProjectId(); generatedProjectVersion = projectInfo.getVersion(); setupUsers(); } /** * Removes all projects from server after test. * * @throws EmfStoreException in case of failure */ @After public void afterTest() throws EmfStoreException { for (ProjectInfo info : connectionManager.getProjectList(sessionId)) { connectionManager.deleteProject(sessionId, info.getProjectId(), true); } } /** * Creates a historyquery. * * @param ver1 source * @param ver2 target * @return historyquery */ public static HistoryQuery createHistoryQuery(PrimaryVersionSpec ver1, PrimaryVersionSpec ver2) { HistoryQuery historyQuery = VersioningFactory.eINSTANCE.createHistoryQuery(); historyQuery.setSource(EcoreUtil.copy(ver1)); historyQuery.setTarget(EcoreUtil.copy(ver2)); return historyQuery; } private static void initArguments() { arguments = new HashMap<Class<?>, Object>(); arguments.put(boolean.class, false); arguments.put(String.class, new String()); arguments.put(SessionId.class, EcoreUtil.copy(getSessionId())); arguments.put(ProjectId.class, org.eclipse.emf.emfstore.server.model.ModelFactory.eINSTANCE.createProjectId()); arguments.put(PrimaryVersionSpec.class, VersioningFactory.eINSTANCE.createPrimaryVersionSpec()); arguments.put(VersionSpec.class, VersioningFactory.eINSTANCE.createPrimaryVersionSpec()); arguments.put(TagVersionSpec.class, VersioningFactory.eINSTANCE.createTagVersionSpec()); arguments.put(LogMessage.class, VersioningFactory.eINSTANCE.createLogMessage()); arguments.put(Project.class, ModelFactory.eINSTANCE.createProject()); arguments.put(ChangePackage.class, VersioningFactory.eINSTANCE.createChangePackage()); arguments.put(HistoryQuery.class, VersioningFactory.eINSTANCE.createHistoryQuery()); arguments.put(ChangePackage.class, VersioningFactory.eINSTANCE.createChangePackage()); arguments.put(ACOrgUnitId.class, AccesscontrolFactory.eINSTANCE.createACOrgUnitId()); } /** * Get a default Parameter. * * @param clazz parameter type * @param b if false, null is returned * @return parameter */ protected static Object getParameter(Class<?> clazz, boolean b) { if (clazz.equals(boolean.class)) { return false; } return (b) ? arguments.get(clazz) : null; } }