2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019 Nordix Foundation.
 
   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.
 
  17  * SPDX-License-Identifier: Apache-2.0
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.policy.models.tosca.authorative.provider;
 
  23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
  24 import static org.junit.Assert.assertEquals;
 
  25 import static org.junit.Assert.assertNotNull;
 
  26 import static org.junit.Assert.assertTrue;
 
  28 import java.util.ArrayList;
 
  29 import java.util.List;
 
  30 import java.util.Properties;
 
  32 import org.junit.After;
 
  33 import org.junit.Before;
 
  34 import org.junit.Test;
 
  35 import org.onap.policy.common.utils.coder.StandardCoder;
 
  36 import org.onap.policy.common.utils.resources.ResourceUtils;
 
  37 import org.onap.policy.models.base.PfConceptKey;
 
  38 import org.onap.policy.models.base.PfModelException;
 
  39 import org.onap.policy.models.dao.DaoParameters;
 
  40 import org.onap.policy.models.dao.PfDao;
 
  41 import org.onap.policy.models.dao.PfDaoFactory;
 
  42 import org.onap.policy.models.dao.impl.DefaultPfDao;
 
  43 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 
  44 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
 
  45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 
  46 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
 
  49  * Test of the {@link AuthorativeToscaProvider} class.
 
  51  * @author Liam Fallon (liam.fallon@est.tech)
 
  53 public class AuthorativeToscaProviderPolicyTest {
 
  55     private StandardCoder standardCoder;
 
  58      * Set up the DAO towards the database.
 
  60      * @throws Exception on database errors
 
  63     public void setupDao() throws Exception {
 
  64         final DaoParameters daoParameters = new DaoParameters();
 
  65         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
 
  67         daoParameters.setPersistenceUnit("ToscaConceptTest");
 
  69         Properties jdbcProperties = new Properties();
 
  70         jdbcProperties.setProperty("javax.persistence.jdbc.user", "policy");
 
  71         jdbcProperties.setProperty("javax.persistence.jdbc.password", "P01icY");
 
  74         jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
 
  75         jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:h2:mem:testdb");
 
  78         //jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.mariadb.jdbc.Driver");
 
  79         //jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:mariadb://localhost:3306/policy");
 
  81         daoParameters.setJdbcProperties(jdbcProperties );
 
  83         pfDao = new PfDaoFactory().createPfDao(daoParameters);
 
  84         pfDao.init(daoParameters);
 
  91     public void setupGson() {
 
  92         standardCoder = new StandardCoder();
 
  96     public void teardown() throws Exception {
 
 102     public void testPoliciesGet() throws Exception {
 
 103         assertThatThrownBy(() -> {
 
 104             new AuthorativeToscaProvider().getPolicies(null, null, null);
 
 105         }).hasMessage("dao is marked @NonNull but is null");
 
 107         assertThatThrownBy(() -> {
 
 108             new AuthorativeToscaProvider().getPolicyList(null, null, null);
 
 109         }).hasMessage("dao is marked @NonNull but is null");
 
 111         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
 
 112                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
 
 113                 ToscaServiceTemplate.class);
 
 115         assertNotNull(toscaServiceTemplate);
 
 116         ToscaServiceTemplate createdServiceTemplate =
 
 117                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
 
 119         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
 
 121         ToscaPolicy beforePolicy =
 
 122                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 123         ToscaPolicy createdPolicy =
 
 124                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 125         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 126         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
 
 128         ToscaServiceTemplate gotServiceTemplate =
 
 129                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
 
 131         ToscaPolicy gotPolicy =
 
 132                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 133         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
 
 134         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
 
 136         List<ToscaPolicy> gotPolicyList =
 
 137                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
 
 138         assertEquals(1, gotPolicyList.size());
 
 139         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 141         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", null);
 
 142         assertEquals(1, gotPolicyList.size());
 
 143         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 145         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, null);
 
 146         assertEquals(1, gotPolicyList.size());
 
 147         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 149         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, "1.0.0");
 
 150         assertEquals(1, gotPolicyList.size());
 
 151         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 153         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "Nonexistant", "1.0.0");
 
 154         assertEquals(0, gotPolicyList.size());
 
 158     public void testPoliciesGetFiltered() throws Exception {
 
 159         assertThatThrownBy(() -> {
 
 160             new AuthorativeToscaProvider().getFilteredPolicies(null, null);
 
 161         }).hasMessage("dao is marked @NonNull but is null");
 
 163         assertThatThrownBy(() -> {
 
 164             new AuthorativeToscaProvider().getFilteredPolicies(null, ToscaPolicyFilter.builder().build());
 
 165         }).hasMessage("dao is marked @NonNull but is null");
 
 167         assertThatThrownBy(() -> {
 
 168             new AuthorativeToscaProvider().getFilteredPolicies(pfDao, null);
 
 169         }).hasMessage("filter is marked @NonNull but is null");
 
 171         assertThatThrownBy(() -> {
 
 172             new AuthorativeToscaProvider().getFilteredPolicyList(null, null);
 
 173         }).hasMessage("dao is marked @NonNull but is null");
 
 175         assertThatThrownBy(() -> {
 
 176             new AuthorativeToscaProvider().getFilteredPolicyList(null, ToscaPolicyFilter.builder().build());
 
 177         }).hasMessage("dao is marked @NonNull but is null");
 
 179         assertThatThrownBy(() -> {
 
 180             new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, null);
 
 181         }).hasMessage("filter is marked @NonNull but is null");
 
 183         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
 
 184                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
 
 185                 ToscaServiceTemplate.class);
 
 187         assertNotNull(toscaServiceTemplate);
 
 188         ToscaServiceTemplate createdServiceTemplate =
 
 189                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
 
 191         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
 
 193         ToscaPolicy beforePolicy =
 
 194                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 195         ToscaPolicy createdPolicy =
 
 196                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 197         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 198         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
 
 200         ToscaServiceTemplate gotServiceTemplate =
 
 201                 new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
 
 203         ToscaPolicy gotPolicy =
 
 204                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 205         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
 
 206         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
 
 208         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
 
 209                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
 
 211         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 212         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
 
 213         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
 
 215         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
 
 216                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
 
 218         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 219         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
 
 220         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
 
 222         List<ToscaPolicy> gotPolicyList =
 
 223                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
 
 224         assertEquals(1, gotPolicyList.size());
 
 225         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 228                 new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
 
 229         assertEquals(1, gotPolicyList.size());
 
 230         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 232         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
 
 233                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
 
 234         assertEquals(1, gotPolicyList.size());
 
 235         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 237         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
 
 238                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
 
 239         assertEquals(1, gotPolicyList.size());
 
 240         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
 
 244     public void testPolicyCreate() throws Exception {
 
 245         assertThatThrownBy(() -> {
 
 246             new AuthorativeToscaProvider().createPolicies(null, null);
 
 247         }).hasMessage("dao is marked @NonNull but is null");
 
 249         assertThatThrownBy(() -> {
 
 250             new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
 
 251         }).hasMessage("dao is marked @NonNull but is null");
 
 253         assertThatThrownBy(() -> {
 
 254             new AuthorativeToscaProvider().createPolicies(pfDao, null);
 
 255         }).hasMessage("serviceTemplate is marked @NonNull but is null");
 
 257         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
 
 258                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
 
 259                 ToscaServiceTemplate.class);
 
 261         assertNotNull(toscaServiceTemplate);
 
 262         ToscaServiceTemplate createdServiceTemplate =
 
 263                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
 
 265         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
 
 267         ToscaPolicy beforePolicy =
 
 268                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 269         ToscaPolicy createdPolicy =
 
 270                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 271         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 272         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
 
 277     public void testPolicyUpdate() throws Exception {
 
 278         assertThatThrownBy(() -> {
 
 279             new AuthorativeToscaProvider().createPolicies(null, null);
 
 280         }).hasMessage("dao is marked @NonNull but is null");
 
 282         assertThatThrownBy(() -> {
 
 283             new AuthorativeToscaProvider().updatePolicies(null, null);
 
 284         }).hasMessage("dao is marked @NonNull but is null");
 
 286         assertThatThrownBy(() -> {
 
 287             new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
 
 288         }).hasMessage("dao is marked @NonNull but is null");
 
 290         assertThatThrownBy(() -> {
 
 291             new AuthorativeToscaProvider().updatePolicies(pfDao, null);
 
 292         }).hasMessage("serviceTemplate is marked @NonNull but is null");
 
 294         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
 
 295                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
 
 296                 ToscaServiceTemplate.class);
 
 298         assertNotNull(toscaServiceTemplate);
 
 299         ToscaServiceTemplate createdServiceTemplate =
 
 300                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
 
 302         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
 
 304         ToscaPolicy beforePolicy =
 
 305                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 306         ToscaPolicy createdPolicy =
 
 307                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 308         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 309         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
 
 311         ToscaServiceTemplate updatedServiceTemplate =
 
 312                 new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
 
 314         ToscaPolicy updatedPolicy =
 
 315                 updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 316         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
 
 317         assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
 
 321     public void testPoliciesDelete() throws Exception {
 
 322         assertThatThrownBy(() -> {
 
 323             new AuthorativeToscaProvider().deletePolicy(null, null, null);
 
 324         }).hasMessage("dao is marked @NonNull but is null");
 
 326         assertThatThrownBy(() -> {
 
 327             new AuthorativeToscaProvider().deletePolicy(null, null, "version");
 
 328         }).hasMessage("dao is marked @NonNull but is null");
 
 330         assertThatThrownBy(() -> {
 
 331             new AuthorativeToscaProvider().deletePolicy(null, "name", null);
 
 332         }).hasMessage("dao is marked @NonNull but is null");
 
 334         assertThatThrownBy(() -> {
 
 335             new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
 
 336         }).hasMessage("dao is marked @NonNull but is null");
 
 338         assertThatThrownBy(() -> {
 
 339             new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
 
 340         }).hasMessage("name is marked @NonNull but is null");
 
 342         assertThatThrownBy(() -> {
 
 343             new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
 
 344         }).hasMessage("name is marked @NonNull but is null");
 
 346         assertThatThrownBy(() -> {
 
 347             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
 
 348         }).hasMessage("version is marked @NonNull but is null");
 
 350         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
 
 351                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
 
 352                 ToscaServiceTemplate.class);
 
 354         assertNotNull(toscaServiceTemplate);
 
 355         ToscaServiceTemplate createdServiceTemplate =
 
 356                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
 
 358         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
 
 360         ToscaPolicy beforePolicy =
 
 361                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 362         ToscaPolicy createdPolicy =
 
 363                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 364         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 365         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
 
 367         ToscaServiceTemplate deletedServiceTemplate =
 
 368                 new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
 
 370         ToscaPolicy deletedPolicy =
 
 371                 deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
 
 372         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
 
 373         assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
 
 375         ToscaServiceTemplate gotServiceTemplate =
 
 376                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
 
 378         assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
 
 382     public void testAssertPoliciesExist() throws PfModelException {
 
 383         ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
 
 385         assertThatThrownBy(() -> {
 
 386             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
 
 387         }).hasMessage("version is marked @NonNull but is null");
 
 389         assertThatThrownBy(() -> {
 
 390             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
 
 391         }).hasMessage("topology template not specified on service template");
 
 393         testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
 
 394         assertThatThrownBy(() -> {
 
 395             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
 
 396         }).hasMessage("no policies specified on topology template of service template");
 
 398         testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
 
 399         assertThatThrownBy(() -> {
 
 400             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
 
 401         }).hasMessage("An incoming list of concepts must have at least one entry");