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.HibernateConfigurationFileModel; import org.jboss.windup.rules.apps.javaee.model.HibernateEntityModel; import org.jboss.windup.rules.apps.javaee.model.HibernateMappingFileModel; import org.jboss.windup.rules.apps.javaee.rules.CreateHibernateReportRuleProvider; import org.jboss.windup.rules.apps.javaee.service.HibernateConfigurationFileService; import org.jboss.windup.rules.apps.javaee.service.HibernateMappingFileService; import org.jboss.windup.testutil.html.TestHibernateReportUtil; import org.jboss.windup.testutil.html.TestJavaApplicationOverviewUtil; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(Arquillian.class) public class WindupArchitectureHibernateTest 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.config:windup-config-groovy"), @AddonDependency(name = "org.jboss.windup.tests:test-util"), @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 testRunWindupHibernate() throws Exception { final String path = "../test-files/hibernate-tutorial-web-3.3.2.GA.war"; List<String> includeList = Collections.singletonList("nocodescanning"); List<String> excludeList = Collections.emptyList(); try (GraphContext context = super.createGraphContext()) { super.runTest(context, path, null, false, includeList, excludeList); validateHibernateFiles(context); validateReports(context); } } private void validateHibernateFiles(GraphContext context) { HibernateConfigurationFileService cfgService = new HibernateConfigurationFileService(context); int hibernateCfgFilesFound = 0; for (HibernateConfigurationFileModel model : cfgService.findAll()) { Assert.assertEquals("3.0", model.getSpecificationVersion()); hibernateCfgFilesFound++; } Assert.assertEquals(1, hibernateCfgFilesFound); HibernateMappingFileService mappingService = new HibernateMappingFileService(context); boolean personHbmFound = false; boolean eventHbmFound = false; boolean itemHbmFound = false; int numberModelsFound = 0; Iterable<HibernateMappingFileModel> allMappingModels = mappingService.findAll(); for (HibernateMappingFileModel model : allMappingModels) { numberModelsFound++; Assert.assertEquals("3.0", model.getSpecificationVersion()); if (model.getFileName().equals("Person.hbm.xml")) { personHbmFound = true; Iterator<HibernateEntityModel> entities = model.getHibernateEntities().iterator(); Assert.assertTrue(entities.hasNext()); HibernateEntityModel entity = entities.next(); Assert.assertEquals("3.0", entity.getSpecificationVersion()); Assert.assertEquals("PERSON", entity.getTableName()); Assert.assertEquals("org.hibernate.tutorial.domain.Person", entity.getJavaClass().getQualifiedName()); Assert.assertFalse(entities.hasNext()); } else if (model.getFileName().equals("Event.hbm.xml")) { eventHbmFound = true; Iterator<HibernateEntityModel> entities = model.getHibernateEntities().iterator(); Assert.assertTrue(entities.hasNext()); HibernateEntityModel entity = entities.next(); Assert.assertEquals("3.0", entity.getSpecificationVersion()); Assert.assertEquals("EVENTS", entity.getTableName()); Assert.assertEquals("org.hibernate.tutorial.domain.Event", entity.getJavaClass().getQualifiedName()); Assert.assertFalse(entities.hasNext()); } else if (model.getFileName().equals("Item.hbm.xml")) { itemHbmFound = true; Iterator<HibernateEntityModel> entities = model.getHibernateEntities().iterator(); Assert.assertTrue(entities.hasNext()); HibernateEntityModel entity = entities.next(); Assert.assertEquals("3.0", entity.getSpecificationVersion()); Assert.assertEquals("Items", entity.getTableName()); Assert.assertEquals("org.hibernate.test.cache.Item", entity.getJavaClass().getQualifiedName()); Assert.assertFalse(entities.hasNext()); } } Assert.assertTrue(personHbmFound); Assert.assertTrue(eventHbmFound); Assert.assertTrue(itemHbmFound); Assert.assertEquals(3, numberModelsFound); } private void validateHibernateReport(GraphContext context) { ReportService reportService = new ReportService(context); ReportModel reportModel = reportService.getUniqueByProperty( ReportModel.TEMPLATE_PATH, CreateHibernateReportRuleProvider.TEMPLATE_HIBERNATE_REPORT); TestHibernateReportUtil util = new TestHibernateReportUtil(); Path reportPath = reportService.getReportDirectory().resolve(reportModel.getReportFilename()); util.loadPage(reportPath); Assert.assertTrue(util.checkSessionFactoryPropertyInReport("connection.pool_size", "2")); Assert.assertTrue(util.checkSessionFactoryPropertyInReport("cache.provider_class", "org.hibernate.cache.NoCacheProvider")); Assert.assertTrue(util.checkSessionFactoryPropertyInReport("dialect", "org.hibernate.dialect.HSQLDialect")); Assert.assertTrue(util.checkSessionFactoryPropertyInReport("current_session_context_class", "org.hibernate.context.ManagedSessionContext")); Assert.assertTrue(util.checkHibernateEntityInReport("org.hibernate.test.cache.Item", "Items")); Assert.assertTrue(util.checkHibernateEntityInReport("org.hibernate.tutorial.domain.Person", "PERSON")); Assert.assertTrue(util.checkHibernateEntityInReport("org.hibernate.tutorial.domain.Event", "EVENTS")); } 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("hibernate-tutorial-web-3.3.2.GA.war", "META-INF/MANIFEST.MF", "Manifest"); util.checkFilePathAndTag("hibernate-tutorial-web-3.3.2.GA.war", "WEB-INF/classes/hibernate.cfg.xml", "Hibernate Cfg"); util.checkFilePathAndTag("hibernate-tutorial-web-3.3.2.GA.war", "WEB-INF/classes/org/hibernate/tutorial/domain/Event.hbm.xml", "Hibernate Mapping"); validateHibernateReport(context); } }