/******************************************************************************* * 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.maven.server; import org.eclipse.che.maven.data.MavenArtifact; import org.eclipse.che.maven.data.MavenArtifactKey; import org.eclipse.che.maven.data.MavenModel; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.rmi.RemoteException; import java.util.List; import static java.util.Collections.emptyList; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; /** * @author Evgen Vidolob */ public class ProjectResolverTest { private MavenServerImpl mavenServer; protected static final String wsPath = "target/workspace"; @BeforeMethod public void setUp() throws Exception { MavenServerContext.setLoggerAndListener(new MavenServerLogger() { @Override public void warning(Throwable t) throws RemoteException { t.printStackTrace(); } @Override public void info(Throwable t) throws RemoteException { t.printStackTrace(); } @Override public void error(Throwable t) throws RemoteException { t.printStackTrace(); } }, (file, relativePath) -> System.out.println(file.getAbsolutePath())); MavenSettings mavenSettings = new MavenSettings(); mavenSettings.setLoggingLevel(MavenTerminal.LEVEL_INFO); mavenSettings.setMavenHome(new File(System.getenv("M2_HOME"))); mavenSettings.setGlobalSettings(new File(System.getProperty("user.home"), ".m2/settings.xml")); File localRepository = new File("target/localrepo"); localRepository.mkdirs(); mavenSettings.setLocalRepository(localRepository); mavenServer = new MavenServerImpl(mavenSettings); mavenServer.setComponents(null, true, (level, message, throwable) -> { System.out.println(message); }, new MavenServerProgressNotifier() { @Override public void setText(String text) throws RemoteException { } @Override public void setPercent(double percent) throws RemoteException { } @Override public void setPercentUndefined(boolean undefined) throws RemoteException { } @Override public boolean isCanceled() throws RemoteException { return false; } }, true); } @AfterMethod public void tearDown() throws Exception { File localRepository = new File("target/localrepo"); localRepository.mkdirs(); } @Test public void testResolveProject() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerTest.class.getResource("/FirstProject/pom.xml").getFile()), emptyList(), emptyList()); assertNotNull(resolveProject); assertNotNull(resolveProject.getProjectInfo()); } @Test public void multimoduleProjectWithProfilesShouldBeResolved() throws Exception { final File pomFile = new File(MavenServerTest.class.getResource("/multi-module-with-profiles/pom.xml").getFile()); MavenServerResult resolveProject = mavenServer.resolveProject(pomFile, emptyList(), emptyList()); assertNotNull(resolveProject); MavenProjectInfo projectInfo = resolveProject.getProjectInfo(); assertNotNull(resolveProject.getProjectInfo()); MavenModel mavenModel = projectInfo.getMavenModel(); assertNotNull(mavenModel); List<String> modules = mavenModel.getModules(); assertEquals(3, modules.size()); } @Test public void propertiesFromProfileShouldBeExpanded() throws Exception { final String content = "<artifactId>project-with-properties</artifactId>\n" + " <groupId>com.aw.ad</groupId>\n" + " <packaging>${prop2}</packaging>\n" + " <name>${prop1}</name>\n" + " <version>1.0</version>\n" + " <profiles>\n" + " <profile>\n" + " <id>prop1</id>\n" + " <activation>\n" + " <activeByDefault>true</activeByDefault>\n" + " </activation>\n" + " <properties>\n" + " <prop1>value1</prop1>\n" + " </properties>\n" + " </profile>\n" + " <profile>\n" + " <id>prop2</id>\n" + " <activation>\n" + " <activeByDefault>true</activeByDefault>\n" + " </activation>\n" + " <properties>\n" + " <prop2>jar</prop2>\n" + " </properties>\n" + " </profile>\n" + " </profiles>"; final File pom = createTestPom("propertiesFromProfile", content); MavenServerResult resolveProject = mavenServer.resolveProject(pom, emptyList(), emptyList()); final MavenModel mavenModel = resolveProject.getProjectInfo().getMavenModel(); assertEquals("jar", mavenModel.getPackaging()); assertEquals("value1", mavenModel.getName()); } @Test public void profileShouldBeActivatedByProperty() throws Exception { final String osProperty = System.getProperty("os.name"); final String content = "<artifactId>project-with-properties</artifactId>\n" + " <groupId>com.aw.ad</groupId>\n" + " <name>${prop1}</name>\n" + " <packaging>jar</packaging>\n" + " <version>1.0</version>\n" + " <profiles>" + " <profile>" + " <id>one</id>" + " <activation>" + " <property>" + " <name>os.name</name>" + " <value>" + osProperty + "</value>" + " </property>" + " </activation>" + " </profile>" + " <profile>" + " <id>two</id>" + " <activation>" + " <property>" + " <name>os.name</name>" + " <value>xxx</value>" + " </property>" + " </activation>" + " </profile>" + " </profiles>"; final File pom = createTestPom("propertiesFromProfile", content); MavenServerResult resolveProject = mavenServer.resolveProject(pom, emptyList(), emptyList()); final MavenModel mavenModel = resolveProject.getProjectInfo().getMavenModel(); assertNotNull(mavenModel); } @Test public void testProjectHasDependencies() throws Exception { MavenServerResult resolveProject = mavenServer .resolveProject(new File(MavenServerTest.class.getResource("/FirstProject/pom.xml").getFile()), emptyList(), 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(MavenServerTest.class.getResource("/BadProject/pom.xml").getFile()), emptyList(), emptyList()); assertNotNull(resolveProject); assertNotNull(resolveProject.getProblems()); assertEquals(1, resolveProject.getProblems().size()); } @Test public void testResolveArtifact() throws Exception { MavenArtifactKey artifactKey = new MavenArtifactKey("junit", "junit", "3.7", "jar", ""); MavenArtifact artifact = mavenServer.resolveArtifact(artifactKey, emptyList()); assertNotNull(artifact); assertTrue(artifact.isResolved()); } @Test public void testResolveArtifactSource() throws Exception { MavenArtifactKey artifactKey = new MavenArtifactKey("junit", "junit", "4.11", "jar", "sources"); MavenArtifact artifact = mavenServer.resolveArtifact(artifactKey, emptyList()); assertNotNull(artifact); assertTrue(artifact.isResolved()); } @Test public void testResolveLog4jSource() throws Exception { MavenArtifactKey artifactKey = new MavenArtifactKey("log4j", "log4j", "1.2.12", "jar", "sources"); MavenArtifact artifact = mavenServer.resolveArtifact(artifactKey, emptyList()); assertNotNull(artifact); assertFalse(artifact.isResolved()); } @Test public void testResolveNotExistingArtifact() throws Exception { MavenArtifactKey artifactKey = new MavenArtifactKey("junit", "junit", "3.56", "jar", ""); MavenArtifact artifact = mavenServer.resolveArtifact(artifactKey, emptyList()); assertNotNull(artifact); assertFalse(artifact.isResolved()); } @Test public void testResolveNotExistingArtifactSource() throws Exception { MavenArtifactKey artifactKey = new MavenArtifactKey("junit", "junit", "3.56", "jar", "sources"); MavenArtifact artifact = mavenServer.resolveArtifact(artifactKey, emptyList()); assertNotNull(artifact); assertFalse(artifact.isResolved()); } private File createTestPom(String folderName, String pomContent) throws IOException { File file = new File(wsPath, folderName); file.mkdirs(); File pomFile = new File(file, "pom.xml"); FileOutputStream outputStream = new FileOutputStream(pomFile); outputStream.write(getPomContent(pomContent).getBytes()); outputStream.flush(); outputStream.close(); return pomFile; } private String getPomContent(String content) { return "<?xml version=\"1.0\"?>\n" + "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" + " <modelVersion>4.0.0</modelVersion>\n" + content + "</project>"; } }