package org.jboss.windup.tests.application; import java.io.File; import java.nio.file.Path; import java.util.Collections; import java.util.Iterator; 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.reporting.model.ReportModel; import org.jboss.windup.reporting.service.ReportService; import org.jboss.windup.rules.apps.javaee.model.SpringBeanModel; import org.jboss.windup.rules.apps.javaee.model.SpringConfigurationFileModel; import org.jboss.windup.rules.apps.javaee.model.association.JNDIReferenceModel; import org.jboss.windup.rules.apps.javaee.rules.CreateSpringBeanReportRuleProvider; import org.jboss.windup.rules.apps.javaee.service.SpringConfigurationFileService; import org.jboss.windup.testutil.html.TestJavaApplicationOverviewUtil; import org.jboss.windup.testutil.html.TestSpringBeanReportUtil; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class WindupArchitectureSpringSmallTest 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.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 testRunWindupSmallSpringApp() throws Exception { try (GraphContext context = super.createGraphContext()) { final String path = "../test-files/spring-small-example.war"; List<String> includeList = Collections.singletonList("nocodescanning"); List<String> excludeList = Collections.emptyList(); super.runTest(context, path, null, false, includeList, excludeList); validateSpringBeans(context); validateReports(context); validateSpringBeanReport(context); } } /** * Validate that the spring beans were extracted correctly */ private void validateSpringBeans(GraphContext context) { SpringConfigurationFileService springConfigurationFileService = new SpringConfigurationFileService(context); Iterable<SpringConfigurationFileModel> models = springConfigurationFileService.findAll(); int numberFound = 0; boolean foundSpringMvcContext = false; boolean foundSpringBusinessContext = false; boolean foundDataSourceJNDIReference = false; boolean foundEntityManagerJNDIReference = false; for (SpringConfigurationFileModel model : models) { numberFound++; if (model.getFileName().equals("spring-mvc-context.xml")) { foundSpringMvcContext = true; Iterator<SpringBeanModel> beanIter = model.getSpringBeans().iterator(); SpringBeanModel springBean = beanIter.next(); Assert.assertEquals("org.springframework.web.servlet.view.InternalResourceViewResolver", springBean .getJavaClass().getQualifiedName()); Assert.assertFalse(beanIter.hasNext()); } else if (model.getFileName().equals("spring-business-context.xml")) { foundSpringBusinessContext = true; for (SpringBeanModel springBeanModel : model.getSpringBeans()) { if (springBeanModel instanceof JNDIReferenceModel) { if ("dataSource".equals(springBeanModel.getSpringBeanName())) foundDataSourceJNDIReference = true; else if ("entityManager".equals(springBeanModel.getSpringBeanName())) foundEntityManagerJNDIReference = true; } } } } Assert.assertEquals(2, numberFound); Assert.assertTrue(foundSpringMvcContext); Assert.assertTrue(foundSpringBusinessContext); Assert.assertTrue(foundDataSourceJNDIReference); Assert.assertTrue(foundEntityManagerJNDIReference); } private void validateSpringBeanReport(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = reportService.getUniqueByProperty( ReportModel.TEMPLATE_PATH, CreateSpringBeanReportRuleProvider.TEMPLATE_SPRING_REPORT); TestSpringBeanReportUtil util = new TestSpringBeanReportUtil(); Path reportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); util.loadPage(reportPath); Assert.assertTrue(util.checkSpringBeanInReport("WEB-INF/spring-mvc-context.xml", "org.springframework.web.servlet.view.InternalResourceViewResolver")); } private void validateReports(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("spring-small-example.war", "WEB-INF/spring-business-context.xml", "Spring XML"); } }