Migrate pap startup & controllers to spring boot
[policy/pap.git] / main / src / test / java / org / onap / policy / pap / main / rest / e2e / StatisticsTest.java
index aa2c59e..1331e45 100644 (file)
@@ -2,8 +2,9 @@
  * ============LICENSE_START=======================================================
  * ONAP PAP
  * ================================================================================
- * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2020 Nordix Foundation.
+ * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2020-2021 Nordix Foundation.
+ * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.policy.pap.main.rest.e2e;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 
 import java.net.HttpURLConnection;
-import java.util.ArrayList;
-import java.util.Date;
+import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.Response;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.common.utils.services.Registry;
 import org.onap.policy.models.base.PfModelException;
 import org.onap.policy.models.base.PfModelRuntimeException;
 import org.onap.policy.models.pdp.concepts.PdpStatistics;
 import org.onap.policy.models.provider.PolicyModelsProvider;
+import org.onap.policy.models.provider.PolicyModelsProviderFactory;
 import org.onap.policy.pap.main.PapConstants;
-import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper;
+import org.onap.policy.pap.main.parameters.CommonTestData;
+import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.rest.PapStatisticsManager;
 import org.onap.policy.pap.main.rest.StatisticsReport;
 
 public class StatisticsTest extends End2EndBase {
     private static final String STATISTICS_ENDPOINT = "statistics";
-    private List<PdpStatistics> recordList = new ArrayList<>();
-
+    private static final String END_TIME_NAME = "endTime";
+    private static final String START_TIME_NAME = "startTime";
+    private static final long TIMESTAMP_SEC = 1562494272;
+
+
+    /**
+     * Adds a record to the DB.
+     */
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        End2EndBase.setUpBeforeClass();
+
+        PolicyModelsProviderFactory modelProviderWrapper = new PolicyModelsProviderFactory();
+        PapParameterGroup parameterGroup = new CommonTestData().getPapParameterGroup(6969);
+        try (PolicyModelsProvider databaseProvider =
+            modelProviderWrapper.createPolicyModelsProvider(parameterGroup.getDatabaseProviderParameters())) {
+            PdpStatistics pdpStatisticsRecord = new PdpStatistics();
+            pdpStatisticsRecord.setPdpGroupName("defaultGroup");
+            pdpStatisticsRecord.setPdpSubGroupName("apex");
+            pdpStatisticsRecord.setPdpInstanceId("pdp1");
+            pdpStatisticsRecord.setTimeStamp(Instant.ofEpochSecond(TIMESTAMP_SEC));
+            pdpStatisticsRecord.setPolicyDeployCount(1);
+            pdpStatisticsRecord.setPolicyDeployFailCount(0);
+            pdpStatisticsRecord.setPolicyDeploySuccessCount(1);
+            pdpStatisticsRecord.setPolicyExecutedCount(1);
+            pdpStatisticsRecord.setPolicyExecutedFailCount(0);
+            pdpStatisticsRecord.setPolicyExecutedSuccessCount(1);
+            databaseProvider.createPdpStatistics(List.of(pdpStatisticsRecord));
+        } catch (final PfModelException exp) {
+            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, exp.getMessage());
+        }
+    }
 
     @Test
     public void test() throws Exception {
@@ -71,43 +105,28 @@ public class StatisticsTest extends End2EndBase {
 
     @Test
     public void testDb() throws Exception {
-        setupEnv();
-        Invocation.Builder invocationBuilder = sendRequest("pdps/statistics");
-        Response testResponse = invocationBuilder.get();
-        verifyResponse(testResponse);
+        verifyResponse("pdps/statistics");
     }
 
     @Test
     public void testDbWithGroup() throws Exception {
-        setupEnv();
-        Invocation.Builder invocationBuilder = sendRequest("pdps/statistics/defaultGroup");
-        Response testResponse = invocationBuilder.get();
-        verifyResponse(testResponse);
+        verifyResponse("pdps/statistics/defaultGroup");
 
     }
 
     @Test
     public void testDbWithSubGroup() throws Exception {
-        setupEnv();
-        Invocation.Builder invocationBuilder = sendRequest("pdps/statistics/defaultGroup/apex");
-        Response testResponse = invocationBuilder.get();
-        verifyResponse(testResponse);
+        verifyResponse("pdps/statistics/defaultGroup/apex");
     }
 
     @Test
     public void testDbWithPdp() throws Exception {
-        setupEnv();
-        Invocation.Builder invocationBuilder = sendRequest("pdps/statistics/defaultGroup/apex/pdp1");
-        Response testResponse = invocationBuilder.get();
-        verifyResponse(testResponse);
+        verifyResponse("pdps/statistics/defaultGroup/apex/pdp1");
     }
 
     @Test
     public void testDbWithPdpLatest() throws Exception {
-        setupEnv();
-        Invocation.Builder invocationBuilder = sendRequest("pdps/statistics/defaultGroup/apex/pdp1?recordCount=5");
-        Response testResponse = invocationBuilder.get();
-        verifyResponse(testResponse);
+        verifyResponse("pdps/statistics/defaultGroup/apex/pdp1?recordCount=5");
     }
 
     private void updateDistributionStatistics() {
@@ -123,27 +142,30 @@ public class StatisticsTest extends End2EndBase {
         mgr.updatePolicyDownloadFailureCount();
     }
 
-    private void setupEnv() {
-        PolicyModelsProviderFactoryWrapper modelProviderWrapper =
-                Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
+    private void verifyResponse(String endpoint) throws Exception {
+        Invocation.Builder invocationBuilder = sendRequest(endpoint);
+        verifyResponse(invocationBuilder.get());
 
-        try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
-            PdpStatistics pdpStatisticsRecord = new PdpStatistics();
-            pdpStatisticsRecord.setPdpGroupName("defaultGroup");
-            pdpStatisticsRecord.setPdpSubGroupName("apex");
-            pdpStatisticsRecord.setPdpInstanceId("pdp1");
-            pdpStatisticsRecord.setTimeStamp(new Date());
-            pdpStatisticsRecord.setPolicyDeployCount(1);
-            pdpStatisticsRecord.setPolicyDeployFailCount(0);
-            pdpStatisticsRecord.setPolicyDeploySuccessCount(1);
-            pdpStatisticsRecord.setPolicyExecutedCount(1);
-            pdpStatisticsRecord.setPolicyExecutedFailCount(0);
-            pdpStatisticsRecord.setPolicyExecutedSuccessCount(1);
-            recordList.add(pdpStatisticsRecord);
-            databaseProvider.createPdpStatistics(recordList);
-        } catch (final PfModelException exp) {
-            throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, exp.getMessage());
-        }
+        // repeat with "start", in range
+        invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC));
+        verifyResponse(invocationBuilder.get());
+
+        // repeat with "end", in range
+        invocationBuilder = sendRequest(addTimeParam(endpoint, END_TIME_NAME, TIMESTAMP_SEC));
+        verifyResponse(invocationBuilder.get());
+
+        // repeat with "start" and "end", in range
+        invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC - 1)
+                        + "&" + END_TIME_NAME + "=" + TIMESTAMP_SEC + 1);
+        verifyResponse(invocationBuilder.get());
+
+        // repeat with "start", out of range
+        invocationBuilder = sendRequest(addTimeParam(endpoint, START_TIME_NAME, TIMESTAMP_SEC + 1));
+        verifyEmptyResponse(invocationBuilder.get());
+
+        // repeat with "end", out of range
+        invocationBuilder = sendRequest(addTimeParam(endpoint, END_TIME_NAME, TIMESTAMP_SEC - 1));
+        verifyEmptyResponse(invocationBuilder.get());
     }
 
     private void verifyResponse(Response testResponse) {
@@ -156,4 +178,27 @@ public class StatisticsTest extends End2EndBase {
         assertEquals("apex", resRecord.get(0).getPdpSubGroupName());
         assertEquals("defaultGroup", resRecord.get(0).getPdpGroupName());
     }
+
+    private void verifyEmptyResponse(Response testResponse) {
+        assertEquals(Response.Status.OK.getStatusCode(), testResponse.getStatus());
+        Map<String, Map<String, List<PdpStatistics>>> map =
+                testResponse.readEntity(new GenericType<Map<String, Map<String, List<PdpStatistics>>>>() {});
+        assertThat(map).isEmpty();
+    }
+
+    /**
+     * Adds a timestamp parameter to an endpoint string.
+     * @param endpoint endpoint to which it should be added
+     * @param paramName parameter name
+     * @param timeSec time, in seconds
+     * @return the new endpoint, with the added parameter
+     */
+    private String addTimeParam(String endpoint, String paramName, long timeSec) {
+        StringBuilder builder = new StringBuilder(endpoint);
+        builder.append(endpoint.contains("?") ? '&' : '?');
+        builder.append(paramName);
+        builder.append('=');
+        builder.append(timeSec);
+        return builder.toString();
+    }
 }