/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.maven.server.rmi; import org.eclipse.che.plugin.maven.server.MavenServerManager; import org.eclipse.che.plugin.maven.server.MavenServerWrapper; import org.eclipse.che.plugin.maven.server.core.MavenProgressNotifier; import org.eclipse.che.plugin.maven.server.execution.JavaParameters; import org.eclipse.che.maven.data.MavenArtifact; import org.eclipse.che.maven.data.MavenKey; import org.eclipse.che.maven.data.MavenModel; import org.eclipse.che.maven.data.MavenWorkspaceCache; import org.eclipse.che.maven.server.MavenProjectInfo; import org.eclipse.che.maven.server.MavenServerResult; import org.eclipse.che.maven.server.MavenTerminal; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; import java.io.Serializable; import java.rmi.RemoteException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; /** * @author Evgen Vidolob */ public class MavenServerManagerTest { private final String mavenServerPath = MavenServerManagerTest.class.getResource("/maven-server").getPath(); private MavenServerManager manager = new MavenServerManager(mavenServerPath); private MavenServerWrapper mavenServer; private MavenWorkspaceCache workspaceCache; @BeforeMethod public void setUp() throws Exception { workspaceCache = new MavenWorkspaceCache(); workspaceCache.put(new MavenKey("org.eclipse.che", "che-ide-subModule", "1.0.0-TEST-SNAPSHOT"), new File(MavenServerManagerTest.class.getResource("/multimoduleProject/subModule/pom.xml").getFile())); mavenServer = manager.createMavenServer(); mavenServer.customize(workspaceCache, new MyMavenTerminal(), new MyMavenServerProgressNotifier(), true, false); } @AfterMethod public void cleanUp() { mavenServer.dispose(); manager.shutdown(); } @Test public void testBuildMavenServerParametersMainWorkDirExec() throws Exception { MavenServerManager test = new MavenServerManager("test"); try { JavaParameters parameters = test.buildMavenServerParameters(); assertThat(parameters.getMainClassName()).isEqualTo("org.eclipse.che.maven.server.MavenServerMain"); assertThat(parameters.getWorkingDirectory()).isEqualTo(System.getProperty("java.io.tmpdir")); assertThat(parameters.getJavaExecutable()).isEqualTo("java"); } finally { test.shutdown(); } } @Test public void testBuildMavenServerParametersClassPathMain() throws Exception { JavaParameters parameters = manager.buildMavenServerParameters(); List<String> classPath = parameters.getClassPath(); assertThat(classPath).contains(mavenServerPath + "/maven-server-impl.jar") .contains(mavenServerPath + "/maven-server-api.jar"); } @Test public void testBuildMavenServerParametersClassPathMavenLib() throws Exception { JavaParameters parameters = manager.buildMavenServerParameters(); List<String> classPath = parameters.getClassPath(); String mavenHome = System.getenv("M2_HOME"); File libs = new File(mavenHome, "lib"); File[] listFiles = libs.listFiles((dir, name) -> name.endsWith(".jar")); List<String> libPaths = Arrays.stream(listFiles).map(File::getAbsolutePath).collect(Collectors.toList()); assertThat(classPath).contains(libPaths.toArray()); } @Test public void testLaunchMavenServer() throws Exception { MavenServerWrapper server = manager.createMavenServer(); assertThat(server).isNotNull(); } @Test public void testEffectivePom() throws Exception { MavenServerWrapper mavenServer = manager.createMavenServer(); String effectivePom = mavenServer.getEffectivePom(new File(MavenServerManagerTest.class.getResource("/EffectivePom/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertThat(effectivePom).isNotNull().isNotEmpty().contains("<!-- Effective POM for project") .contains("'org.eclipse.che.parent:maven-parent-pom:pom:4.0.0-M6-SNAPSHOT'"); } @Test public void testResolveProject() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/FirstProject/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); assertNotNull(resolveProject.getProjectInfo()); } @Test public void testProjectHasDependencies() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/FirstProject/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); MavenProjectInfo projectInfo = resolveProject.getProjectInfo(); assertNotNull(projectInfo); MavenModel mavenModel = projectInfo.getMavenModel(); assertNotNull(mavenModel); List<MavenArtifact> dependencies = mavenModel.getDependencies(); assertFalse(dependencies.isEmpty()); assertEquals(26, dependencies.size()); } @Test public void testResolveBadProject() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/BadProject/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); assertNotNull(resolveProject.getProblems()); assertEquals(1, resolveProject.getProblems().size()); } @Test public void testResolveMultimoduleProjectMainPom() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/multimoduleProject/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); MavenProjectInfo projectInfo = resolveProject.getProjectInfo(); assertNotNull(projectInfo); MavenModel mavenModel = projectInfo.getMavenModel(); assertNotNull(mavenModel); assertThat(mavenModel.getPackaging()).isEqualTo("pom"); assertThat(mavenModel.getModules()).containsExactly("subModule", "test"); assertThat(mavenModel.getDependencies()).isEmpty(); } @Test public void testResolveMultimoduleProjectModulePom() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/multimoduleProject/subModule/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); MavenProjectInfo projectInfo = resolveProject.getProjectInfo(); assertNotNull(projectInfo); MavenModel mavenModel = projectInfo.getMavenModel(); assertNotNull(mavenModel); assertThat(mavenModel.getPackaging()).isEqualTo("jar"); assertThat(mavenModel.getModules()).isEmpty(); assertThat(mavenModel.getDependencies()).isNotEmpty().hasSize(3); } @Test public void testMultimoduleProjectModuleHasDependencyOnAnotherModule() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerManagerTest.class.getResource("/multimoduleProject/test/pom.xml").getFile()), Collections.emptyList(), Collections.emptyList()); assertNotNull(resolveProject); MavenProjectInfo projectInfo = resolveProject.getProjectInfo(); assertNotNull(projectInfo); MavenModel mavenModel = projectInfo.getMavenModel(); assertNotNull(mavenModel); assertThat(mavenModel.getPackaging()).isEqualTo("jar"); assertThat(mavenModel.getModules()).isEmpty(); assertThat(mavenModel.getDependencies()).isNotEmpty().hasSize(6); mavenModel.getDependencies().forEach(mavenArtifact -> System.out.println(mavenArtifact.getFile().getAbsolutePath())); } private static class MyMavenTerminal implements MavenTerminal, Serializable { @Override public void print(int level, String message, Throwable throwable) throws RemoteException { System.out.print(message); if (throwable != null) { throwable.printStackTrace(); } } } public static class MyMavenServerProgressNotifier implements MavenProgressNotifier, Serializable { @Override public void setText(String text) { System.out.println(text); } @Override public void setPercent(double percent) { } @Override public void setPercentUndefined(boolean undefined) { } @Override public boolean isCanceled() { return false; } @Override public void start() { } @Override public void stop() { } } }