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

Reply via email to