package org.jboss.windup.tests.application; import java.io.File; import java.nio.file.Path; import java.util.Properties; 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.reporting.model.ReportModel; import org.jboss.windup.reporting.service.ReportService; import org.jboss.windup.rules.apps.java.ip.CreateHardcodedIPAddressReportRuleProvider; import org.jboss.windup.rules.apps.java.model.JarManifestModel; import org.jboss.windup.rules.apps.java.reporting.rules.CreateCompatibleFileReportRuleProvider; import org.jboss.windup.rules.apps.java.reporting.rules.CreateReportIndexRuleProvider; import org.jboss.windup.rules.apps.java.service.JarManifestService; import org.jboss.windup.testutil.html.TestCompatibleReportUtil; import org.jboss.windup.testutil.html.TestJavaApplicationOverviewUtil; import org.jboss.windup.testutil.html.TestReportIndexReportUtil; import org.jboss.windup.testutil.html.TestHardcodedPReportUtil; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class WindupArchitectureMediumBinaryModeTest 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.rules.apps:windup-rules-java-ee"), @AddonDependency(name = "org.jboss.windup.rules.apps:windup-rules-tattletale"), @AddonDependency(name = "org.jboss.windup.tests:test-util"), @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 testRunWindupMediumWithFernflower() throws Exception { final String path = "../test-files/Windup1x-javaee-example.war"; try (GraphContext context = createGraphContext()) { super.runTest(context, path, false); allDecompiledFilesAreLinked(context); validateManifestEntries(context); validateReports(context); } } @Test public void testRunWindupMediumWithProcyon() throws Exception { final String path = "../test-files/Windup1x-javaee-example.war"; try (GraphContext context = createGraphContext()) { Properties props = System.getProperties(); props.setProperty("windup.decompiler", "Procyon"); super.runTest(context, path, false); props.remove("windup.decompiler"); allDecompiledFilesAreLinked(context); } } private void validateManifestEntries(GraphContext context) throws Exception { JarManifestService jarManifestService = new JarManifestService(context); Iterable<JarManifestModel> manifests = jarManifestService.findAll(); int numberFound = 0; boolean warManifestFound = false; for (JarManifestModel manifest : manifests) { if (manifest.getArchive().getFileName().equals("Windup1x-javaee-example.war")) { Assert.assertEquals("1.0", manifest.asVertex().getProperty("Manifest-Version")); Assert.assertEquals("Plexus Archiver", manifest.asVertex().getProperty("Archiver-Version")); Assert.assertEquals("Apache Maven", manifest.asVertex().getProperty("Created-By")); warManifestFound = true; } numberFound++; } Assert.assertEquals(9, numberFound); Assert.assertTrue(warManifestFound); } private void validateStaticIPReport(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = reportService.getUniqueByProperty( ReportModel.TEMPLATE_PATH, CreateHardcodedIPAddressReportRuleProvider.TEMPLATE_REPORT); TestHardcodedPReportUtil util = new TestHardcodedPReportUtil(); Path reportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); util.loadPage(reportPath); Assert.assertTrue(util .checkHardcodedIPInReport( "org.apache.wicket.protocol.http.mock.MockHttpServletRequest (67, 32)", "Line: 67, Position: 32", "127.0.0.1")); Assert.assertTrue(util .checkHardcodedIPInReport( "org.apache.wicket.protocol.http.mock.MockHttpServletRequest (723, 14)", "Line: 723, Position: 14", "127.0.0.1")); Assert.assertTrue(util .checkHardcodedIPInReport( "org.apache.wicket.protocol.http.mock.MockHttpServletRequest (727, 14)", "Line: 727, Position: 14", "127.0.0.1")); } private void validateCompatibleReport(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = reportService.getUniqueByProperty( ReportModel.TEMPLATE_PATH, CreateCompatibleFileReportRuleProvider.TEMPLATE_APPLICATION_REPORT); TestCompatibleReportUtil util = new TestCompatibleReportUtil(); Path reportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); util.loadPage(reportPath); Assert.assertTrue(util .checkFileInReport("org/jboss/devconf/openshift/HomePage.class", "")); Assert.assertTrue(util .checkFileInReport("org/joda/time/DateMidnight.class", "")); Assert.assertTrue(util .checkFileInReport( "org/joda/time/Chronology.class", "")); Assert.assertTrue("An application has duplicate entries for a single file.",util.checkTableWithoutDuplicates()); } private void validateOverviewReport(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = getMainApplicationReport(context); Path appReportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); TestJavaApplicationOverviewUtil util = new TestJavaApplicationOverviewUtil(); util.loadPage(appReportPath); util.checkFilePathAndTag("Windup1x-javaee-example.war", "META-INF/maven/javaee/javaee/pom.properties", "Properties"); util.checkFilePathEffort("Windup1x-javaee-example.war", "META-INF/maven/javaee/javaee/pom.properties", 0); util.checkFilePathEffort("Windup1x-javaee-example.war/WEB-INF/lib/joda-time-2.0.jar", "org.joda.time.tz.DateTimeZoneBuilder", 32); util.checkMainEffort(2213); util.checkAppSectionEffort("Windup1x-javaee-example.war", 2); util.checkAppSectionEffort("Windup1x-javaee-example.war/WEB-INF/lib/joda-time-2.0.jar", 64); util.checkAppSectionEffort("Windup1x-javaee-example.war/WEB-INF/lib/slf4j-api-1.6.1.jar", 16); util.checkAppSectionEffort("Windup1x-javaee-example.war/WEB-INF/lib/wicket-devutils-1.5.10.jar", 0); util.checkAppSectionEffort("Windup1x-javaee-example.war/WEB-INF/lib/wicket-request-1.5.10.jar", 24); } private void validateReportIndex(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = reportService.getUniqueByProperty( ReportModel.TEMPLATE_PATH, CreateReportIndexRuleProvider.TEMPLATE); Path appReportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); TestReportIndexReportUtil util = new TestReportIndexReportUtil(); util.loadPage(appReportPath); Assert.assertTrue(util.checkIncidentByCategoryRow("optional", 292, 2213)); } /** * Validate that the report pages were generated correctly */ private void validateReports(GraphContext context) { validateOverviewReport(context); validateStaticIPReport(context); validateCompatibleReport(context); validateReportIndex(context); } }