/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.windup.core.test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.jboss.tools.test.util.TestProjectProvider;
import org.jboss.tools.windup.core.IWindupListener;
import org.jboss.tools.windup.core.WindupCorePlugin;
import org.jboss.tools.windup.core.services.WindupService;
import org.junit.After;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
/**
* <p>
* Tests for the {@link WindupService}.
* </p>
*/
public class WindupServiceTest extends WindupTest
{
@After
public void cleanUpGeneratedReports() throws IOException, InterruptedException
{
// delete any reports generated by the test
System.gc();
File reportsDir = WindupCorePlugin.getDefault().getStateLocation().append("reports").toFile();
try
{
// give eclipse a second to let go of files it maybe scanning
Thread.sleep(1000);
FileUtils.deleteDirectory(reportsDir);
}
catch (Exception e)
{
// sometimes eclipse is still holding onto files, wait a second then try again
Thread.sleep(1000);
FileUtils.deleteDirectory(reportsDir);
}
}
@Test
public void testGetReportLocation_ReportNotGenerated() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
IProject project = provider.getProject();
IFile jspFile = project.getFile(new Path("WebContent/WebContent/Portal.jsp"));
IPath reportLocation = windupService.getReportLocation(jspFile);
Assert.assertNull("Report location should be null for a resource in a "
+ "project who's Windup report has not been generated", reportLocation);
}
@Test
public void testGetReportLocation_ReportGenerated_ResourceDoesNotHaveReportResource() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
IProject project = provider.getProject();
IFile folder = project.getFile(new Path("WebContent/WebContent"));
IPath reportLocation = windupService.getReportLocation(folder);
Assert.assertNull("Report location should be null for a resource that "
+ "does not have a corresponding Windup report resource", reportLocation);
}
@Ignore
@Test
public void testGenerateReport() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "WAS-EAR", false);
IProject project = provider.getProject();
//windupService.generateGraph(project);
// test that the report home file exists
IPath reportHomeLocation = windupService.getReportLocation(project);
File reportHomeFile = reportHomeLocation.toFile();
Assert.assertTrue("The index.html for the generated report should exist.", reportHomeFile.exists());
// test that a report file exists for JSP file
IFile xmlFile = project.getFile(new Path("EarContent/META-INF/deployment.xml"));
IPath xmlReportLocation = windupService.getReportLocation(xmlFile);
Assert.assertNotNull("JSP Report Location should be found", xmlReportLocation);
File xmlReportFile = xmlReportLocation.toFile();
Assert.assertTrue("A report resource should exist for " + xmlFile, xmlReportFile.exists());
}
@Ignore
@Test
public void testGenerateReports() throws CoreException
{
// import test projects
TestProjectProvider portalProjectProvider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
TestProjectProvider wasProjectProvider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "WAS-EAR", false);
IProject portalProject = portalProjectProvider.getProject();
IProject wasProject = wasProjectProvider.getProject();
// generate reports
IProject[] projects = new IProject[] { portalProject, wasProject };
//windupService.generateGraph(projects, null);
// verify report index exists for all projects that reports were generated for
for (IProject project : projects)
{
IPath reportHomeLocation = windupService.getReportLocation(project);
File reportHomeFile = reportHomeLocation.toFile();
Assert.assertTrue("The index.html for the generated report should exist.", reportHomeFile.exists());
}
// test that a report file exists for WAS deployment file in the was project
IFile deploymentFile = wasProject.getFile(new Path("EarContent/META-INF/deployment.xml"));
IPath deploymentReportLocation = windupService.getReportLocation(deploymentFile);
File deploymentReportFile = deploymentReportLocation.toFile();
Assert.assertTrue("A report resource should exist for " + deploymentReportFile, deploymentReportFile.exists());
}
@Ignore
@Test
public void testReportExists() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
IProject project = provider.getProject();
//windupService.generateGraph(project);
boolean reportExists = windupService.reportExists(project);
Assert.assertTrue("WindupService should report that the windup report exists for the given project.", reportExists);
}
@Ignore
@Test
public void testAddWindupReportListener() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
final IProject project = provider.getProject();
final List<IProject> notifiedProjects = new ArrayList<IProject>();
windupService.addWindupListener(new IWindupListener()
{
@Override
public void graphGenerated(IProject reportGeneratedForProject)
{
notifiedProjects.add(reportGeneratedForProject);
}
});
//windupService.generateGraph(project);
Assert.assertTrue("Listener was not notified of report generation for the project.",
notifiedProjects.contains(project));
}
@Ignore
@Test
public void testRemoveWindupReportListener() throws CoreException
{
TestProjectProvider provider = new TestProjectProvider(
WindupCoreTestPlugin.PLUGIN_ID, null, "Portal-WAR", false);
final IProject project = provider.getProject();
final List<IProject> notifiedProjects = new ArrayList<IProject>();
IWindupListener listener = new IWindupListener()
{
@Override
public void graphGenerated(IProject reportGeneratedForProject)
{
notifiedProjects.add(reportGeneratedForProject);
}
};
windupService.addWindupListener(listener);
windupService.removeWindupListener(listener);
//windupService.generateGraph(project);
Assert.assertTrue("Listener should not have been notified of report generation.",
notifiedProjects.isEmpty());
}
}