You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2014/04/04 15:53:28 UTC
svn commit: r1584693 -
/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java
Author: schor
Date: Fri Apr 4 13:53:28 2014
New Revision: 1584693
URL: http://svn.apache.org/r1584693
Log:
[UIMA-3694] fix up test case to be valid for produceAnalysisEngine calling, and add multi-threaded creation test
Modified:
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java?rev=1584693&r1=1584692&r2=1584693&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngineDescription_implTest.java Fri Apr 4 13:53:28 2014
@@ -24,13 +24,18 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
+import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
+import java.util.Random;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.uima.Constants;
import org.apache.uima.UIMAFramework;
+import org.apache.uima.UimaContext;
+import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
import org.apache.uima.analysis_engine.metadata.FixedFlow;
@@ -40,13 +45,18 @@ import org.apache.uima.analysis_engine.m
import org.apache.uima.cas.CAS;
import org.apache.uima.flow.FlowControllerDescription;
import org.apache.uima.flow.impl.FlowControllerDescription_impl;
+import org.apache.uima.internal.util.MultiThreadUtils;
import org.apache.uima.internal.util.SerializationUtils;
+import org.apache.uima.resource.ConfigurationManager;
import org.apache.uima.resource.ExternalResourceDependency;
import org.apache.uima.resource.ExternalResourceDescription;
+import org.apache.uima.resource.FileResourceSpecifier;
+import org.apache.uima.resource.Resource;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.URISpecifier;
+import org.apache.uima.resource.impl.FileResourceSpecifier_impl;
import org.apache.uima.resource.impl.URISpecifier_impl;
import org.apache.uima.resource.metadata.AllowedValue;
import org.apache.uima.resource.metadata.Capability;
@@ -77,6 +87,7 @@ import org.apache.uima.resource.metadata
import org.apache.uima.test.junit_extension.JUnitExtension;
import org.apache.uima.util.CasCreationUtils;
import org.apache.uima.util.InvalidXMLException;
+import org.apache.uima.util.Logger;
import org.apache.uima.util.XMLInputSource;
import org.apache.uima.util.XMLParser;
@@ -90,6 +101,9 @@ public class AnalysisEngineDescription_i
// Public because also used by other test cases.
public static final String encoding = "utf-8";
+ private static final File TEST_DATA_FILE = JUnitExtension
+ .getFile("ResourceTest/ResourceManager_implTest_tempDataFile.dat");
+
private AnalysisEngineDescription primitiveDesc;
private AnalysisEngineDescription aggregateDesc;
@@ -151,7 +165,7 @@ public class AnalysisEngineDescription_i
primitiveDesc = new AnalysisEngineDescription_impl();
primitiveDesc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
primitiveDesc.setPrimitive(true);
- primitiveDesc.setAnnotatorImplementationName("org.apache.uima.examples.TestAnnotator");
+ primitiveDesc.setAnnotatorImplementationName("org.apache.uima.analysis_engine.impl.TestAnnotator");
AnalysisEngineMetaData md = primitiveDesc.getAnalysisEngineMetaData();
md.setName("Test TAE");
md.setDescription("Does not do anything useful.");
@@ -162,7 +176,7 @@ public class AnalysisEngineDescription_i
Capability cap1 = new Capability_impl();
cap1.setDescription("First fake capability");
cap1.addOutputType("Fake", false);
- cap1.addOutputFeature("TestFeature");
+ cap1.addOutputFeature("Fake:TestFeature");
Capability cap2 = new Capability_impl();
cap2.setDescription("Second fake capability");
cap2.addInputType("Fake", true);
@@ -213,18 +227,24 @@ public class AnalysisEngineDescription_i
delegateTaeMap.put("Test", primitiveDesc);
AnalysisEngineDescription_impl primDesc2 = new AnalysisEngineDescription_impl();
primDesc2.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
- primDesc2.setAnnotatorImplementationName("fakeClass");
+ primDesc2.setPrimitive(true);
+ primDesc2.setAnnotatorImplementationName("org.apache.uima.analysis_engine.impl.TestAnnotator");
primDesc2.getAnalysisEngineMetaData().setName("fakeAnnotator");
primDesc2.getAnalysisEngineMetaData().setCapabilities(
new Capability[] { new Capability_impl() });
delegateTaeMap.put("Empty", primDesc2);
- URISpecifier uriSpec = new URISpecifier_impl();
- uriSpec.setUri("http://incubator.apache.org/uima");
- uriSpec.setProtocol(Constants.PROTOCOL_SOAP);
+ // Can't use URI specifier if we try to produce resource, because it maps to either a SOAP or VINCI adapter,
+ // and that adapter is not on the class path for this causes a failure in loading
+// URISpecifier uriSpec = new URISpecifier_impl();
+// uriSpec.setUri("http://incubator.apache.org/uima");
+// uriSpec.setProtocol(Constants.PROTOCOL_SOAP);
+ FileResourceSpecifier fileResSpec = new FileResourceSpecifier_impl();
+ fileResSpec.setFileUrl(TEST_DATA_FILE.toURL().toString());
FlowControllerDeclaration fcDecl = new FlowControllerDeclaration_impl();
fcDecl.setKey("TestFlowController");
FlowControllerDescription fcDesc = new FlowControllerDescription_impl();
fcDesc.getMetaData().setName("MyTestFlowController");
+ fcDesc.setImplementationName("org.apache.uima.analysis_engine.impl.FlowControllerForErrorTest");
fcDecl.setSpecifier(fcDesc);
aggregateDesc.setFlowControllerDeclaration(fcDecl);
@@ -237,7 +257,7 @@ public class AnalysisEngineDescription_i
.createResourceManagerConfiguration();
ExternalResourceDescription extRes = UIMAFramework.getResourceSpecifierFactory()
.createExternalResourceDescription();
- extRes.setResourceSpecifier(uriSpec);
+ extRes.setResourceSpecifier(fileResSpec);
extRes.setName("Resource1");
extRes.setDescription("Test");
resMgrCfg.setExternalResources(new ExternalResourceDescription[] { extRes });
@@ -246,6 +266,7 @@ public class AnalysisEngineDescription_i
.createExternalResourceBinding();
binding.setKey("ResourceKey");
binding.setResourceName("Resource1");
+ resMgrCfg.setExternalResourceBindings(new ExternalResourceBinding[] {binding});
aggregateDesc.setResourceManagerConfiguration(resMgrCfg);
// AsbCreationSpecifier asbSpec = new AsbCreationSpecifier_impl();
@@ -272,6 +293,65 @@ public class AnalysisEngineDescription_i
}
}
+ public void testMulticoreInitialize() throws Exception {
+ ResourceManager resourceManager = UIMAFramework.newDefaultResourceManager();
+ ConfigurationManager configManager = UIMAFramework.newConfigurationManager();
+ Logger logger = UIMAFramework.getLogger(this.getClass());
+ logger.setResourceManager(resourceManager);
+
+ UimaContext uimaContext = UIMAFramework.newUimaContext(logger, resourceManager, configManager);
+
+ final Map<String, Object> p = new HashMap<String, Object>();
+ p.put(UIMAFramework.CAS_INITIAL_HEAP_SIZE, 200);
+ p.put(Resource.PARAM_CONFIG_MANAGER, configManager);
+ p.put(Resource.PARAM_RESOURCE_MANAGER, UIMAFramework.newDefaultResourceManager());
+ p.put(Resource.PARAM_UIMA_CONTEXT, uimaContext);
+ int numberOfThreads = MultiThreadUtils.PROCESSORS * 5;
+ final AnalysisEngine[] aes = new AnalysisEngine[numberOfThreads];
+ System.out.format("test multicore initialize with %d threads%n",
+ numberOfThreads);
+
+
+ MultiThreadUtils.Run2isb run2isb = new MultiThreadUtils.Run2isb() {
+
+ public void call(int i, int r, StringBuilder sb) throws Exception {
+ Random random = new Random();
+ for (int j = 0; j < 2; j++) {
+ aes[i] = UIMAFramework.produceAnalysisEngine(primitiveDesc, p);
+ // System.out.println(sb.toString());
+ // System.out.print('.');
+ if ((i % 2) == 0) {
+ Thread.sleep(0, random.nextInt(2000));
+ }
+ }
+ }
+ };
+ MultiThreadUtils.tstMultiThread("MultiCoreInitialize", numberOfThreads, 100, run2isb);
+ assertTrue(!aes[0].equals(aes[1]));
+
+ run2isb = new MultiThreadUtils.Run2isb() {
+
+ public void call(int i, int r, StringBuilder sb) throws Exception {
+ Random random = new Random();
+ for (int j = 0; j < 2; j++) {
+ aes[i] = UIMAFramework.produceAnalysisEngine(aggregateDesc, p);
+ // System.out.println(sb.toString());
+ // System.out.print('.');
+ if ((i % 2) == 0) {
+ Thread.sleep(0, random.nextInt(5000));
+ }
+ }
+ }
+ };
+ MultiThreadUtils.tstMultiThread("MultiCoreInitialize", numberOfThreads, 100, run2isb);
+ assertTrue(!aes[0].equals(aes[1]));
+
+
+// System.out.println("");
+ }
+
+
+
public void testXMLization() throws Exception {
try {
// write objects to XML