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.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.ignore.SkippedArchives; import org.jboss.windup.rules.apps.java.archives.model.ArchiveCoordinateModel; import org.jboss.windup.rules.apps.java.archives.model.IdentifiedArchiveModel; import org.jboss.windup.rules.apps.java.archives.model.IgnoredArchiveModel; 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 IgnoreArchivesRulesetTest { 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"); public static final String LOG4J_COORDINATE = "log4j:log4j:::1.2.6"; @Deployment @AddonDependencies({ @AddonDependency(name = "org.jboss.windup.graph:windup-graph"), @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() { return ShrinkWrap.create(AddonArchive.class) .addBeansXML(); } @Inject private WindupProcessor processor; @Inject private GraphContextFactory contextFactory; @Inject private CompositeArchiveIdentificationService identifier; @Test public void testSkippedArchivesFound() throws Exception { try (GraphContext graphContext = contextFactory.create()) { FileUtils.deleteDirectory(OUTPUT_PATH.toFile()); InMemoryArchiveIdentificationService inMemoryIdentifier = new InMemoryArchiveIdentificationService(); inMemoryIdentifier.addMapping("4bf32b10f459a4ecd4df234ae2ccb32b9d9ba9b7", LOG4J_COORDINATE); InMemoryArchiveIdentificationService identificationService = new InMemoryArchiveIdentificationService(); identificationService.addMappingsFrom(new File("src/test/resources/testArchiveMapping.txt")); identifier.addIdentifier(inMemoryIdentifier); identifier.addIdentifier(identificationService); SkippedArchives.add("log4j:*:*"); WindupConfiguration config = new WindupConfiguration(); config.setGraphContext(graphContext); config.addInputPath(INPUT_PATH); config.setOutputDirectory(OUTPUT_PATH); config.setOptionValue(OverwriteOption.NAME, true); config.setRuleProviderFilter(new NotPredicate( new RuleProviderPhasePredicate(DecompilationPhase.class, MigrationRulesPhase.class, ReportGenerationPhase.class, ReportRenderingPhase.class) )); processor.execute(config); GraphService<IgnoredArchiveModel> archiveService = new GraphService<>(graphContext, IgnoredArchiveModel.class); Iterable<IgnoredArchiveModel> archives = archiveService.findAllByProperty(IgnoredArchiveModel.FILE_NAME, "log4j-1.2.6.jar"); Assert.assertTrue(archives.iterator().hasNext()); for (IgnoredArchiveModel archive : archives) { if (archive.isDirectory()) continue; Assert.assertNotNull(archive); Assert.assertTrue(archive instanceof IdentifiedArchiveModel); ArchiveCoordinateModel archiveCoordinate = ((IdentifiedArchiveModel) archive).getCoordinate(); Assert.assertNotNull(archiveCoordinate); final Coordinate expected = CoordinateBuilder.create(LOG4J_COORDINATE); final CoordinateBuilder actual = CoordinateBuilder.create() .setGroupId(archiveCoordinate.getGroupId()) .setArtifactId(archiveCoordinate.getArtifactId()) .setPackaging(archiveCoordinate.getPackaging()) .setClassifier(archiveCoordinate.getClassifier()) .setVersion(archiveCoordinate.getVersion()); Assert.assertEquals(expected.toString(), actual.toString()); } } } }