test/jdk/javax/management/remote/rest/RestAdapterPerformanceTest.java
branchjmx-rest-api
changeset 56007 d6cbabcaf518
child 56026 bd531f08d7c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/javax/management/remote/rest/RestAdapterPerformanceTest.java	Fri Jan 05 13:42:53 2018 +0530
@@ -0,0 +1,51 @@
+import org.testng.annotations.Test;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@Test
+public class RestAdapterPerformanceTest {
+
+    private static Random random = new Random(System.currentTimeMillis());
+    private static AtomicInteger count = new AtomicInteger(1);
+
+    @Test
+    public void testMultipleClients() throws Exception {
+        RestAdapterTest test = new RestAdapterTest();
+        List<Runnable> tasks = Stream.of(RestAdapterTest.class.getMethods())
+                .filter(m -> m.getName().startsWith("test")).map(m -> (Runnable)() -> {
+                    try {
+                        m.invoke(test);
+                    } catch (IllegalAccessException e) {
+                    } catch (InvocationTargetException e) {
+                    }
+                }).collect(Collectors.toList());
+
+        ThreadPoolExecutor es = (ThreadPoolExecutor) Executors.newFixedThreadPool(20);
+        es.setThreadFactory((Runnable R) -> new Thread(R, "perf-" + count.getAndIncrement()));
+        long current = System.currentTimeMillis();
+        test.setupServers();
+        for (int i = 0; i < 200; i++) {
+            Runnable task = tasks.get(random.nextInt(tasks.size()));
+            es.execute(task);
+        }
+
+        System.out.println("Submitted 200 tasks");
+        es.shutdown();
+        es.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
+        float v = (float) (System.currentTimeMillis() - current) / (float) 1000;
+        System.out.println("Total time = " + v + "s");
+        test.tearDownServers();
+    }
+}