2  * ============LICENSE_START=======================================================
 
   3   * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
 
   4  * ================================================================================
 
   5  * Licensed under the Apache License, Version 2.0 (the "License");
 
   6  * you may not use this file except in compliance with the License.
 
   7  * You may obtain a copy of the License at
 
   9  *      http://www.apache.org/licenses/LICENSE-2.0
 
  11  * Unless required by applicable law or agreed to in writing, software
 
  12  * distributed under the License is distributed on an "AS IS" BASIS,
 
  13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  14  * See the License for the specific language governing permissions and
 
  15  * limitations under the License.
 
  16  * ============LICENSE_END=========================================================
 
  19 package org.onap.policy.pdp.xacml.application.common.operationshistory;
 
  21 import static org.junit.Assert.assertEquals;
 
  23 import java.io.FileInputStream;
 
  24 import java.lang.reflect.Method;
 
  26 import java.time.Instant;
 
  28 import java.util.Properties;
 
  29 import java.util.UUID;
 
  31 import javax.persistence.EntityManager;
 
  32 import javax.persistence.Persistence;
 
  33 import javax.persistence.Query;
 
  35 import org.junit.AfterClass;
 
  36 import org.junit.BeforeClass;
 
  37 import org.junit.Test;
 
  38 import org.slf4j.Logger;
 
  39 import org.slf4j.LoggerFactory;
 
  41 public class CountRecentOperationsPipTest {
 
  42     private static final Logger LOGGER = LoggerFactory.getLogger(CountRecentOperationsPipTest.class);
 
  43     private static CountRecentOperationsPip pipEngine;
 
  45     private static EntityManager em;
 
  48      * Create an instance of our engine and also the persistence
 
  51      * @throws Exception connectivity issues
 
  54     public static void setup() throws Exception {
 
  55         LOGGER.info("Setting up PIP Testing");
 
  59         pipEngine = new CountRecentOperationsPip();
 
  61         // Load our test properties to use
 
  63         Properties properties = new Properties();
 
  64         try (FileInputStream is = new FileInputStream("src/test/resources/test.properties")) {
 
  68         // Configure it using properties
 
  70         pipEngine.configure("issuer", properties);
 
  71         LOGGER.info("PIP configured now creating our entity manager");
 
  72         LOGGER.info("properties {}", properties);
 
  74         // Connect to in-mem db
 
  76         String persistenceUnit = CountRecentOperationsPip.ISSUER_NAME + ".persistenceunit";
 
  77         LOGGER.info("persistenceunit {}", persistenceUnit);
 
  78         em = Persistence.createEntityManagerFactory(properties.getProperty(persistenceUnit), properties)
 
  79                 .createEntityManager();
 
  83         LOGGER.info("Configured own entity manager", em.toString());
 
  86     private Dbao createEntry(String cl, String target, String outcome) {
 
  90         Dbao newEntry = new Dbao();
 
  91         newEntry.setClosedLoopName(cl);
 
  92         newEntry.setTarget(target);
 
  93         newEntry.setOutcome(outcome);
 
  94         newEntry.setActor("Controller");
 
  95         newEntry.setOperation("operationA");
 
  96         newEntry.setStarttime(Date.from(Instant.now().minusMillis(20000)));
 
  97         newEntry.setEndtime(Date.from(Instant.now()));
 
  98         newEntry.setRequestId(UUID.randomUUID().toString());
 
 103     public void testGetCountFromDb() throws Exception {
 
 105         // Use reflection to run getCountFromDB
 
 107         Method method = CountRecentOperationsPip.class.getDeclaredMethod("doDatabaseQuery",
 
 113         method.setAccessible(true);
 
 117         Dbao newEntry = createEntry("cl-foobar-1", "vnf-1", "SUCCESS");
 
 121         long count = (long) method.invoke(pipEngine, newEntry.getActor(), newEntry.getOperation(), newEntry.getTarget(),
 
 126         assertEquals(0, count);
 
 130         em.getTransaction().begin();
 
 131         em.persist(newEntry);
 
 132         em.getTransaction().commit();
 
 134         // Directly check ground truth
 
 136         Query queryCount = em.createNativeQuery("select count(*) as numops from operationshistory")
 
 138         LOGGER.info("{} entries", queryCount.getSingleResult());
 
 142         count = (long) method.invoke(pipEngine, newEntry.getActor(), newEntry.getOperation(), newEntry.getTarget(),
 
 145         // Should count 1 entry now
 
 147         assertEquals(1, count);
 
 151      * Close the entity manager.
 
 154     public static void cleanup() {