/******************************************************************************* * 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.api.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; import java.util.List; import java.util.concurrent.Callable; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.emfstore.client.ESRemoteProject; import org.eclipse.emf.emfstore.client.ESUsersession; import org.eclipse.emf.emfstore.client.ESWorkspaceProvider; import org.eclipse.emf.emfstore.client.test.common.cases.ESTestWithLoggedInUserMock; import org.eclipse.emf.emfstore.client.test.common.dsl.Delete; import org.eclipse.emf.emfstore.client.util.RunESCommand; 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.server.exceptions.FatalESException; import org.eclipse.emf.emfstore.server.exceptions.ESException; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class ServerCommunicationTest extends ESTestWithLoggedInUserMock { private static final String REMOTE_PROJECT_NAME = "MyProject2"; //$NON-NLS-1$ private static final String PROJECT_NAME = "MyProject"; //$NON-NLS-1$ @Override @After public void after() { try { Delete.allRemoteProjects(getServer(), getUsersession()); } catch (final ESException ex) { fail(ex.getMessage()); } super.after(); } @BeforeClass public static void beforeClass() { startEMFStore(); } @AfterClass public static void tearDownClass() { stopEMFStore(); for (final ServerInfo serverInfo : ESWorkspaceProviderImpl.getInstance().getWorkspace().toInternalAPI() .getServerInfos()) { final Usersession lastUsersession = serverInfo.getLastUsersession(); RunESCommand.run(new Callable<Void>() { public Void call() throws Exception { if (lastUsersession != null) { lastUsersession.setServerInfo(null); } serverInfo.setLastUsersession(null); return null; } }); } RunESCommand.run(new Callable<Void>() { public Void call() throws Exception { ESWorkspaceProviderImpl.getInstance().getWorkspace().toInternalAPI().getServerInfos().clear(); ESWorkspaceProviderImpl.getInstance().getWorkspace().toInternalAPI().save(); return null; } }); } protected static void deleteRemoteProjects(ESUsersession usersession) throws IOException, FatalESException, ESException { for (final ESRemoteProject project : ESWorkspaceProvider.INSTANCE.getWorkspace().getServers().get(0) .getRemoteProjects(usersession)) { project.delete(usersession, new NullProgressMonitor()); } } @Test public void testUsersession() { assertEquals(getUsersession(), getServer().getLastUsersession()); } @Test public void testLogin() { assertTrue(getUsersession().isLoggedIn()); } @Test public void testLogout() { assertTrue(getUsersession().isLoggedIn()); try { getUsersession().logout(); assertFalse(getUsersession().isLoggedIn()); } catch (final ESException e) { fail(e.getMessage()); } } @Test public void testCreateRemoteProject() { try { final ESRemoteProject remoteProject = getServer().createRemoteProject(getUsersession(), PROJECT_NAME, new NullProgressMonitor()); assertNotNull(remoteProject); assertEquals(PROJECT_NAME, remoteProject.getProjectName()); final List<ESRemoteProject> remoteProjects = getServer().getRemoteProjects(); assertEquals(1, remoteProjects.size()); // we expect a copy to be returned assertFalse(remoteProject.equals(remoteProjects.get(0))); assertEquals(remoteProject.getProjectName(), remoteProjects.get(0).getProjectName()); } catch (final ESException e) { fail(e.getMessage()); } } @Test public void testCreateRemoteProjectWithoutUsersession() { try { final ESRemoteProject remoteProject = getServer().createRemoteProject(PROJECT_NAME, new NullProgressMonitor()); assertNotNull(remoteProject); assertEquals(PROJECT_NAME, remoteProject.getProjectName()); final List<? extends ESRemoteProject> remoteProjects = getServer().getRemoteProjects(); assertEquals(1, remoteProjects.size()); // we expect a copy to be returned assertFalse(remoteProject.equals(remoteProjects.get(0))); assertEquals(remoteProject.getProjectName(), remoteProjects.get(0).getProjectName()); } catch (final ESException e) { fail(e.getMessage()); } } @Test public void testDeleteRemoteProject() { try { final ESRemoteProject remoteProject = getServer().createRemoteProject(getUsersession(), PROJECT_NAME, new NullProgressMonitor()); assertEquals(1, getServer().getRemoteProjects().size()); remoteProject.delete(new NullProgressMonitor()); assertEquals(0, getServer().getRemoteProjects().size()); } catch (final ESException e) { fail(e.getMessage()); } } @Test public void testGetRemoteProjectsFromServer() { try { final ESRemoteProject project = getServer().createRemoteProject(getUsersession(), PROJECT_NAME, new NullProgressMonitor()); getServer().createRemoteProject(getUsersession(), REMOTE_PROJECT_NAME, new NullProgressMonitor()); assertEquals(2, getServer().getRemoteProjects().size()); getServer().getRemoteProjects().add(project); assertEquals(2, getServer().getRemoteProjects().size()); } catch (final ESException e) { fail(e.getMessage()); } } }