Author: veithen Date: Sun Sep 5 13:05:30 2010 New Revision: 992777 URL: http://svn.apache.org/viewvc?rev=992777&view=rev Log: Refactored some StAXUtils tests to include them into the StAX dialect test suite.
Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java (with props) Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/util/StAXUtilsTest.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTest.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/util/StAXUtilsTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/util/StAXUtilsTest.java?rev=992777&r1=992776&r2=992777&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/util/StAXUtilsTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/om/util/StAXUtilsTest.java Sun Sep 5 13:05:30 2010 @@ -19,93 +19,9 @@ package org.apache.axiom.om.util; -import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; - import junit.framework.TestCase; public class StAXUtilsTest extends TestCase { - public interface Action { - void execute() throws Exception; - } - - private void testThreadSafety(final Action action) throws Throwable { - int threadCount = 10; - final List results = new ArrayList(threadCount); - for (int i=0; i<threadCount; i++) { - new Thread(new Runnable() { - public void run() { - Throwable result; - try { - for (int i=0; i<1000; i++) { - action.execute(); - } - result = null; - } catch (Throwable ex) { - result = ex; - } - synchronized (results) { - results.add(result); - results.notifyAll(); - } - } - }).start(); - } - synchronized (results) { - while (results.size() < threadCount) { - results.wait(); - } - } - for (Iterator it = results.iterator(); it.hasNext(); ) { - Throwable result = (Throwable)it.next(); - if (result != null) { - throw result; - } - } - } - - // Regression test for WSCOMMONS-489 - public void testCreateXMLStreamReaderIsThreadSafe() throws Throwable { - testThreadSafety(new Action() { - public void execute() throws Exception { - String text = String.valueOf((int)(Math.random() * 10000)); - String xml = "<root>" + text + "</root>"; - XMLStreamReader reader = StAXUtils.createXMLStreamReader(new StringReader(xml)); - assertEquals(XMLStreamReader.START_DOCUMENT, reader.getEventType()); - assertEquals(XMLStreamReader.START_ELEMENT, reader.next()); - assertEquals(XMLStreamReader.CHARACTERS, reader.next()); - assertEquals(text, reader.getText()); - assertEquals(XMLStreamReader.END_ELEMENT, reader.next()); - assertEquals(XMLStreamReader.END_DOCUMENT, reader.next()); - reader.close(); - } - }); - } - - // Regression test for WSCOMMONS-489 - public void testCreateXMLStreamWriterIsThreadSafe() throws Throwable { - testThreadSafety(new Action() { - public void execute() throws Exception { - String text = String.valueOf((int)(Math.random() * 10000)); - StringWriter out = new StringWriter(); - XMLStreamWriter writer = StAXUtils.createXMLStreamWriter(out); - writer.writeStartElement("root"); - writer.writeCharacters(text); - writer.writeEndElement(); - writer.writeEndDocument(); - writer.flush(); - writer.close(); - assertEquals("<root>" + text + "</root>", out.toString()); - } - }); - } - public void testInputFactoryIsImmutable() throws Exception { try { StAXUtils.getXMLInputFactory().setProperty("javax.xml.stream.isValidating", Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java?rev=992777&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java Sun Sep 5 13:05:30 2010 @@ -0,0 +1,47 @@ +/* + * 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.axiom.util.stax.dialect; + +import java.io.StringReader; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; + +import org.apache.axiom.testutils.concurrent.Action; +import org.apache.axiom.testutils.concurrent.ConcurrentTestUtils; + +public class CreateXMLStreamReaderThreadSafetyTestCase extends DialectTestCase { + protected void runTest() throws Throwable { + final XMLInputFactory factory = getDialect().makeThreadSafe(newNormalizedXMLInputFactory()); + ConcurrentTestUtils.testThreadSafety(new Action() { + public void execute() throws Exception { + String text = String.valueOf((int)(Math.random() * 10000)); + String xml = "<root>" + text + "</root>"; + XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(xml)); + assertEquals(XMLStreamReader.START_DOCUMENT, reader.getEventType()); + assertEquals(XMLStreamReader.START_ELEMENT, reader.next()); + assertEquals(XMLStreamReader.CHARACTERS, reader.next()); + assertEquals(text, reader.getText()); + assertEquals(XMLStreamReader.END_ELEMENT, reader.next()); + assertEquals(XMLStreamReader.END_DOCUMENT, reader.next()); + reader.close(); + } + }); + } +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamReaderThreadSafetyTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java?rev=992777&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java Sun Sep 5 13:05:30 2010 @@ -0,0 +1,47 @@ +/* + * 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.axiom.util.stax.dialect; + +import java.io.StringWriter; + +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamWriter; + +import org.apache.axiom.testutils.concurrent.Action; +import org.apache.axiom.testutils.concurrent.ConcurrentTestUtils; + +public class CreateXMLStreamWriterThreadSafetyTestCase extends DialectTestCase { + protected void runTest() throws Throwable { + final XMLOutputFactory factory = getDialect().makeThreadSafe(newNormalizedXMLOutputFactory()); + ConcurrentTestUtils.testThreadSafety(new Action() { + public void execute() throws Exception { + String text = String.valueOf((int)(Math.random() * 10000)); + StringWriter out = new StringWriter(); + XMLStreamWriter writer = factory.createXMLStreamWriter(out); + writer.writeStartElement("root"); + writer.writeCharacters(text); + writer.writeEndElement(); + writer.writeEndDocument(); + writer.flush(); + writer.close(); + assertEquals("<root>" + text + "</root>", out.toString()); + } + }); + } +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/CreateXMLStreamWriterThreadSafetyTestCase.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTest.java?rev=992777&r1=992776&r2=992777&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/test/java/org/apache/axiom/util/stax/dialect/DialectTest.java Sun Sep 5 13:05:30 2010 @@ -36,6 +36,8 @@ public class DialectTest extends TestSui this.classLoader = classLoader; this.props = props; addDialectTest(new CreateXMLEventWriterWithNullEncodingTestCase()); + addDialectTest(new CreateXMLStreamReaderThreadSafetyTestCase()); + addDialectTest(new CreateXMLStreamWriterThreadSafetyTestCase()); addDialectTest(new CreateXMLStreamWriterWithNullEncodingTestCase()); addDialectTest(new DisallowDoctypeDeclWithDenialOfServiceTestCase()); addDialectTest(new DisallowDoctypeDeclWithExternalSubsetTestCase()); Added: webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java?rev=992777&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java Sun Sep 5 13:05:30 2010 @@ -0,0 +1,24 @@ +/* + * 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.axiom.testutils.concurrent; + +public interface Action { + void execute() throws Exception; +} \ No newline at end of file Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/Action.java ------------------------------------------------------------------------------ svn:eol-style = native Added: webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java?rev=992777&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java Sun Sep 5 13:05:30 2010 @@ -0,0 +1,63 @@ +/* + * 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.axiom.testutils.concurrent; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ConcurrentTestUtils { + + public static void testThreadSafety(final Action action) throws Throwable { + int threadCount = 10; + final List results = new ArrayList(threadCount); + for (int i=0; i<threadCount; i++) { + new Thread(new Runnable() { + public void run() { + Throwable result; + try { + for (int i=0; i<1000; i++) { + action.execute(); + } + result = null; + } catch (Throwable ex) { + result = ex; + } + synchronized (results) { + results.add(result); + results.notifyAll(); + } + } + }).start(); + } + synchronized (results) { + while (results.size() < threadCount) { + results.wait(); + } + } + for (Iterator it = results.iterator(); it.hasNext(); ) { + Throwable result = (Throwable)it.next(); + if (result != null) { + throw result; + } + } + } + +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-testutils/src/main/java/org/apache/axiom/testutils/concurrent/ConcurrentTestUtils.java ------------------------------------------------------------------------------ svn:eol-style = native