package org.jboss.windup.rules.apps.java.archives; import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; import javax.inject.Inject; import org.apache.commons.io.FileUtils; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.forge.addon.dependencies.Coordinate; import org.jboss.forge.addon.dependencies.builder.CoordinateBuilder; 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.config.phase.ArchiveExtractionPhase; import org.jboss.windup.config.phase.DecompilationPhase; import org.jboss.windup.config.phase.MigrationRulesPhase; import org.jboss.windup.config.phase.ReportGenerationPhase; import org.jboss.windup.config.phase.ReportRenderingPhase; import org.jboss.windup.exec.WindupProcessor; import org.jboss.windup.exec.configuration.WindupConfiguration; import org.jboss.windup.exec.configuration.options.OverwriteOption; import org.jboss.windup.exec.rulefilters.NotPredicate; import org.jboss.windup.exec.rulefilters.RuleProviderPhasePredicate; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.GraphContextFactory; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.rules.apps.java.archives.identify.CompositeArchiveIdentificationService; import org.jboss.windup.rules.apps.java.archives.identify.InMemoryArchiveIdentificationService; import org.jboss.windup.rules.apps.java.archives.model.ArchiveCoordinateModel; import org.jboss.windup.rules.apps.java.archives.model.IdentifiedArchiveModel; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; /** * @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a> * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ @RunWith(Arquillian.class) public class IdentifyArchivesRulesetTest { private static final Path INPUT_PATH = new File("").getAbsoluteFile().toPath().getParent().getParent() .resolve("test-files/jee-example-app-1.0.0.ear"); private static final Path OUTPUT_PATH = Paths.get("target/WindupReport"); private static final String LOG4J_COORDINATE = "log4j:log4j:4.11"; @Deployment @AddonDependencies({ @AddonDependency(name = "org.jboss.windup.config:windup-config"), @AddonDependency(name = "org.jboss.windup.exec:windup-exec"), @AddonDependency(name = "org.jboss.windup.utils:windup-utils"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-java-archives"), @AddonDependency(name = "org.jboss.forge.furnace.container:cdi"), }) public static AddonArchive getDeployment() { final AddonArchive archive = ShrinkWrap.create(AddonArchive.class) .addBeansXML(); return archive; } @Inject private WindupProcessor processor; @Inject private GraphContextFactory contextFactory; @Inject private CompositeArchiveIdentificationService identifier; /** * Run initial Windup rules against the JEE sample app, add a single identification record, and check if the lib is identified. */ @Test public void testJarsAreIdentified() throws Exception { try (GraphContext graphContext = contextFactory.create()) { FileUtils.deleteDirectory(OUTPUT_PATH.toFile()); InMemoryArchiveIdentificationService inMemoryIdentifier = new InMemoryArchiveIdentificationService(); inMemoryIdentifier.addMapping("4bf32b10f459a4ecd4df234ae2ccb32b9d9ba9b7", LOG4J_COORDINATE); identifier.addIdentifier(inMemoryIdentifier); WindupConfiguration wc = new WindupConfiguration(); wc.setGraphContext(graphContext); wc.addInputPath(INPUT_PATH); wc.setOutputDirectory(OUTPUT_PATH); wc.setOptionValue(OverwriteOption.NAME, true); wc.setRuleProviderFilter(new NotPredicate( new RuleProviderPhasePredicate(ArchiveExtractionPhase.class, DecompilationPhase.class, MigrationRulesPhase.class, ReportGenerationPhase.class, ReportRenderingPhase.class) )); processor.execute(wc); GraphService<IdentifiedArchiveModel> archiveService = new GraphService<>(graphContext, IdentifiedArchiveModel.class); Iterable<IdentifiedArchiveModel> archives = archiveService.findAllByProperty(IdentifiedArchiveModel.FILE_NAME, "log4j-1.2.6.jar"); for (IdentifiedArchiveModel archive : archives) { ArchiveCoordinateModel archiveCoordinate = archive.getCoordinate(); Assert.assertNotNull(archiveCoordinate); final Coordinate expected = CoordinateBuilder.create(LOG4J_COORDINATE); Assert.assertEquals(expected, CoordinateBuilder.create() .setGroupId(archiveCoordinate.getGroupId()) .setArtifactId(archiveCoordinate.getArtifactId()) .setClassifier(archiveCoordinate.getClassifier()) .setVersion(archiveCoordinate.getVersion())); } } } }