package org.infinispan.client.hotrod.stress; import java.util.Random; import java.util.UUID; import java.util.concurrent.TimeUnit; import org.infinispan.client.hotrod.RemoteCache; import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * Simple PUTs/GETs test to verify performance regressions. Requires an external running server. */ @Test(groups = "stress", testName = "org.infinispan.client.hotrod.stress.RemoteClientPutGetTest", timeOut = 15*60*1000) public class RemoteClientPutGetTest { private RemoteCache<String, Object> cache; private static final int NUMBER_OF_ENTRIES = 100000; private static final int THREAD_COUNT = 10; private static final int GET_OPERATIONS = 1000000; public static void main(String[] args) throws Exception { RemoteClientPutGetTest testCase = new RemoteClientPutGetTest(); testCase.prepare(); testCase.putTest(); testCase.getTest(); } @BeforeClass public void prepare() { RemoteCacheManager cacheManager = new RemoteCacheManager(new ConfigurationBuilder().addServer().host("localhost").port(11222).build()); cache = cacheManager.getCache(); cache.clear(); } public void putTest() throws Exception { Thread[] threads = new Thread[THREAD_COUNT]; for (int i = 0; i < THREAD_COUNT; i++) { final int thread_index = i; threads[i] = new Thread(() -> { for (int j = 0; j < NUMBER_OF_ENTRIES; j++) { cache.put("key_" + thread_index + "_" + j, UUID.randomUUID().toString()); } }); } Long start = System.nanoTime(); for (int i = 0; i < THREAD_COUNT; i++) { threads[i].start(); } for (int i = 0; i < THREAD_COUNT; i++) { threads[i].join(); } Long elapsed = System.nanoTime() - start; System.out.format("Puts took: %,d s", TimeUnit.NANOSECONDS.toSeconds(elapsed)); } public void getTest() throws Exception { Thread[] threads = new Thread[THREAD_COUNT]; for (int i = 0; i < THREAD_COUNT; i++) { final int thread_index = i; threads[i] = new Thread(() -> { Random r = new Random(thread_index); for (int j = 0; j < GET_OPERATIONS; j++) { int key_id = r.nextInt(NUMBER_OF_ENTRIES); cache.get("key_" + thread_index + "_" + key_id); } }); } Long start = System.nanoTime(); for (int i = 0; i < THREAD_COUNT; i++) { threads[i].start(); } for (int i = 0; i < THREAD_COUNT; i++) { threads[i].join(); } Long elapsed = System.nanoTime() - start; System.out.format("\nGets took: %,d s", TimeUnit.NANOSECONDS.toSeconds(elapsed)); } }