blob: c16cc5541d9d2993edd6967cfa3acb0a57d5098a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.as.dd;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.regex.Pattern;
import junit.framework.TestCase;
import org.apache.uima.adapter.jms.service.Dd2spring;
import org.apache.uima.test.junit_extension.FileCompare;
import org.apache.uima.test.junit_extension.TeePrintStream;
public class Dd2SpringTest extends TestCase{
private static String dd2SpringXsltFilePath = "src/main/scripts/dd2spring.xsl";
private static String saxonClasspath = "file:src/main/saxon/saxon8.jar";
private static String pathToDds = "src/test/resources/deploy/";
private static String pathToExpected = "src/test/resources/deploy/expected/";
// get rid of parts of generated file that are specific to the regen, which are
// the header which includes the path to the file, and the date of generation
private static String sourceFileCommentPattern =
// match start-of-line, spaces, "<!-- -->"
"^\\s*<!-- (" + // match start-of-line, spaces, "<!--
"(file\\:)|" + // match file: or
// dd September, 2007, 7:03:00 etc
"(\\d{1,2} \\w*, \\d{4}, \\d{1,2}\\:\\d{1,2}\\:\\d{1,2} ))" +
"[^\\n]*?-->[ \\t]*$"; // followed by some other non-newline chars, and then --> at end of line
// get rid of uniqifiers that are generated
private static String uniquifiersPattern =
// sample: 9.67.165.27-44fb4c2a:1165912164d:-8000
// another: 9.2.34.65754d945a:11bfaf7fad7:-7fff
"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.?[\\-0-9a-fA-F]{6,12}\\:[0-9a-fA-F]{8,12}\\:\\-[0-9a-fA-F]{4,4}"
;
// get rid of part of file name that is system specific
// get rid of variable length comment header lines
private static String sourceFileCommentBorder =
// match start-of-line, spaces, "<!--===========-->"
"^\\s*<!--=*-->[ \\t]*$";
/* pattern to remove installation-specific paths
* file:/C:/a/Eclipse/3.3/apache/uima-as/src/test/resources/descriptors/tutorial/ex2/RoomNumberAnnotator.xml
*/
private static String specificPaths = "\\\"file:[\\w/:\\-\\.]*?src/test/resources/";
private static Pattern compareFilter = Pattern.compile(
// turn on multiline mode (?m) so ^ and $ match for each line
"(?m)(" +
sourceFileCommentPattern +
")|(" +
uniquifiersPattern +
")|(" +
sourceFileCommentBorder +
")|(" +
specificPaths +
")");
private static Pattern nevermatch = Pattern.compile(" ");
private static Dd2spring dd2SpringInstance = new Dd2spring();
protected void setUp() {
}
protected void tearDown() {
}
public void testAggregateWithInnerAggregateErMsgKeys() throws Exception {
checkDd2SpringErrMsg("aggregateWithInnerAggregateErMsgKeys.xml",
"running test aggregateWithInnerAggregateErMsgKeys.xml: \n" +
" *** ERROR: line-number: 44 deployment descriptor for analysisEngine: MeetingDetectorAggregate/NoOp " +
"specifies a casMultiplier element, but the analysisEngine is not a CAS multiplier" );
}
public void testDd2Spring_dfltPrimMultiInstanceSame() throws Exception {
checkDd2Spring("defaultingPrimAEMultInstanceSameCasPool.xml");
}
public void testDd2Spring_dfltPrimMultiInstanceDiff() throws Exception {
// checkDd2Spring("defaultingPrimAEMultInstanceDiffCasPool.xml");
checkDd2SpringErrMsg(
"defaultingPrimAEMultInstanceDiffCasPool.xml",
"running test defaultingPrimAEMultInstanceDiffCasPool.xml: \n" +
" *** WARN: line-number: 26 Top level Async Primitive specifies a scaleout of numberOfInstances=\"40\", but also specifies a Cas Pool size of numberOfCASes=\"30\". The Cas Pool size is being forced to be the same as the scaleout.");
}
public void testAggregateWithInnerAggregateCM() throws Exception {
checkDd2Spring("aggregateWithInnerAggregateCM.xml");
}
public void testDd2Spring_BrokerURL_params() throws Exception {
checkDd2Spring("defaultingAEwithBrokerParms.xml");
}
public void testDd2Spring_Bad_Window() throws Exception {
checkDd2Spring("TestThresholdWindow.xml");
}
public void testDd2Spring_Deploy_AggregateUsingRemoteTempQueueNoBroker() throws Exception {
checkDd2Spring("Deploy_AggregateUsingRemoteTempQueueNoBroker.xml");
}
public void testDd2Spring_defaultingAENoBroker() throws Exception {
checkDd2Spring("defaultingAENoBroker.xml");
}
public void testDd2Spring_var1() throws Exception {
checkDd2Spring("var1.xml");
}
public void testDd2Spring_CMAggregateWithCollocatedCM() throws Exception {
checkDd2Spring("Deploy_CMAggregateWithCollocatedCM.xml");
}
public void testDd2Spring_complex_inner_CM_colocated() throws Exception {
checkDd2Spring("Deploy_ComplexAggregateWithInnerAggregateCM.xml");
}
public void testDd2Spring_remoteSerializer() throws Exception {
checkDd2Spring("remoteSerializer.xml");
}
public void testDd2Spring_deployAggrUsingRmtTempQ() throws Exception {
checkDd2Spring("Deploy_AggregateUsingRemoteTempQueue.xml");
}
public void testDd2Spring_concurRemoteConsumers() throws Exception {
checkDd2Spring("aggrRmtConcurrentReply.xml");
}
public void testVmBkrBad() throws Exception {
checkDd2Spring("vmBkrBad.xml");
}
public void testDd2Spring_inputQueueScaleout3() throws Exception {
checkDd2Spring("iq3.xml");
}
public void testDd2Spring_inputQueueScaleout2g2() throws Exception {
checkDd2Spring("iq2AEg2.xml");
}
public void testDd2Spring_inputQueueScaleout2g() throws Exception {
checkDd2Spring("iq2AEg.xml");
}
public void testDd2Spring_inputQueueScaleout2() throws Exception {
checkDd2Spring("iq2AE.xml");
}
public void testDd2Spring_inputQueueScaleout1() throws Exception {
checkDd2Spring("iq1AE.xml");
}
public void testDd2Spring_multiLevelAsyncDefaulting() throws Exception {
checkDd2Spring("Deploy_MeetingFinder.xml");
}
public void testDd2Spring_dfltPrimMultiInstance() throws Exception {
checkDd2Spring("defaultingPrimAEMultInstance.xml");
}
public void testDd2Spring_tempQ() throws Exception {
checkDd2Spring("tempQ1.xml");
}
public void testDd2Spring_NotCPP() throws Exception {
checkDd2SpringErrMsg(
"envVar/envVarNotCPP.xml",
"running test envVar/envVarNotCPP.xml: \n *** ERROR: line-number: 28 Service element contains an environmentVariables element, \n" +
" but the referenced top-level descriptor isn't a C++ component");
}
public void testDd2Spring_defaults_aggr_async() throws Exception {
checkDd2Spring("defaultingAEaggrAsync.xml");
}
public void testDd2Spring_defaults_aggr() throws Exception {
checkDd2Spring("defaultingAEaggr.xml");
}
public void testDd2Spring_defaults() throws Exception {
checkDd2Spring("defaultingAE.xml");
}
public void testDd2Spring_envVarCPP() throws Exception {
checkDd2Spring("envVar/envVarCPP.xml");
}
public void testDd2Spring_envVarCPP1() throws Exception {
checkDd2Spring("envVar/envVarCPP1.xml");
}
public void testDd2Spring_CPPwrongProtocol() throws Exception {
checkDd2SpringErrMsg(
"envVar/envVarCPPwrongProtocol.xml",
"running test envVar/envVarCPPwrongProtocol.xml: \n *** ERROR: line-number: 31 broker protocol of vm://localhost not supported");
}
private void checkDd2SpringErrMsg(String dd, String errmsg) throws Exception {
PrintStream err = System.err;
try {
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
System.setErr(new TeePrintStream(new PrintStream(errOut), err));
checkDd2Spring(dd);
assertTrue(FileCompare.compareStringsWithFilter(
errmsg, errOut.toString(), nevermatch));
} finally {
System.setErr(err);
}
}
private void checkDd2Spring(String dd) throws Exception {
System.err.print("running test " + dd + ": ");
File springContextFile =
dd2SpringInstance.convertDd2Spring(pathToDds + dd, dd2SpringXsltFilePath, saxonClasspath, "");
assertTrue (FileCompare.compareWithFilter(springContextFile.getAbsolutePath(), pathToExpected + dd,
compareFilter));
}
public static void main(String[] args) {
junit.textui.TestRunner.run(Dd2SpringTest.class);
System.out.println ("done"); // dummy line to have breakpoint
}
}