2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019-2020 Nordix Foundation.
 
   4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
 
   5  * ================================================================================
 
   6  * Licensed under the Apache License, Version 2.0 (the "License");
 
   7  * you may not use this file except in compliance with the License.
 
   8  * You may obtain a copy of the License at
 
  10  *      http://www.apache.org/licenses/LICENSE-2.0
 
  12  * Unless required by applicable law or agreed to in writing, software
 
  13  * distributed under the License is distributed on an "AS IS" BASIS,
 
  14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  15  * See the License for the specific language governing permissions and
 
  16  * limitations under the License.
 
  18  * SPDX-License-Identifier: Apache-2.0
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.policy.models.provider.impl;
 
  24 import static org.junit.Assert.assertEquals;
 
  26 import com.google.gson.Gson;
 
  27 import com.google.gson.GsonBuilder;
 
  29 import java.util.LinkedHashMap;
 
  31 import java.util.Map.Entry;
 
  32 import java.util.Properties;
 
  34 import org.eclipse.persistence.config.PersistenceUnitProperties;
 
  35 import org.junit.AfterClass;
 
  36 import org.junit.BeforeClass;
 
  37 import org.junit.Test;
 
  38 import org.onap.policy.common.utils.resources.ResourceUtils;
 
  39 import org.onap.policy.models.base.PfModelException;
 
  40 import org.onap.policy.models.dao.DaoParameters;
 
  41 import org.onap.policy.models.dao.PfDao;
 
  42 import org.onap.policy.models.dao.PfDaoFactory;
 
  43 import org.onap.policy.models.dao.impl.DefaultPfDao;
 
  44 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
 
  45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 
  46 import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider;
 
  47 import org.yaml.snakeyaml.Yaml;
 
  50  * Test of the {@link AuthorativeToscaProvider} class.
 
  52  * @author Liam Fallon (liam.fallon@est.tech)
 
  54 public class AuthorativeToscaProviderReferenceTest {
 
  55     private static PfDao pfDao;
 
  56     private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
 
  59     private static final String[] EXAMPLE_POLICY_TYPES = {
 
  60         "onap.policies.controlloop.guard.Blacklist#1.0.0"
 
  61                 + "#policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
 
  62         "onap.policies.controlloop.guard.coordination.FirstBlocksSecond#1.0.0"
 
  63                 + "#policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
 
  64         "onap.policies.controlloop.guard.FrequencyLimiter#1.0.0"
 
  65                 + "#policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
 
  66         "onap.policies.controlloop.guard.MinMax#1.0.0"
 
  67                 + "#policytypes/onap.policies.controlloop.guard.MinMax.yaml",
 
  68         "onap.policies.controlloop.operational.Common#1.0.0"
 
  69                 + "#policytypes/onap.policies.controlloop.operational.Common.yaml",
 
  70         "onap.policies.controlloop.Operational#1.0.0"
 
  71                 + "#policytypes/onap.policies.controlloop.Operational.yaml",
 
  72         "onap.policies.drools.Controller#1.0.0"
 
  73                 + "#policytypes/onap.policies.drools.Controller.yaml",
 
  74         "onap.policies.monitoring.cdap.tca.hi.lo.app#1.0.0"
 
  75                 + "#policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml",
 
  76         "onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server#1.0.0"
 
  77                 + "#policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
 
  78         "onap.policies.Naming#1.0.0"
 
  79                 + "#policytypes/onap.policies.Naming.yaml",
 
  80         "onap.policies.native.Apex#1.0.0"
 
  81                 + "#policytypes/onap.policies.native.Apex.yaml",
 
  82         "onap.policies.native.Drools#1.0.0"
 
  83                 + "#policytypes/onap.policies.native.Drools.yaml",
 
  84         "onap.policies.native.Xacml#1.0.0"
 
  85                 + "#policytypes/onap.policies.native.Xacml.yaml",
 
  86         "onap.policies.optimization.resource.AffinityPolicy#1.0.0"
 
  87                 + "#policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
 
  88         "onap.policies.optimization.resource.DistancePolicy#1.0.0"
 
  89                 + "#policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
 
  90         "onap.policies.optimization.resource.HpaPolicy#1.0.0"
 
  91                 + "#policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
 
  92         "onap.policies.optimization.resource.OptimizationPolicy#1.0.0"
 
  93                 + "#policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
 
  94         "onap.policies.optimization.resource.PciPolicy#1.0.0"
 
  95                 + "#policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
 
  96         "onap.policies.optimization.resource.Vim_fit#1.0.0"
 
  97                 + "#policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
 
  98         "onap.policies.optimization.resource.VnfPolicy#1.0.0"
 
  99                 + "#policytypes/onap.policies.optimization.resource.VnfPolicy.yaml",
 
 100         "onap.policies.optimization.Resource#1.0.0"
 
 101                 + "#policytypes/onap.policies.optimization.Resource.yaml",
 
 102         "onap.policies.optimization.service.QueryPolicy#1.0.0"
 
 103                 + "#policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
 
 104         "onap.policies.optimization.service.SubscriberPolicy#1.0.0"
 
 105                 + "#policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
 
 106         "onap.policies.optimization.Service#1.0.0"
 
 107                 + "#policytypes/onap.policies.optimization.Service.yaml",
 
 108         "onap.policies.Optimization#1.0.0"
 
 109                 + "#policytypes/onap.policies.Optimization.yaml"};
 
 112     private static final Map<ToscaEntityKey, ToscaServiceTemplate> policyTypeMap = new LinkedHashMap<>();
 
 115      * Set up the DAO towards the database.
 
 117      * @throws Exception on database errors
 
 120     public static void beforeSetupDao() throws Exception {
 
 121         final DaoParameters daoParameters = new DaoParameters();
 
 122         daoParameters.setPluginClass(DefaultPfDao.class.getName());
 
 124         daoParameters.setPersistenceUnit("ToscaConceptTest");
 
 126         Properties jdbcProperties = new Properties();
 
 127         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
 
 128         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
 
 130         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
 
 131         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
 
 132         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
 
 134         daoParameters.setJdbcProperties(jdbcProperties);
 
 136         pfDao = new PfDaoFactory().createPfDao(daoParameters);
 
 137         pfDao.init(daoParameters);
 
 141      * Populate the database.
 
 143      * @throws PfModelException on database exceptions
 
 146     public static void beforeFillDatabase() throws PfModelException {
 
 147         for (String policyTypeDataString : EXAMPLE_POLICY_TYPES) {
 
 148             String[] policyTypeDataArray = policyTypeDataString.split("#");
 
 149             String policyTypeYamlDefinition = ResourceUtils.getResourceAsString(policyTypeDataArray[2]);
 
 151             Object yamlObject = new Yaml().load(policyTypeYamlDefinition);
 
 152             String policyTypeJsonDefinition = gson.toJson(yamlObject);
 
 154             ToscaServiceTemplate serviceTemplate = gson.fromJson(policyTypeJsonDefinition, ToscaServiceTemplate.class);
 
 155             policyTypeMap.put(new ToscaEntityKey(policyTypeDataArray[0], policyTypeDataArray[1]), serviceTemplate);
 
 156             new AuthorativeToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
 
 161     public static void afterTeardown() {
 
 166     public void testPolicyTypeRead() throws PfModelException {
 
 167         for (Entry<ToscaEntityKey, ToscaServiceTemplate> policyTypeMapEntry : policyTypeMap.entrySet()) {
 
 168             ToscaServiceTemplate serviceTemplate = new AuthorativeToscaProvider().getPolicyTypes(pfDao,
 
 169                     policyTypeMapEntry.getKey().getName(), policyTypeMapEntry.getKey().getVersion());
 
 171             assertEquals(1, serviceTemplate.getPolicyTypes().size());
 
 173             String originalJson = gson.toJson(policyTypeMapEntry.getValue());
 
 174             String databaseJson = gson.toJson(serviceTemplate);
 
 176             // TODO: This test has no chance of passing yet but must eventually pass to prove that the policy types
 
 177             // TODO: that were retrieved are the same as the policy types that were stored
 
 178             // assertEquals(originalJson, databaseJson);