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 2007/06/07 17:44:18 UTC
svn commit: r545219 -
/incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java
Author: schor
Date: Thu Jun 7 08:44:18 2007
New Revision: 545219
URL: http://svn.apache.org/viewvc?view=rev&rev=545219
Log:
No Jira - Add test to verify all CASes in a CPM pipeline share the same type system.
Added:
incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java
Added: incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java?view=auto&rev=545219
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-cpe/src/test/java/org/apache/uima/collection/impl/cpm/CasPoolTest.java Thu Jun 7 08:44:18 2007
@@ -0,0 +1,166 @@
+/*
+ * 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.collection.impl.cpm;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.TypeSystem;
+import org.apache.uima.collection.CollectionProcessingEngine;
+import org.apache.uima.collection.EntityProcessStatus;
+import org.apache.uima.collection.impl.cpm.utils.DescriptorMakeUtil;
+import org.apache.uima.collection.impl.cpm.utils.FunctionErrorStore;
+import org.apache.uima.collection.impl.cpm.utils.TestStatusCallbackListener;
+import org.apache.uima.collection.impl.metadata.cpe.CpeDescriptorFactory;
+import org.apache.uima.collection.metadata.CpeDescription;
+import org.apache.uima.collection.metadata.CpeIntegratedCasProcessor;
+import org.apache.uima.test.junit_extension.JUnitExtension;
+
+/**
+ * This test insures that a common type system is shared in the CPM cas pool.
+ *
+ */
+public class CasPoolTest extends TestCase {
+ private static final String separator = System.getProperties().getProperty("file.separator");
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ // disable schema validation -- this test uses descriptors
+ // that don't validate, for some reason
+ UIMAFramework.getXMLParser().enableSchemaValidation(false);
+ }
+
+ /**
+ * @throws Exception
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ FunctionErrorStore.resetCount();
+ }
+
+
+ /**
+ * Create multiple processors which have to process multiple documents
+ *
+ * @throws Exception
+ */
+ public void testCasPool() throws Exception {
+ // process 100 documents and multiple threads
+ int documentCount = 100;
+ int threadCount = 5;
+
+ // setup CPM to process 100 documents
+ CollectionProcessingEngine cpe = setupCpm(documentCount, threadCount);
+
+ // create and register a status callback listener
+ TestStatusCallbackListener listener = new TestStatusCallbackListener() {
+ TypeSystem sts = null;
+ public void entityProcessComplete(CAS aCas, EntityProcessStatus aStatus) {
+ super.entityProcessComplete(aCas, aStatus);
+ if (sts == null) {
+ sts = aCas.getTypeSystem();
+ } else {
+ Assert.assertTrue(sts == aCas.getTypeSystem());
+ }
+ }
+ };
+ cpe.addStatusCallbackListener(listener);
+
+ // run CPM
+ cpe.process();
+
+ // wait until CPM has finished
+ while (!listener.isFinished()) {
+ Thread.sleep(5);
+ }
+
+ // check if CasConsumer was called
+ Assert.assertEquals("StatusCallbackListener", documentCount, listener
+ .getEntityProcessCompleteCount());
+ Assert.assertEquals("CasConsumer process Count", documentCount, FunctionErrorStore
+ .getCasConsumerProcessCount());
+ Assert.assertEquals("Annotator process count", documentCount, FunctionErrorStore
+ .getAnnotatorProcessCount());
+ Assert.assertEquals("Collection reader getNext count", documentCount, FunctionErrorStore
+ .getCollectionReaderGetNextCount());
+ Assert.assertEquals("number of annoators", threadCount, FunctionErrorStore.getAnnotatorCount());
+ }
+
+ /**
+ * setup the CPM with base functionality.
+ *
+ * @param documentCount
+ * how many documents should be processed
+ * @param threadCount
+ * how many threads are used by the cpm
+ *
+ * @return CollectionProcessingEngine - initialized cpe
+ */
+ private CollectionProcessingEngine setupCpm(int documentCount, int threadCount) throws Exception {
+ CpeDescription cpeDesc = null;
+ CollectionProcessingEngine cpe = null;
+
+ try {
+ String colReaderBase = JUnitExtension.getFile("CpmTests" + separator
+ + "ErrorTestCollectionReader.xml").getAbsolutePath();
+ String taeBase = JUnitExtension.getFile("CpmTests" + separator + "ErrorTestAnnotator.xml").getAbsolutePath();
+ String casConsumerBase = JUnitExtension.getFile("CpmTests" + separator
+ + "ErrorTestCasConsumer.xml").getAbsolutePath();
+
+ // created needed descriptors
+ String colReaderDesc = DescriptorMakeUtil.makeCollectionReader(colReaderBase, documentCount);
+ String taeDesc = DescriptorMakeUtil.makeAnalysisEngine(taeBase);
+ String casConsumerDesc = DescriptorMakeUtil.makeCasConsumer(casConsumerBase);
+
+ // create cpm descriptor
+ cpeDesc = CpeDescriptorFactory.produceDescriptor();
+ cpeDesc.setInputQueueSize(2);
+ cpeDesc.setOutputQueueSize(2);
+ cpeDesc.setProcessingUnitThreadCount(threadCount);
+
+ // add tae
+ CpeIntegratedCasProcessor integratedProcessor = CpeDescriptorFactory
+ .produceCasProcessor("ErrorTestAnnotator");
+ integratedProcessor.setDescriptor(taeDesc);
+ cpeDesc.addCasProcessor(integratedProcessor);
+
+ // add casConsumer
+ CpeIntegratedCasProcessor casConsumer = CpeDescriptorFactory
+ .produceCasProcessor("ErrorTest CasConsumer");
+ casConsumer.setDescriptor(casConsumerDesc);
+ cpeDesc.addCasProcessor(casConsumer);
+
+ // add collectionReader
+ cpeDesc.addCollectionReader(colReaderDesc);
+
+ // produce cpe
+ cpe = UIMAFramework.produceCollectionProcessingEngine(cpeDesc, null, null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return cpe;
+ }
+}