summaryrefslogtreecommitdiffstats
path: root/bcel-builder/testsrc/org
diff options
context:
space:
mode:
authoraclement <aclement>2009-09-04 18:42:08 +0000
committeraclement <aclement>2009-09-04 18:42:08 +0000
commit0e2043d0f6ed939e360c78767d9f6e330cc77340 (patch)
tree2b28b281a710889be047fbf144b838bae08fa3ea /bcel-builder/testsrc/org
parenta7ce136ad755909c4ef63a3fb5c6a2fec36682a8 (diff)
downloadaspectj-0e2043d0f6ed939e360c78767d9f6e330cc77340.tar.gz
aspectj-0e2043d0f6ed939e360c78767d9f6e330cc77340.zip
281654: concurrency problem
Diffstat (limited to 'bcel-builder/testsrc/org')
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java18
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/NonCachingClassLoaderRepositoryTest.java149
2 files changed, 152 insertions, 15 deletions
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java
index cf270b5b0..2979c12e3 100644
--- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/AllTests.java
@@ -15,24 +15,11 @@ package org.aspectj.apache.bcel.classfile.tests;
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.aspectj.apache.bcel.classfile.tests.AnnotationAccessFlagTest;
-import org.aspectj.apache.bcel.classfile.tests.AnnotationDefaultAttributeTest;
-import org.aspectj.apache.bcel.classfile.tests.ElementValueGenTest;
-import org.aspectj.apache.bcel.classfile.tests.EnclosingMethodAttributeTest;
-import org.aspectj.apache.bcel.classfile.tests.EnumAccessFlagTest;
-import org.aspectj.apache.bcel.classfile.tests.FieldAnnotationsTest;
-import org.aspectj.apache.bcel.classfile.tests.GeneratingAnnotatedClassesTest;
-import org.aspectj.apache.bcel.classfile.tests.LocalVariableTypeTableTest;
-import org.aspectj.apache.bcel.classfile.tests.MethodAnnotationsTest;
-import org.aspectj.apache.bcel.classfile.tests.RuntimeVisibleAnnotationAttributeTest;
-import org.aspectj.apache.bcel.classfile.tests.RuntimeVisibleParameterAnnotationAttributeTest;
-import org.aspectj.apache.bcel.classfile.tests.VarargsTest;
-
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Tests for BCEL");
- //$JUnit-BEGIN$
+ // $JUnit-BEGIN$
suite.addTestSuite(Fundamentals.class);
suite.addTestSuite(RuntimeVisibleParameterAnnotationAttributeTest.class);
suite.addTestSuite(AnnotationDefaultAttributeTest.class);
@@ -40,6 +27,7 @@ public class AllTests {
suite.addTestSuite(MethodAnnotationsTest.class);
suite.addTestSuite(RuntimeVisibleAnnotationAttributeTest.class);
suite.addTestSuite(ClassloaderRepositoryTest.class);
+ suite.addTestSuite(NonCachingClassLoaderRepositoryTest.class);
suite.addTestSuite(EnumAccessFlagTest.class);
suite.addTestSuite(LocalVariableTypeTableTest.class);
suite.addTestSuite(VarargsTest.class);
@@ -54,7 +42,7 @@ public class AllTests {
suite.addTestSuite(GenericSignatureParsingTest.class);
suite.addTestSuite(GenericsErasureTesting.class);
suite.addTestSuite(AnonymousClassTest.class);
- //$JUnit-END$
+ // $JUnit-END$
return suite;
}
} \ No newline at end of file
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/NonCachingClassLoaderRepositoryTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/NonCachingClassLoaderRepositoryTest.java
new file mode 100644
index 000000000..c777f75de
--- /dev/null
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/NonCachingClassLoaderRepositoryTest.java
@@ -0,0 +1,149 @@
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache BCEL" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache BCEL", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+package org.aspectj.apache.bcel.classfile.tests;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.aspectj.apache.bcel.classfile.JavaClass;
+import org.aspectj.apache.bcel.util.NonCachingClassLoaderRepository;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class NonCachingClassLoaderRepositoryTest extends TestCase {
+
+ private final NonCachingClassLoaderRepository nonCachingClassLoaderRepository = new NonCachingClassLoaderRepository(
+ NonCachingClassLoaderRepositoryTest.class.getClassLoader());
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ abstract class DoneChecker implements Runnable {
+ private volatile boolean success = false;
+ private volatile boolean done = false;
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public boolean isDone() {
+ return done;
+ }
+
+ protected void setDone(boolean successFully) {
+ success = successFully;
+ done = true;
+ }
+
+ public abstract void run();
+ }
+
+ class Loader extends DoneChecker implements Runnable {
+ public void run() {
+ try {
+ JavaClass javaClass = nonCachingClassLoaderRepository.loadClass(NonCachingClassLoaderRepositoryTest.class
+ .getCanonicalName());
+ nonCachingClassLoaderRepository.clear();
+ setDone(true);
+ } catch (Throwable e) {
+ e.printStackTrace(System.out);
+ setDone(false);
+ }
+ }
+ }
+
+ class Clearer extends DoneChecker implements Runnable {
+ public void run() {
+ try {
+ nonCachingClassLoaderRepository.clear();
+ setDone(true);
+ } catch (Throwable e) {
+ e.printStackTrace(System.out);
+ setDone(false);
+ }
+ }
+ }
+
+ public void testConcurrency() throws ClassNotFoundException, InterruptedException {
+ List loaders = new ArrayList();
+ int i1 = 1000;
+ for (int i = 0; i < i1; i++) {
+ DoneChecker loader = new Loader();
+ loaders.add(loader);
+ new Thread(loader).start();
+ DoneChecker clearer = new Clearer();
+ loaders.add(clearer);
+ new Thread(clearer).start();
+ }
+
+ for (int i = 0; i < i1 * 2; i++) {
+ DoneChecker loader = (DoneChecker) loaders.get(i);
+ while (!loader.isDone()) {
+ Thread.sleep(10);
+ }
+ assertTrue("Loader " + i + " is supposed to run successfully", loader.isSuccess());
+ }
+
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+}