package com.neverwinterdp.sparkngin.http;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.neverwinterdp.message.Message;
import com.neverwinterdp.yara.MetricPrinter;
import com.neverwinterdp.yara.MetricRegistry;
import com.neverwinterdp.yara.Timer;
/**
* @author Tuan Nguyen
* @email tuan08@gmail.com
*/
public class SparknginHttpPerformanceTest {
private SparknginServer server;
@Before
public void setup() throws Exception {
server = new SparknginServer() ;
}
@After
public void teardown() {
server.shutdown();
}
@Test
public void testPerformance() throws Exception {
runProfile(1, 10000);
int NUM = 100000;
runProfile(1, NUM);
//runProfile(2, NUM);
//runProfile(4, NUM);
}
public void runProfile(int numOfThread, int numOfMessagePerThread) throws Exception {
long start = System.currentTimeMillis();
server.metricRegistry.remove("*");
Thread[] thread = new Thread[numOfThread];
for(int i = 0; i < thread.length; i++) {
thread[i] = new Thread(new Producer(server.metricRegistry, numOfMessagePerThread));
thread[i].start();
}
boolean finished = false;
while(!finished) {
Thread.sleep(1000);
System.out.print(".");
finished = true;
for(int i = 0; i < thread.length; i++) {
if(thread[i].isAlive()) {
finished = false;
break;
}
}
}
long elapsed = System.currentTimeMillis() - start;
System.out.println("\nRun test in " + elapsed + "ms");
new MetricPrinter().print(server.metricRegistry) ;
}
static public class Producer implements Runnable {
int NUM_OF_MESSAGES;
MetricRegistry clientMonitor;
public Producer(MetricRegistry appMonitor, int num) {
NUM_OF_MESSAGES = num;
clientMonitor = appMonitor;
}
public void run() {
try {
JSONHttpSparknginClient mclient = new JSONHttpSparknginClient("127.0.0.1", 7080, 500, true);
int hashCode = hashCode();
for(int i = 0; i < NUM_OF_MESSAGES; i++) {
Message message = new Message("m-" + hashCode + "-"+ i, new byte[1024], true);
Timer.Context ctx = clientMonitor.timer("sparkngin", "client", "send").time();
mclient.sendPost(message, 5000);
ctx.stop();
}
mclient.waitAndClose(30000);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
}