| /******************************************************************************* |
| * Copyright (c) 2012-2013 EclipseSource Muenchen GmbH 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: |
| ******************************************************************************/ |
| package org.eclipse.emf.emfstore.client.test.common.cases; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.fail; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.emf.emfstore.client.ESServer; |
| import org.eclipse.emf.emfstore.client.ESUsersession; |
| import org.eclipse.emf.emfstore.client.ESWorkspaceProvider; |
| import org.eclipse.emf.emfstore.client.exceptions.ESServerNotFoundException; |
| import org.eclipse.emf.emfstore.client.test.common.dsl.Delete; |
| import org.eclipse.emf.emfstore.client.test.common.util.ServerUtil; |
| import org.eclipse.emf.emfstore.internal.client.model.ESWorkspaceProviderImpl; |
| import org.eclipse.emf.emfstore.internal.client.model.ServerInfo; |
| import org.eclipse.emf.emfstore.internal.client.model.Usersession; |
| import org.eclipse.emf.emfstore.internal.client.model.connectionmanager.KeyStoreManager; |
| import org.eclipse.emf.emfstore.internal.client.model.impl.api.ESServerImpl; |
| import org.eclipse.emf.emfstore.internal.client.model.impl.api.ESUsersessionImpl; |
| import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommandWithException; |
| import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACOrgUnitId; |
| import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACUser; |
| import org.eclipse.emf.emfstore.server.exceptions.ESException; |
| import org.junit.After; |
| import org.junit.Before; |
| |
| /** |
| * A test case that involves a started server and an already logged-in user. |
| * The user to be logged can be specified via the {@link #getUser()} and {@link #getPassword()} methods. |
| * If the user does not exists it will be created. <br/> |
| * <br/> |
| * <b>NOTE</b>: Remember to call {@code startEMFStore()} and {@code stopEMFStore()} respectively in |
| * {@code beforeClass()} and {@code afterClass()}. |
| * |
| * @author emueller |
| * |
| */ |
| public abstract class ESTestWithLoggedInUserMock extends ESTestWithMockServer { |
| |
| private ESServer server; |
| private ESUsersession usersession; |
| private ESUsersession superSession; |
| private ACOrgUnitId userId; |
| |
| public ESServer getServer() { |
| return server; |
| } |
| |
| public ServerInfo getServerInfo() { |
| final ESServerImpl serverImpl = ESServerImpl.class.cast(server); |
| return serverImpl.toInternalAPI(); |
| } |
| |
| public ESUsersession getUsersession() { |
| return usersession; |
| } |
| |
| public ESUsersession getSuperUsersession() { |
| return superSession; |
| } |
| |
| /** |
| * Returns the name of the user that is used by the test. |
| * |
| * @return the user name |
| */ |
| public String getUser() { |
| return ServerUtil.superUser(); |
| } |
| |
| /** |
| * Returns the password of the user that is used by the test to login the user. |
| * |
| * @return the password to be used to perform the login. |
| */ |
| public String getPassword() { |
| return ServerUtil.superUserPassword(); |
| } |
| |
| @Override |
| @Before |
| public void before() { |
| super.before(); |
| server = ESServer.FACTORY.createServer( |
| ServerUtil.localhost(), |
| ServerUtil.defaultPort(), |
| KeyStoreManager.DEFAULT_CERTIFICATE); |
| |
| try { |
| superSession = server.login( |
| ServerUtil.superUser(), ServerUtil.superUserPassword()); |
| Delete.allRemoteProjects(server, superSession); |
| |
| if (isSuperUser()) { |
| usersession = superSession; |
| return; |
| } |
| |
| // if client requests other user, make sure that user exists |
| if (!userExists(getServerInfo(), superSession, getUser())) { |
| userId = ServerUtil.createUser(superSession, getUser()); |
| ServerUtil.changeUser(superSession, userId, getUser(), getPassword()); |
| } |
| |
| usersession = server.login( |
| getUser(), |
| getPassword()); |
| |
| } catch (final ESException e) { |
| fail(e.getMessage()); |
| } |
| assertEquals(usersession, server.getLastUsersession()); |
| } |
| |
| /** |
| * @return |
| */ |
| private boolean isSuperUser() { |
| return getUser().equals(ServerUtil.superUser()); |
| } |
| |
| public boolean userExists(ServerInfo serverInfo, ESUsersession session, String name) throws ESException { |
| final ACUser user = ServerUtil.getUser(session, name); |
| return user != null; |
| } |
| |
| @Override |
| @After |
| public void after() { |
| super.after(); |
| if (!isSuperUser()) { |
| try { |
| ESWorkspaceProviderImpl.getInstance().getAdminConnectionManager().deleteUser( |
| ((ESUsersessionImpl) getSuperUsersession()).toInternalAPI().getSessionId(), |
| userId); |
| } catch (final ESException ex) { |
| fail(ex.getMessage()); |
| } |
| } |
| |
| final EMFStoreCommandWithException<ESException> cmd = new EMFStoreCommandWithException<ESException>() { |
| @Override |
| protected void doRun() { |
| ((ESServerImpl) server).toInternalAPI().setLastUsersession(null); |
| ((ESUsersessionImpl) usersession).setServer(null); |
| ((ESUsersessionImpl) superSession).setServer(null); |
| // setUp might have failed |
| if (usersession != null && usersession.isLoggedIn()) { |
| try { |
| logoutSessions(); |
| |
| final Iterator<Usersession> iter = ESWorkspaceProviderImpl.getInstance().getWorkspace() |
| .toInternalAPI() |
| .getUsersessions().iterator(); |
| while (iter.hasNext()) { |
| if (iter.next().getServerInfo() == ((ESServerImpl) server).toInternalAPI()) { |
| iter.remove(); |
| } |
| } |
| ESWorkspaceProvider.INSTANCE.getWorkspace().removeServer(server); |
| } catch (final ESException e) { |
| setException(e); |
| } catch (final ESServerNotFoundException e) { |
| fail(e.getMessage()); |
| } |
| } |
| } |
| }; |
| |
| cmd.run(); |
| |
| if (cmd.hasException()) { |
| fail(cmd.getException().getMessage()); |
| } |
| |
| super.after(); |
| } |
| |
| /** |
| * @throws ESException |
| */ |
| private void logoutSessions() throws ESException { |
| superSession.logout(); |
| if (!isSuperUser()) { |
| usersession.logout(); |
| } |
| } |
| } |