package org.jboss.windup.tests.application;
import java.io.File;
import java.util.Collections;
import java.util.List;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.arquillian.AddonDependencies;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.archive.AddonArchive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.model.resource.FileModel;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.reporting.model.InlineHintModel;
import org.jboss.windup.reporting.service.InlineHintService;
import org.jboss.windup.rules.apps.java.model.JavaClassFileModel;
import org.jboss.windup.rules.apps.java.model.JavaSourceFileModel;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class WindupArchitectureScanPackagesTest extends WindupArchitectureTest
{
@Deployment
@AddonDependencies({
@AddonDependency(name = "org.jboss.windup.graph:windup-graph"),
@AddonDependency(name = "org.jboss.windup.reporting:windup-reporting"),
@AddonDependency(name = "org.jboss.windup.exec:windup-exec"),
@AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java"),
@AddonDependency(name = "org.jboss.windup.utils:windup-utils"),
@AddonDependency(name = "org.jboss.windup.config:windup-config-groovy"),
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi"),
})
public static AddonArchive getDeployment()
{
return ShrinkWrap.create(AddonArchive.class)
.addBeansXML()
.addClass(WindupArchitectureTest.class)
.addAsResource(new File("src/test/groovy/GroovyExampleRule.windup.groovy"));
}
@Test
public void testRunWindupScanPackages() throws Exception
{
final String path = "../test-files/Windup1x-javaee-example.war";
List<String> includePackages = Collections.singletonList("org.apache.wicket.application");
List<String> excludePackages = Collections.emptyList();
try (GraphContext context = createGraphContext())
{
super.runTest(context, path, null, false, includePackages, excludePackages);
validateInlineHintsInAppropriatePackages(context);
}
}
private void validateInlineHintsInAppropriatePackages(GraphContext context)
{
GraphService<FileModel> fileModelService = new GraphService<>(context, FileModel.class);
boolean foundHintedFile = false;
boolean foundAppHintedFile = false;
boolean foundNonAppHintedFile = false;
InlineHintService inlineHintService = new InlineHintService(context);
for (FileModel fileModel : fileModelService.findAll())
{
String pkg = null;
if (fileModel instanceof JavaClassFileModel)
{
pkg = ((JavaClassFileModel) fileModel).getPackageName();
}
else if (fileModel instanceof JavaSourceFileModel)
{
pkg = ((JavaSourceFileModel) fileModel).getPackageName();
}
if (pkg == null)
{
continue;
}
Iterable<InlineHintModel> hintIterable = inlineHintService.getHintsForFile(fileModel);
for (InlineHintModel hint : hintIterable)
{
foundHintedFile = true;
if (pkg.startsWith("org.apache.wicket.application"))
{
foundAppHintedFile = true;
}
else if (hint.getDescription().equals("127.0.0.1") && fileModel.getFileName().equals("MockHttpServletRequest.java"))
{
// these are ok (results of a ip address scan that is file based, rather than package based
}
else
{
System.out.println("Unexpected hinted file found: " + fileModel.getFilePath() + " hint: " + hint.getTitle() + " desc: "
+ hint.getDescription());
foundNonAppHintedFile = true;
}
}
}
Assert.assertTrue(foundHintedFile);
Assert.assertTrue(foundAppHintedFile);
Assert.assertFalse(foundNonAppHintedFile);
}
}