1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Random;
24 import java.util.concurrent.Callable;
25 import java.util.concurrent.ExecutorService;
26 import java.util.concurrent.Executors;
27 import java.util.concurrent.Future;
28
29 import org.apache.hadoop.hbase.testclassification.SmallTests;
30 import org.apache.hadoop.hbase.testclassification.MetricsTests;
31
32 import org.junit.Test;
33 import org.junit.experimental.categories.Category;
34
35 import static org.junit.Assert.assertEquals;
36 import static org.junit.Assert.assertNotEquals;
37
38 @Category({MetricsTests.class, SmallTests.class})
39 public class TestCompatibilitySingletonFactory {
40
41 private static final int ITERATIONS = 100000;
42 private static final Random RANDOM = new Random();
43
44 private class TestCompatibilitySingletonFactoryCallable implements Callable<String> {
45
46 @Override
47 public String call() throws Exception {
48 Thread.sleep(RANDOM.nextInt(10));
49 RandomStringGenerator
50 instance =
51 CompatibilitySingletonFactory.getInstance(RandomStringGenerator.class);
52 return instance.getRandString();
53 }
54 }
55
56 @Test
57 public void testGetInstance() throws Exception {
58 List<TestCompatibilitySingletonFactoryCallable> callables =
59 new ArrayList<TestCompatibilitySingletonFactoryCallable>(ITERATIONS);
60 List<String> resultStrings = new ArrayList<String>(ITERATIONS);
61
62
63
64 for (int i = 0; i < ITERATIONS; i++) {
65 callables.add(new TestCompatibilitySingletonFactoryCallable());
66 }
67
68
69 ExecutorService executorService = Executors.newFixedThreadPool(100);
70 List<Future<String>> futures = executorService.invokeAll(callables);
71
72
73 for (Future<String> f : futures) {
74 resultStrings.add(f.get());
75 }
76
77
78 String firstString = resultStrings.get(0);
79
80
81
82 for (String s : resultStrings) {
83 assertEquals(firstString, s);
84 }
85
86
87 assertNotEquals(new RandomStringGeneratorImpl().getRandString(), firstString);
88 }
89 }