Hi Jorge, The patch I see here:
http://www.mail-archive.com/dev@commons.apache.org/msg26521.html does not apply due to formatting in the email (line lengths I think). Can you send me (ggregory at apache dor org) the patch (based on HEAD of trunk) or post a file somewhere? Thank you, Gary On Sat, Nov 12, 2011 at 7:07 AM, Jörg Schaible <joerg.schai...@gmx.de>wrote: > 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 > > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org JUnit in Action, 2nd Ed: <http://goog_1249600977>http://bit.ly/ECvg0 Spring Batch in Action: <http://s.apache.org/HOq>http://bit.ly/bqpbCK Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory