/* * JBoss, Home of Professional Open Source. * Copyright 2010, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.test.smoke.subsystem.xml; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.LinkedList; import java.util.List; import javax.xml.XMLConstants; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.junit.After; import org.junit.BeforeClass; import org.junit.Test; import org.xml.sax.SAXException; /** * A XSDValidationUnitTestCase. * * @author Brian Stansberry * @version $Revision: 1.1 $ */ public class StandardConfigsXMLValidationUnitTestCase extends AbstractValidationUnitTest { private static Source[] SCHEMAS; @BeforeClass public static void setUp() { final List<Source> sources = new LinkedList<Source>(); for (File file : jbossSchemaFiles(true)) { sources.add(new StreamSource(file)); } SCHEMAS = sources.toArray(new StreamSource[0]); } private File tmpFile; @After public void cleanUp() { if (tmpFile != null) { if (!tmpFile.delete()) { tmpFile.deleteOnExit(); } } } @Test public void testHost() throws Exception { parseXml("domain/configuration/host.xml"); } @Test public void testHostSlave() throws Exception { parseXml("domain/configuration/host-slave.xml"); } @Test public void testHostMaster() throws Exception { parseXml("domain/configuration/host-master.xml"); } @Test public void testDomain() throws Exception { parseXml("domain/configuration/domain.xml"); } @Test public void testStandalone() throws Exception { parseXml("standalone/configuration/standalone.xml"); } @Test public void testStandaloneHA() throws Exception { parseXml("standalone/configuration/standalone-ha.xml"); } @Test public void testStandaloneFull() throws Exception { parseXml("standalone/configuration/standalone-full.xml"); } //TODO Leave commented out until domain-jts.xml is definitely removed from the configuration // @Test // public void testDomainJTS() throws Exception { // parseXml("docs/examples/configs/domain-jts.xml"); // } // @Test public void testStandaloneEC2HA() throws Exception { parseXml("docs/examples/configs/standalone-ec2-ha.xml"); } @Test public void testStandaloneEC2FullHA() throws Exception { parseXml("docs/examples/configs/standalone-ec2-full-ha.xml"); } @Test public void testStandaloneGossipHA() throws Exception { parseXml("docs/examples/configs/standalone-gossip-ha.xml"); } @Test public void testStandaloneGossipFullHA() throws Exception { parseXml("docs/examples/configs/standalone-gossip-full-ha.xml"); } @Test public void testStandaloneJTS() throws Exception { parseXml("docs/examples/configs/standalone-jts.xml"); } @Test public void testStandaloneMinimalistic() throws Exception { parseXml("docs/examples/configs/standalone-minimalistic.xml"); } @Test public void testStandalonePicketLink() throws Exception { parseXml("docs/examples/configs/standalone-picketlink.xml"); } @Test public void testStandaloneXTS() throws Exception { parseXml("docs/examples/configs/standalone-xts.xml"); } @Test public void testStandaloneRTS() throws Exception { parseXml("docs/examples/configs/standalone-rts.xml"); } @Test public void testStandaloneGenericJMS() throws Exception { parseXml("docs/examples/configs/standalone-genericjms.xml"); } private void parseXml(String xmlName) throws ParserConfigurationException, SAXException, IOException { SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); schemaFactory.setErrorHandler(new ErrorHandlerImpl()); schemaFactory.setResourceResolver(DEFAULT_RESOURCE_RESOLVER); Schema schema = schemaFactory.newSchema(SCHEMAS); Validator validator = schema.newValidator(); validator.setErrorHandler(new ErrorHandlerImpl()); validator.setFeature("http://apache.org/xml/features/validation/schema", true); validator.setResourceResolver(DEFAULT_RESOURCE_RESOLVER); validator.validate(new StreamSource(getXmlFile(xmlName))); } private File getXmlFile(String xmlName) throws IOException { // Copy the input file to tmp, replacing system prop expressions on non-string fields // so they don't cause validation failures // TODO we should just pass an IS to Validator final File tmp = File.createTempFile(getClass().getSimpleName(), "xml"); tmp.deleteOnExit(); File target = new File(getBaseDir(), xmlName); BufferedReader reader = new BufferedReader(new FileReader(target)); BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(tmp)); String line; while ((line = reader.readLine()) != null) { writer.write(fixExpressions(line)); } } finally { reader.close(); if (writer != null) { writer.close(); } } return tmp; } private static String fixExpressions(String line) { String result = line.replace("${jboss.management.native.port:9999}", "9999"); result = result.replace("${jboss.management.http.port:9990}", "9990"); result = result.replace("${jboss.management.https.port:9993}", "9993"); result = result.replace("${jboss.domain.master.protocol:remote}", "remote"); result = result.replace("${jboss.domain.master.port:9999}", "9999"); result = result.replace("${jboss.messaging.group.port:9876}", "9876"); result = result.replace("${jboss.socket.binding.port-offset:0}", "0"); result = result.replace("${jboss.http.port:8080}", "8080"); result = result.replace("${jboss.https.port:8443}", "8443"); result = result.replace("${jboss.remoting.port:4447}", "4447"); result = result.replace("${jboss.ajp.port:8009}", "8009"); result = result.replace("${jboss.mcmp.port:8090}", "8090"); result = result.replace("${jboss.deployment.scanner.rollback.on.failure:false}", "false"); return result; } }