1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.beanutils2.bugs;
18
19 import static org.junit.jupiter.api.Assertions.assertNotNull;
20
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.HashSet;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.Set;
30 import java.util.concurrent.ExecutorService;
31 import java.util.concurrent.Executors;
32 import java.util.concurrent.TimeUnit;
33
34 import org.apache.commons.beanutils2.WrapDynaClass;
35 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
36 import org.junit.jupiter.api.Disabled;
37 import org.junit.jupiter.api.Test;
38 import org.junit.jupiter.api.Timeout;
39
40
41
42
43
44
45 @Disabled("https://issues.apache.org/jira/browse/BEANUTILS-509.")
46 public class Jira509Test {
47
48 protected int random(final int max) {
49 return (int) (Math.random() * 100_000) % max;
50 }
51
52
53
54
55
56 @Timeout(value = 60, unit = TimeUnit.SECONDS)
57 @Test
58 public void testConcurrent() throws InterruptedException {
59 final List<Class<?>> classList = Arrays.asList(Map.class, HashMap.class, Collections.class, Arrays.class, Collection.class, Set.class, ArrayList.class,
60 List.class, HashSet.class);
61
62 final ExecutorService executor = Executors.newFixedThreadPool(100, new BasicThreadFactory.Builder().daemon(true).build());
63 try {
64
65 for (int i = 1; i < 10_000_000; i++) {
66 executor.submit(new Runnable() {
67
68 final Class<?> clazz = classList.get(random(classList.size()));
69
70 @Override
71 public void run() {
72 final WrapDynaClass w = WrapDynaClass.createDynaClass(clazz);
73 assertNotNull(w);
74 }
75
76 });
77 }
78 } finally {
79 executor.shutdown();
80 executor.awaitTermination(3500, TimeUnit.MILLISECONDS);
81 }
82 }
83
84 }