/*******************************************************************************
* 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.Collections;
import java.util.List;
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()), Collections.emptyList(),
Collections.emptyList());
assertNotNull(resolveProject);
assertNotNull(resolveProject.getProjectInfo());
}
@Test
public void testProjectHasDependencies() throws Exception {
MavenServerResult resolveProject = mavenServer
.resolveProject (new File(MavenServerTest.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(MavenServerTest.class.getResource("/BadProject/pom.xml").getFile()), Collections.emptyList(),
Collections.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, Collections.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, Collections.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, Collections.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, Collections.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, Collections.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>";
}
}