package org.skywalking.apm.collector.worker.httpserver;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.skywalking.apm.collector.actor.LocalAsyncWorkerRef;
import org.skywalking.apm.collector.worker.segment.entity.Segment;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.StringReader;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.*;
/**
* @author pengys5
*/
public class PostWithHttpServletTestCase {
private LocalAsyncWorkerRef workerRef;
private AbstractPost.PostWithHttpServlet servlet;
private HttpServletRequest request;
private HttpServletResponse response;
private PrintWriter writer;
@Before
public void init() throws Exception {
workerRef = mock(LocalAsyncWorkerRef.class);
servlet = new AbstractPost.PostWithHttpServlet(workerRef);
request = mock(HttpServletRequest.class);
response = mock(HttpServletResponse.class);
writer = mock(PrintWriter.class);
when(response.getWriter()).thenReturn(writer);
}
@Test
public void testDoPost() throws Exception {
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Integer status = (Integer) invocation.getArguments()[0];
Assert.assertEquals(new Integer(200), status);
return null;
}
}).when(response).setStatus(anyInt());
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Segment segment = (Segment) invocation.getArguments()[0];
Assert.assertEquals("TestTest2", segment.getTraceSegmentId());
return null;
}
}).when(workerRef).tell(any(Segment.class));
BufferedReader bufferedReader = new BufferedReader(new StringReader("[{\"ts\":\"TestTest2\"}]"));
when(request.getReader()).thenReturn(bufferedReader);
servlet.doPost(request, response);
}
@Test
public void testDoPostError() throws Exception {
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Integer status = (Integer) invocation.getArguments()[0];
Assert.assertEquals(new Integer(500), status);
return null;
}
}).when(response).setStatus(anyInt());
doThrow(new Exception()).when(workerRef).tell(anyString());
servlet.doPost(request, response);
}
}