unit test for StastisticsServlet with db 07/65007/2
authorEmmett Cox <emmett.cox@ericsson.com>
Thu, 6 Sep 2018 12:58:27 +0000 (13:58 +0100)
committerEmmett Cox <emmett.cox@ericsson.com>
Thu, 6 Sep 2018 15:40:13 +0000 (16:40 +0100)
Change-Id: I32ed948f2485d13605d58fadef72903b05ca57f5
Signed-off-by: Emmett Cox <emmett.cox@ericsson.com>
Issue-ID: DMAAP-101

datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/StatisticsServlet.java
datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/StatisticsServletTest.java
datarouter-prov/src/test/resources/create.sql

index 33bf3a3..4917402 100755 (executable)
@@ -180,39 +180,8 @@ public class StatisticsServlet extends BaseServlet {
       outputType = req.getParameter("output_type");\r
     }\r
 \r
-    try {\r
-\r
-      String filterQuery = this.queryGeneretor(map);\r
-      eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);\r
-\r
-      ResultSet rs = this.getRecordsForSQL(filterQuery);\r
+    this.getRecordsForSQL(map, outputType, out, resp);\r
 \r
-      if (outputType.equals("csv")) {\r
-        resp.setContentType("application/octet-stream");\r
-        Date date = new Date();\r
-        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");\r
-        resp.setHeader("Content-Disposition",\r
-            "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");\r
-        eventlogger.info("Generating CSV file from Statistics resultset");\r
-\r
-        rsToCSV(rs, out);\r
-      } else {\r
-        eventlogger.info("Generating JSON for Statistics resultset");\r
-        this.rsToJson(rs, out);\r
-      }\r
-    } catch (IOException e) {\r
-      eventlogger.error("IOException - Generating JSON/CSV:" + e);\r
-      e.printStackTrace();\r
-    } catch (JSONException e) {\r
-      eventlogger.error("JSONException - executing SQL query:" + e);\r
-      e.printStackTrace();\r
-    } catch (SQLException e) {\r
-      eventlogger.error("SQLException - executing SQL query:" + e);\r
-      e.printStackTrace();\r
-    } catch (ParseException e) {\r
-      eventlogger.error("ParseException - executing SQL query:" + e);\r
-      e.printStackTrace();\r
-    }\r
   }\r
 \r
 \r
@@ -565,21 +534,47 @@ public class StatisticsServlet extends BaseServlet {
     intlogger.info("Error parsing time=" + s);\r
     return -1;\r
   }\r
-  private ResultSet getRecordsForSQL(String sql) {\r
-      intlogger.debug(sql);\r
+\r
+  private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out, HttpServletResponse resp) {\r
+    try {\r
+\r
+      String filterQuery = this.queryGeneretor(map);\r
+      eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);\r
+      intlogger.debug(filterQuery);\r
       long start = System.currentTimeMillis();\r
       DB db = new DB();\r
       ResultSet rs = null;\r
-      try (\r
-          Connection conn = db.getConnection()){\r
-          try(PreparedStatement pst = conn.prepareStatement(sql)){\r
-              rs = pst.executeQuery();\r
+      try (Connection conn = db.getConnection()) {\r
+        try (PreparedStatement pst = conn.prepareStatement(filterQuery)) {\r
+          rs = pst.executeQuery();\r
+          if (outputType.equals("csv")) {\r
+            resp.setContentType("application/octet-stream");\r
+            Date date = new Date();\r
+            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");\r
+            resp.setHeader("Content-Disposition",\r
+                    "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");\r
+            eventlogger.info("Generating CSV file from Statistics resultset");\r
+\r
+            rsToCSV(rs, out);\r
+          } else {\r
+            eventlogger.info("Generating JSON for Statistics resultset");\r
+            this.rsToJson(rs, out);\r
           }\r
+        }\r
       } catch (SQLException e) {\r
-          e.printStackTrace();\r
-      }\r
-          intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");\r
-          return rs;\r
+        e.printStackTrace();\r
       }\r
+      intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");\r
+    } catch (IOException e) {\r
+      eventlogger.error("IOException - Generating JSON/CSV:" + e);\r
+      e.printStackTrace();\r
+    } catch (JSONException e) {\r
+      eventlogger.error("JSONException - executing SQL query:" + e);\r
+      e.printStackTrace();\r
+    } catch (ParseException e) {\r
+      eventlogger.error("ParseException - executing SQL query:" + e);\r
+      e.printStackTrace();\r
+    }\r
   }\r
+}\r
 \r
index 0babdc4..64d13e9 100755 (executable)
 package org.onap.dmaap.datarouter.provisioning;
 
 import static org.hamcrest.Matchers.notNullValue;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.argThat;
 import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doCallRealMethod;
-import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.onap.dmaap.datarouter.provisioning.utils.DB;
 import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(StatisticsServlet.class)
-public class StatisticsServletTest extends DrServletTestBase {
+public class StatisticsServletTest {
 
   private StatisticsServlet statisticsServlet;
 
@@ -58,10 +61,31 @@ public class StatisticsServletTest extends DrServletTestBase {
   @Mock
   private HttpServletResponse response;
 
+  private DB db;
+
+  private static EntityManagerFactory emf;
+  private static EntityManager em;
+
+  @BeforeClass
+  public static void init() {
+    emf = Persistence.createEntityManagerFactory("dr-unit-tests");
+    em = emf.createEntityManager();
+    System.setProperty(
+            "org.onap.dmaap.datarouter.provserver.properties",
+            "src/test/resources/h2Database.properties");
+  }
+
+  @AfterClass
+  public static void tearDownClass() {
+    em.clear();
+    em.close();
+    emf.close();
+  }
+
   @Before
   public void setUp() throws Exception {
-    super.setUp();
     statisticsServlet = new StatisticsServlet();
+    db = new DB();
     buildRequestParameters();
   }
 
@@ -101,15 +125,9 @@ public class StatisticsServletTest extends DrServletTestBase {
   @Test
   public void Given_Request_Is_HTTP_GET_With_GroupId_But_No_FeedId_Parameters_Then_Request_Succeeds()
       throws Exception {
+    addAliasForSubstringIndex();
     ServletOutputStream outStream = mock(ServletOutputStream.class);
     when(response.getOutputStream()).thenReturn(outStream);
-    statisticsServlet = PowerMockito.mock(StatisticsServlet.class);
-    PowerMockito.doReturn(null).when(statisticsServlet, "getRecordsForSQL", anyString());
-    PowerMockito.doCallRealMethod().when(statisticsServlet, "buildMapFromRequest", anyObject());
-    PowerMockito.doCallRealMethod().when(statisticsServlet, "getTimeFromParam", anyString());
-    doNothing().when(statisticsServlet).rsToCSV(anyObject(), anyObject());
-    doCallRealMethod().when(statisticsServlet).doGet(request, response);
-    when(statisticsServlet.getFeedIdsByGroupId(anyInt())).thenReturn(new StringBuffer("1"));
     statisticsServlet.doGet(request, response);
     verify(response).setStatus(eq(HttpServletResponse.SC_OK));
   }
@@ -117,18 +135,11 @@ public class StatisticsServletTest extends DrServletTestBase {
   @Test
   public void Given_Request_Is_HTTP_GET_With_GroupId_And_FeedId_Parameters_Then_Request_Succeeds()
       throws Exception {
+    addAliasForSubstringIndex();
     when(request.getParameter("feedid")).thenReturn("1");
     when(request.getParameter("statusCode")).thenReturn("500");
     ServletOutputStream outStream = mock(ServletOutputStream.class);
     when(response.getOutputStream()).thenReturn(outStream);
-    statisticsServlet = PowerMockito.mock(StatisticsServlet.class);
-    PowerMockito.doReturn(null).when(statisticsServlet, "getRecordsForSQL", anyString());
-    PowerMockito.doCallRealMethod().when(statisticsServlet, "buildMapFromRequest", anyObject());
-    PowerMockito.doCallRealMethod().when(statisticsServlet, "getTimeFromParam", anyString());
-    doNothing().when(statisticsServlet).rsToCSV(anyObject(), anyObject());
-    doCallRealMethod().when(statisticsServlet).doGet(request, response);
-    doCallRealMethod().when(statisticsServlet).queryGeneretor(anyObject());
-    when(statisticsServlet.getFeedIdsByGroupId(anyInt())).thenReturn(new StringBuffer("1"));
     statisticsServlet.doGet(request, response);
     verify(response).setStatus(eq(HttpServletResponse.SC_OK));
   }
@@ -147,4 +158,10 @@ public class StatisticsServletTest extends DrServletTestBase {
     when(request.getParameter("groupid")).thenReturn("1");
     when(request.getParameter("subid")).thenReturn("1");
   }
+  private void addAliasForSubstringIndex() throws SQLException {
+    String sql = "CREATE ALIAS IF NOT EXISTS `SUBSTRING_INDEX`AS $$ String Function(String one, String two, String three){ return \"url\"; }$$;";
+    Connection conn = db.getConnection();
+    PreparedStatement pst = conn.prepareStatement(sql);
+    pst.execute();
+  }
 }
index c72c42a..fe0a0f8 100755 (executable)
@@ -161,4 +161,13 @@ insert into INGRESS_ROUTES(SEQUENCE, FEEDID , USERID, SUBNET, NODESET)
 VALUES (2,1,'user',null,2);
 
 insert into NODESETS(SETID, NODEID)
-VALUES (2,0);
\ No newline at end of file
+VALUES (2,0);
+
+insert into LOG_RECORDS(RECORD_ID,TYPE,EVENT_TIME,PUBLISH_ID,FEEDID,REQURI,METHOD,CONTENT_TYPE,CONTENT_LENGTH,FEED_FILEID,REMOTE_ADDR,USER,STATUS,DELIVERY_SUBID,DELIVERY_FILEID,RESULT,ATTEMPTS,REASON)
+VALUES(1,'pub',2536159564422,'ID',1,'URL','GET','application/vnd.att-dr.log-list; version=1.0',100,1,'172.0.0.8','user',204,1,1,204,0,'other');
+
+CREATE ALIAS IF NOT EXISTS `SUBSTRING_INDEX` AS $$
+    String Function(String one, String two, String three){
+        return "url";
+    }
+$$;
\ No newline at end of file