/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package fish.payara.nucleus.requesttracing;
import fish.payara.nucleus.requesttracing.domain.EventType;
import fish.payara.nucleus.requesttracing.domain.RequestEvent;
import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonReader;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author steve
*/
public class RequestTraceTest {
private RequestTrace trace;
public RequestTraceTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
trace = new RequestTrace();
}
@After
public void tearDown() {
}
/**
* Test of addEvent method, of class RequestTrace.
*/
@Test
public void testAddEventWithoutStarting() {
trace = new RequestTrace();
RequestEvent re = new RequestEvent("TestEvent");
trace.addEvent(re);
assertFalse(trace.isStarted());
assertFalse(trace.getTrace().contains(this));
assertEquals(0,trace.getTrace().size());
}
@Test
public void testStarting() {
assertFalse(trace.isStarted());
RequestEvent re = new RequestEvent(EventType.TRACE_START,"StartEvent");
trace.addEvent(re);
assertTrue(trace.isStarted());
assertEquals(1,trace.getTrace().size());
assertTrue(trace.getTrace().contains(re));
}
@Test
public void testEnding() throws InterruptedException {
assertFalse(trace.isStarted());
RequestEvent re = new RequestEvent(EventType.TRACE_START,"StartEvent");
trace.addEvent(re);
assertEquals(0, trace.getElapsedTime());
Thread.currentThread().sleep(100);
re = new RequestEvent(EventType.TRACE_END,"EndTrace");
trace.addEvent(re);
// add one after trace end
re = new RequestEvent("TestEvent");
trace.addEvent(re);
assertTrue(trace.getElapsedTime() > 0);
assertEquals("Trace should not add events after end", 2, trace.getTrace().size());
}
/**
* Test of getElapsedTime method, of class RequestTrace.
*/
@Test
public void testGetElapsedTimeInitial() {
trace = new RequestTrace();
assertEquals(0,trace.getElapsedTime());
}
@Test
public void testElapsedTime() throws InterruptedException {
trace = new RequestTrace();
trace.addEvent(new RequestEvent(EventType.TRACE_START,"Start"));
Thread.currentThread().sleep(1000);
trace.addEvent(new RequestEvent(EventType.TRACE_END,"Finish"));
assertTrue((900 < trace.getElapsedTime() && trace.getElapsedTime() < 1500));
}
@Test
public void testFullStream() throws InterruptedException {
RequestEvent re = new RequestEvent(EventType.TRACE_START,"Start");
trace.addEvent(re);
for (int i = 0; i < 10000; i++) {
re = new RequestEvent("Event"+i);
trace.addEvent(re);
}
Thread.currentThread().sleep(1000);
re = new RequestEvent(EventType.TRACE_END,"TraceEnd");
trace.addEvent(re);
assertTrue(trace.isStarted());
assertEquals(10002, trace.getTrace().size());
assertTrue(trace.getElapsedTime() > 0);
}
@Test
public void testConversationIDPropagation() {
RequestEvent start = new RequestEvent(EventType.TRACE_START,"Start");
trace.addEvent(start);
RequestEvent re = new RequestEvent("Event");
trace.addEvent(re);
assertEquals(start.getConversationId(), re.getConversationId());
re = new RequestEvent(EventType.TRACE_END,"End");
trace.addEvent(re);
assertEquals(start.getConversationId(), re.getConversationId());
}
@Test
public void testJSONParse() {
RequestEvent re = new RequestEvent(EventType.TRACE_START,"Start");
trace.addEvent(re);
for (int i = 0; i < 10000; i++) {
re = new RequestEvent("Event"+i);
trace.addEvent(re);
}
re = new RequestEvent(EventType.TRACE_END,"TraceEnd");
trace.addEvent(re);
String jsonString = trace.toString();
JsonReader jsonReader = Json.createReader(new StringReader(jsonString));
jsonReader.readObject();
}
@Test
public void testMultipleStartEvents() {
RequestEvent re = new RequestEvent(EventType.TRACE_START,"Start");
trace.addEvent(re);
for (int i = 0; i < 100; i++) {
re = new RequestEvent("Event"+i);
trace.addEvent(re);
}
re = new RequestEvent(EventType.TRACE_END,"TraceEnd");
trace.addEvent(re);
assertEquals(102,trace.getTrace().size());
re = new RequestEvent(EventType.TRACE_START,"Start2");
trace.addEvent(re);
assertEquals(1,trace.getTrace().size());
assertEquals("Start2", trace.getTrace().getFirst().getEventName());
}
}