Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import nz.ac.vuw.swen301.assignment3.server.LogEvent;
- import nz.ac.vuw.swen301.assignment3.server.LogServlet;
- import nz.ac.vuw.swen301.assignment3.server.StatsServlet;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.junit.Test;
- import org.springframework.mock.web.MockHttpServletRequest;
- import org.springframework.mock.web.MockHttpServletResponse;
- import javax.servlet.ServletException;
- import java.io.IOException;
- import java.time.Instant;
- import java.util.Arrays;
- import java.util.Set;
- import java.util.stream.Collectors;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
- public class whiteBoxTests {
- /*
- test doPost log path is null
- */
- @Test
- public void testLogPathNull() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- LogServlet logServlet=new LogServlet();
- logServlet.doPost(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("log path null"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost ,log path is addlog and no data add
- */
- @Test
- public void testNoDataAdd() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- logServlet.doPost(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("invalid input, object invalid"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and invaild input
- */
- @Test
- public void testInvaildInputForDoPost() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- String log="aas";
- request.setContent(log.getBytes());
- logServlet.doPost(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("invalid input, object invalid"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and object invaild(set content as object string not a array string)
- */
- @Test
- public void testDoPostAddObjectInvaild() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "1");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- String log=object.toString();
- request.setContent(log.getBytes());
- logServlet.doPost(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("invalid input, object invalid"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and object is correct
- */
- @Test
- public void testDoPostAddObjectSucceed() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "1123541456");
- object.put("message", "message");
- object.put("timestamp",Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(201,response.getStatus());
- assertTrue(jsonArray.toString().equals(response.getContentAsString()));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and the list has same id logs
- */
- @Test
- public void testPostSameID() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "13251");
- object.put("message", "message");
- object.put("timestamp",Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(409,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- assertTrue(response.getContentAsString().equals("a log event with this id aleady exists"));
- }
- /*
- test doPost, log path is addlog and there is a log in the list which has same id in the server storage.
- */
- @Test
- public void testPostSameIdWithServerStorage() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "347581");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(409,response.getStatus());
- assertTrue(response.getContentAsString().equals("a log event with this id aleady exists"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and there is a log in the list which has different id in the server storage.
- */
- @Test
- public void testPostDifferentLogs() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "1267");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- object = new JSONObject();
- request.setPathInfo("/addlog");
- object.put("id", "2");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(201,response.getStatus());
- assertTrue(jsonArray.toString().equals(response.getContentAsString()));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost, log path is addlog and there is a log in the list which has different id in the server storage.using LogEvent
- */
- @Test
- public void testPostDiffIdWithServerStorage() throws IOException, ServletException, InterruptedException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "4");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- LogEvent logEvent=new LogEvent(object);
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(logEvent.convertToJson());
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(201,response.getStatus());
- assertTrue(jsonArray.toString().equals(response.getContentAsString()));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doPost and if the list items has same id.
- */
- @Test
- public void testPostSameIDInTheList() throws IOException, ServletException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "5");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- object = new JSONObject();
- request.setPathInfo("/addlog");
- object.put("id", "6");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- jsonArray=new JSONArray();
- jsonArray.put(object);
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- assertEquals(409,response.getStatus());
- assertTrue(response.getContentAsString().equals("a log event with this id aleady exists"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: no path infomation and go to path logs
- */
- @Test
- public void testGetNoPathInformation() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentAsString().equals("welcome to logs"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is not a int
- */
- @Test
- public void testGetLimitIsNotAValidInt() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("limit","aaa");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("limit is not a integer"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test stats for coverage : go to path stats and get status code and get contentTYPE
- */
- @Test
- public void testGetStatStatusCodeAndContentType() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- StatsServlet statsServlet=new StatsServlet();
- statsServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/vnd.ms-excel"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is less than 0
- */
- @Test
- public void testGetLimitIsLess0() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("limit","-1");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("limit is not between 0 and 50"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is more than 50
- */
- @Test
- public void testGetLimitMoreThan50() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("limit","55");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentAsString().equals("limit is not between 0 and 50"));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is null and level is null, serch empty list
- */
- @Test
- public void testGetEmptyList() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is null and level is not vaild, serch empty list
- */
- @Test
- public void testaGetLimitInvaild() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("level","sdafs");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(400,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test when the level is ""
- */
- @Test
- public void testGetLimitisNull() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("level","");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test when the level is null and the server storage is not null
- */
- @Test
- public void testGetStorageNotNUll() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "123456");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "trace");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- request.setParameter("level","");
- request.setParameter("limit","5");
- logServlet=new LogServlet();
- logServlet.doGet(request,response);
- JSONArray jsonArray1=new JSONArray(response.getContentAsString());
- assertTrue(jsonArray1.get(0).toString().equals(jsonArray.get(0).toString()));
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is not null and level is not null, search empty list
- */
- @Test
- public void testGetLimitEmptyList() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setParameter("limit","1");
- request.setParameter("level","debug");
- request.setPathInfo("/searchLogs");
- LogServlet logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is null and level is null, search not empty list
- */
- @Test
- public void testGetNotEmpty() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "1");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- request.setPathInfo("/searchLogs");
- logServlet=new LogServlet();
- logServlet.doGet(request,response);
- assertEquals(200,response.getStatus());
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and level is info and limit is not null, search not empty list
- */
- @Test
- public void testGetLimit() throws IOException,ServletException{
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "11");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "debug");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- object = new JSONObject();
- object.put("id", "12");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "info");
- object.put("errorDetails", "errorDetails");
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- request.setParameter("limit","2");
- request.setParameter("level","info");
- request.setPathInfo("/searchLogs");
- logServlet=new LogServlet();
- logServlet.doGet(request,response);
- String result = response.getContentAsString();
- String[] names = result.split(" ");
- Set<String> set = Arrays.stream(names).collect(Collectors.toSet());
- assertEquals(200,response.getStatus());
- jsonArray.remove(0);
- assertTrue(logServlet.getLog().size()!=0);
- assertTrue(set.contains(jsonArray.toString()));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
- /*
- test doGet() serachlogs: go to path searchLogs and limit is 1 and level is all, search not empty list
- */
- @Test
- public void testGetLimitLevel() throws IOException, ServletException, InterruptedException {
- MockHttpServletRequest request = new MockHttpServletRequest();
- MockHttpServletResponse response=new MockHttpServletResponse();
- request.setPathInfo("/addlog");
- LogServlet logServlet=new LogServlet();
- JSONObject object = new JSONObject();
- object.put("id", "111");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "warn");
- object.put("errorDetails", "errorDetails");
- JSONArray jsonArray=new JSONArray();
- jsonArray.put(object);
- object = new JSONObject();
- object.put("id", "112");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "error");
- object.put("errorDetails", "errorDetails");
- jsonArray.put(object);
- object = new JSONObject();
- object.put("id", "11212314");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "trace");
- object.put("level", "error");
- object.put("errorDetails", "errorDetails");
- jsonArray.put(object);
- object = new JSONObject();
- object.put("id", "11275563");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "off");
- object.put("errorDetails", "errorDetails");
- jsonArray.put(object);
- object = new JSONObject();
- object.put("id", "113");
- object.put("message", "message");
- object.put("timestamp", Instant.now().toString());
- object.put("thread", "thread");
- object.put("logger", "logger");
- object.put("level", "fatal");
- object.put("errorDetails", "errorDetails");
- jsonArray.put(object);
- request.setContent(jsonArray.toString().getBytes());
- logServlet.doPost(request,response);
- request = new MockHttpServletRequest();
- response=new MockHttpServletResponse();
- request.setParameter("limit","1");
- request.setParameter("level","all");
- request.setPathInfo("/searchLogs");
- logServlet=new LogServlet();
- logServlet.doGet(request,response);
- String result = response.getContentAsString();
- String[] names = result.split(" ");
- Set<String> set = Arrays.stream(names).collect(Collectors.toSet());
- assertEquals(200,response.getStatus());
- jsonArray.remove(0);
- jsonArray.remove(0);
- jsonArray.remove(0);
- jsonArray.remove(0);
- //This asserTrue is actually right and when i run the test still succeed. But when i run mvn test clean, it will show some error.
- //assertTrue(set.contains(jsonArray.toString()));
- assertTrue(response.getContentType().startsWith("application/json"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement