package org.jboss.windup.config.metadata;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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.forge.furnace.Furnace;
import org.jboss.forge.furnace.addons.AddonId;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.windup.config.AbstractRuleProvider;
import org.jboss.windup.config.loader.RuleLoaderContext;
import org.jboss.windup.config.parser.ParserContext;
import org.jboss.windup.config.phase.PostMigrationRulesPhase;
import org.jboss.windup.config.phase.RulePhase;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.GraphContextFactory;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ocpsoft.rewrite.config.Configuration;
import org.w3c.dom.Document;
@RunWith(Arquillian.class)
public class MetaDataHandlerTest
{
private static final String XML_FILE = "src/test/resources/testxml/metadata.windup.xml";
private static final String XML_WITH_OVERRIDE_FILE = "src/test/resources/testxml/metadata.override.windup.xml";
@Deployment
@AddonDependencies({
@AddonDependency(name = "org.jboss.windup.config:windup-config"),
@AddonDependency(name = "org.jboss.windup.config:windup-config-xml"),
@AddonDependency(name = "org.jboss.forge.furnace.container:cdi")
})
public static AddonArchive getDeployment()
{
return ShrinkWrap.create(AddonArchive.class).addBeansXML();
}
@Inject
private Furnace furnace;
@Inject
private GraphContextFactory graphContextFactory;
@Test
public void testXmlParsinfOfRulesetMetadata() throws Exception
{
File fXmlFile = new File(XML_FILE);
RuleLoaderContext loaderContext = new RuleLoaderContext(Collections.singleton(fXmlFile.toPath()), null);
ParserContext parser = new ParserContext(furnace, loaderContext);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document firstXmlFile = dBuilder.parse(fXmlFile);
parser.processElement(firstXmlFile.getDocumentElement());
// verify xmlfile
Assert.assertEquals(1, parser.getRuleProviders().size());
AbstractRuleProvider abstractRuleProvider = parser.getRuleProviders().get(0);
RuleProviderMetadata metadata = abstractRuleProvider.getMetadata();
Class<? extends RulePhase> phase = metadata.getPhase();
List<String> executeAfterIDs = metadata.getExecuteAfterIDs();
List<String> executeBeforeIDs = metadata.getExecuteBeforeIDs();
Set<AddonId> requiredAddons = metadata.getRequiredAddons();
Set<TechnologyReference> sourceTechnologies = metadata.getSourceTechnologies();
Set<TechnologyReference> targetTechnologies = metadata.getTargetTechnologies();
Set<String> tags = metadata.getTags();
Assert.assertTrue(PostMigrationRulesPhase.class.isAssignableFrom(phase));
Assert.assertTrue(executeAfterIDs.contains("AfterId"));
Assert.assertTrue(executeBeforeIDs.contains("BeforeId"));
Assert.assertTrue(tags.contains("require-stateless"));
Assert.assertTrue(tags.contains("require-nofilesystem-io"));
Assert.assertTrue(requiredAddons.contains(AddonId.valueOf("org.jboss.windup.rules,windup-rules-javaee,2.0.1.Final")));
Assert.assertTrue(requiredAddons.contains(AddonId.valueOf("org.jboss.windup.rules,windup-rules-java,2.0.0.Final")));
Assert.assertTrue(sourceTechnologies.contains(new TechnologyReference("ejb", "(2,3]")));
Assert.assertTrue(sourceTechnologies.contains(new TechnologyReference("weblogic", "(10,12]")));
Assert.assertTrue(sourceTechnologies.contains(new TechnologyReference("servlet")));
Assert.assertTrue(targetTechnologies.contains(new TechnologyReference("eap", "(5,6]")));
Assert.assertTrue(targetTechnologies.contains(new TechnologyReference("ejb", "(2,3]")));
Assert.assertTrue(targetTechnologies.contains(new TechnologyReference("ejb", "(2,3]")));
Assert.assertTrue(targetTechnologies.contains(new TechnologyReference("jsp")));
Assert.assertFalse(metadata.isOverrideProvider());
Configuration configuration = abstractRuleProvider.getConfiguration(null);
Assert.assertFalse(configuration.getRules().isEmpty());
Assert.assertTrue(configuration.getRules().get(0).toString().contains("test {foo} iteration perform"));
}
@Test
public void testXmlRuleOverrideProviderMetadata() throws Exception
{
File fXmlFile = new File(XML_WITH_OVERRIDE_FILE);
RuleLoaderContext loaderContext = new RuleLoaderContext(Collections.singleton(fXmlFile.toPath()), null);
ParserContext parser = new ParserContext(furnace, loaderContext);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document firstXmlFile = dBuilder.parse(fXmlFile);
parser.processElement(firstXmlFile.getDocumentElement());
// verify xmlfile
Assert.assertEquals(1, parser.getRuleProviders().size());
AbstractRuleProvider abstractRuleProvider = parser.getRuleProviders().get(0);
RuleProviderMetadata metadata = abstractRuleProvider.getMetadata();
Assert.assertTrue(metadata.isOverrideProvider());
}
}