--- /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();
+ }
+}