Ping, Gary?
Jörg Schaible wrote:
Hi Gary,
Gary Gregory wrote:
For now, I've @Ignore'd
ReflectionToStringBuilderConcurrencyTest.testCopyOnWriteArrayList()
FYI: If I reduce the DATA_SIZE from 100000 to 10000 the test
ReflectionToStringBuilderConcurrencyTest.testLinkedList() does not
always
fail for me.
For me it seems to do (I modified the other tests to drop the @Ignore) if
I take an object that has to do a bit more in toString:
============ %< =============
$ svn diff
Index:
src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java
===================================================================
---
src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java
(revision 1200195)
+++
src/test/java/org/apache/commons/lang3/builder/ReflectionToStringBuilderConcurrencyTest.java
(working copy)
@@ -18,7 +18,9 @@
package org.apache.commons.lang3.builder;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
+import java.util.ConcurrentModificationException;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Callable;
@@ -30,7 +32,6 @@
import junit.framework.Assert;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -58,33 +59,48 @@
}
}
- private static final int DATA_SIZE = 100000;
+ private static final int DATA_SIZE = 10000;
private static final int REPEAT = 100;
@Test
- @Ignore
- public void testLinkedList() throws InterruptedException,
ExecutionException {
- this.testConcurrency(new CollectionHolder<List<Integer>>(new
LinkedList<Integer>()));
+ public void testLinkedList() throws InterruptedException {
+ try {
+ this.testConcurrency(new
CollectionHolder<List<Calendar>>(new
LinkedList<Calendar>()));
+ Assert.fail("Thrown " + ExecutionException.class.getName() +
" expected");
+ } catch (final ExecutionException e) {
+ Assert.assertTrue(
+ ConcurrentModificationException.class.getName() + "
expected as cause",
+ e.getCause() instanceof
ConcurrentModificationException);
+ }
}
@Test
- @Ignore
- public void testArrayList() throws InterruptedException,
ExecutionException {
- this.testConcurrency(new CollectionHolder<List<Integer>>(new
ArrayList<Integer>()));
+ public void testArrayList() throws InterruptedException {
+ try {
+ this.testConcurrency(new
CollectionHolder<List<Calendar>>(new ArrayList<Calendar>()));
+ Assert.fail("Thrown " + ExecutionException.class.getName() +
" expected");
+ } catch (final ExecutionException e) {
+ Assert.assertTrue(
+ ConcurrentModificationException.class.getName() + "
expected as cause",
+ e.getCause() instanceof
ConcurrentModificationException);
+ }
}
@Test
- @Ignore
public void testCopyOnWriteArrayList() throws InterruptedException,
ExecutionException {
- this.testConcurrency(new CollectionHolder<List<Integer>>(new
CopyOnWriteArrayList<Integer>()));
+ this.testConcurrency(new CollectionHolder<List<Calendar>>(new
CopyOnWriteArrayList<Calendar>()));
}
- private void testConcurrency(final CollectionHolder<List<Integer>>
holder) throws InterruptedException,
+ private void testConcurrency(final CollectionHolder<List<Calendar>>
holder) throws InterruptedException,
ExecutionException {
- final List<Integer> list = holder.collection;
+ final List<Calendar> list = holder.collection;
+ final Calendar cal = Calendar.getInstance();
+ cal.clear(Calendar.MILLISECOND);
+ cal.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
// make a big array that takes a long time to toString()
for (int i = 0; i< DATA_SIZE; i++) {
- list.add(Integer.valueOf(i));
+ list.add((Calendar)cal.clone());
+ cal.add(Calendar.HOUR_OF_DAY, 1);
}
// Create a thread pool with two threads to cause the most
contention on the underlying resource.
final ExecutorService threadPool =
Executors.newFixedThreadPool(2);
============ %< =============
I'll have to retry on a faster machine though. Drills down CopyOnWrite
test to ~1s.
Cheers,
Jörg
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org