Add unit tests for policy type and policy filters 25/84725/1
authorliamfallon <liam.fallon@est.tech>
Tue, 9 Apr 2019 16:58:20 +0000 (16:58 +0000)
committerliamfallon <liam.fallon@est.tech>
Tue, 9 Apr 2019 16:58:20 +0000 (16:58 +0000)
THis review adds unit tests for the authorative concepts in the
models-tosc module and adds unit tests for the authorative and
and database providers.

Issue-ID: POLICY-1095
Change-Id: If98deea99658056030dd47725b0c0a4266d84106
Signed-off-by: liamfallon <liam.fallon@est.tech>
12 files changed:
models-base/src/main/java/org/onap/policy/models/base/PfConceptContainer.java
models-base/src/test/java/org/onap/policy/models/base/PfObjectFilterTest.java
models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyPersistenceTest.java
models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaModel.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaServiceTemplate.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaTopologyTemplate.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/concepts/ToscaPolicyFilterTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTest.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTypeTest.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/ToscaServiceTemplateMappingTest.java [moved from models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/mapping/ToscaServiceTemplateMappingTest.java with 98% similarity]
models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java

index 65a28cf..2576aab 100644 (file)
@@ -33,6 +33,7 @@ import java.util.TreeMap;
 import javax.persistence.CascadeType;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
 import javax.ws.rs.core.Response;
@@ -69,7 +70,7 @@ public class PfConceptContainer<C extends PfConcept, A extends PfNameVersion> ex
     @EmbeddedId
     private PfConceptKey key;
 
-    @ManyToMany(cascade = CascadeType.ALL)
+    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
     private Map<PfConceptKey, C> conceptMap;
 
     /**
index c131407..6863421 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.models.base;
 
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
index 468d4d7..e8c3441 100644 (file)
@@ -41,6 +41,7 @@ import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -145,10 +146,21 @@ public class PolicyPersistenceTest {
 
         for (Map<String, ToscaPolicy> policyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) {
             for (ToscaPolicy policy : policyMap.values()) {
-                ToscaServiceTemplate goToscaServiceTemplate =
+                ToscaServiceTemplate gotToscaServiceTemplate =
                         databaseProvider.getPolicies(policy.getName(), policy.getVersion());
 
-                assertEquals(goToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+                assertEquals(gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+                        .get(policy.getName()).getType(), policy.getType());
+
+                gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build());
+
+                assertEquals(gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+                        .get(policy.getName()).getType(), policy.getType());
+
+                gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(
+                        ToscaPolicyFilter.builder().name(policy.getName()).version(policy.getVersion()).build());
+
+                assertEquals(gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
                         .get(policy.getName()).getType(), policy.getType());
             }
         }
index 7f90a0b..96360ec 100644 (file)
@@ -41,6 +41,7 @@ import org.onap.policy.models.provider.PolicyModelsProvider;
 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -146,7 +147,24 @@ public class PolicyTypePersistenceTest {
         List<ToscaPolicyType> policyTypeList =
                 databaseProvider.getPolicyTypeList(inPolicyType.getName(), inPolicyType.getVersion());
 
+        policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder()
+                .name(inPolicyType.getName()).version(inPolicyType.getVersion()).build());
+
+        assertEquals(1, policyTypeList.size());
+        assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+
+        policyTypeList = databaseProvider
+                .getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().name(inPolicyType.getName()).build());
+
         assertEquals(1, policyTypeList.size());
         assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+
+        policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build());
+        assertEquals(2, policyTypeList.size());
+        assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+
+        for (ToscaPolicyType policyType: databaseProvider.getPolicyTypeList(null, null)) {
+            databaseProvider.deletePolicyType(policyType.getName(), policyType.getVersion());
+        }
     }
 }
index a322c16..204ef5b 100644 (file)
@@ -24,6 +24,7 @@ import java.util.List;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.OneToOne;
@@ -57,7 +58,7 @@ import org.onap.policy.models.base.PfValidationResult;
 public class JpaToscaModel extends PfModel {
     private static final long serialVersionUID = 8800599637708309945L;
 
-    @OneToOne(cascade = CascadeType.ALL)
+    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     private JpaToscaServiceTemplates serviceTemplates;
 
     /**
index fda0c80..5f50e4a 100644 (file)
@@ -27,6 +27,7 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.OneToOne;
@@ -70,14 +71,15 @@ public class JpaToscaServiceTemplate extends JpaToscaEntityType<ToscaServiceTemp
     @SerializedName("tosca_definitions_version")
     private String toscaDefinitionsVersion;
 
-    @OneToOne(cascade = CascadeType.ALL)
+    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     @SerializedName("data_types")
     private JpaToscaDataTypes dataTypes;
 
-    @OneToOne(cascade = CascadeType.ALL)
+    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     @SerializedName("policy_types")
     private JpaToscaPolicyTypes policyTypes;
 
+    @Column
     @SerializedName("topology_template")
     private JpaToscaTopologyTemplate topologyTemplate;
 
index 3476258..b1c3f20 100644 (file)
@@ -26,6 +26,7 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
 import javax.persistence.OneToOne;
@@ -68,7 +69,7 @@ public class JpaToscaTopologyTemplate extends PfConcept implements PfAuthorative
     @Column(name = "description")
     private String description;
 
-    @OneToOne(cascade = CascadeType.ALL)
+    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     private JpaToscaPolicies policies;
 
     /**
index 4653296..84a0df0 100644 (file)
@@ -95,6 +95,7 @@ public class ToscaPolicyFilterTest {
                     if (policy.getName() == null) {
                         policy.setName(policyEntry.getKey());
                     }
+
                     if (policy.getVersion() == null) {
                         policy.setVersion(PfKey.NULL_KEY_VERSION);
                     }
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTest.java
new file mode 100644 (file)
index 0000000..441bbcb
--- /dev/null
@@ -0,0 +1,395 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.provider;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.dao.DaoParameters;
+import org.onap.policy.models.dao.PfDao;
+import org.onap.policy.models.dao.PfDaoFactory;
+import org.onap.policy.models.dao.impl.DefaultPfDao;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
+
+/**
+ * Test of the {@link AuthorativeToscaProvider} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class AuthorativeToscaProviderPolicyTest {
+    private Connection connection;
+    private PfDao pfDao;
+    private StandardCoder standardCoder;
+
+    /**
+     * Set up the DAO towards the database.
+     *
+     * @throws Exception on database errors
+     */
+    @Before
+    public void setupDao() throws Exception {
+        // Use the JDBC UI "jdbc:h2:mem:testdb" to test towards the h2 database
+        // Use the JDBC UI "jdbc:mariadb://localhost:3306/policy" to test towards a locally installed mariadb instance
+        connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "policy", "P01icY");
+
+        final DaoParameters daoParameters = new DaoParameters();
+        daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
+
+        // Use the persistence unit ToscaConceptTest to test towards the h2 database
+        // Use the persistence unit ToscaConceptMariaDBTest to test towards a locally installed mariadb instance
+        daoParameters.setPersistenceUnit("ToscaConceptTest");
+
+        pfDao = new PfDaoFactory().createPfDao(daoParameters);
+        pfDao.init(daoParameters);
+    }
+
+    /**
+     * Set up GSON.
+     */
+    @Before
+    public void setupGson() {
+        standardCoder = new StandardCoder();
+    }
+
+    @After
+    public void teardown() throws Exception {
+        pfDao.close();
+        connection.close();
+    }
+
+    @Test
+    public void testPoliciesGet() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getPolicies(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getPolicyList(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        ToscaPolicy gotPolicy =
+                gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        List<ToscaPolicy> gotPolicyList =
+                new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", null);
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, null);
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+    }
+
+
+    @Test
+    public void testPoliciesGetFiltered() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(null, ToscaPolicyFilter.builder().build());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(pfDao, null);
+        }).hasMessage("filter is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(null, ToscaPolicyFilter.builder().build());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, null);
+        }).hasMessage("filter is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
+
+        ToscaPolicy gotPolicy =
+                gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).build());
+
+        gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
+
+        gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        List<ToscaPolicy> gotPolicyList =
+                new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList =
+                new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+    }
+
+    @Test
+    public void testPolicyCreate() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, null);
+        }).hasMessage("serviceTemplate is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+    }
+
+
+    @Test
+    public void testPolicyUpdate() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(pfDao, null);
+        }).hasMessage("serviceTemplate is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate updatedServiceTemplate =
+                new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
+
+        ToscaPolicy updatedPolicy =
+                updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
+        assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
+    }
+
+    @Test
+    public void testPoliciesDelete() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, null, "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, "name", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
+        }).hasMessage("name is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
+        }).hasMessage("name is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
+        }).hasMessage("version is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate deletedServiceTemplate =
+                new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        ToscaPolicy deletedPolicy =
+                deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
+    }
+
+    @Test
+    public void testAssertPoliciesExist() throws PfModelException {
+        ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
+        }).hasMessage("version is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("topology template not specified on service template");
+
+        testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("no policies specified on topology template of service template");
+
+        testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("An incoming list of concepts must have at least one entry");
+    }
+}
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTypeTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTypeTest.java
new file mode 100644 (file)
index 0000000..fbb5abf
--- /dev/null
@@ -0,0 +1,395 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.tosca.authorative.provider;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.base.PfConceptKey;
+import org.onap.policy.models.base.PfModelException;
+import org.onap.policy.models.dao.DaoParameters;
+import org.onap.policy.models.dao.PfDao;
+import org.onap.policy.models.dao.PfDaoFactory;
+import org.onap.policy.models.dao.impl.DefaultPfDao;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
+
+/**
+ * Test of the {@link AuthorativeToscaProvider} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class AuthorativeToscaProviderPolicyTypeTest {
+    private Connection connection;
+    private PfDao pfDao;
+    private StandardCoder standardCoder;
+
+    /**
+     * Set up the DAO towards the database.
+     *
+     * @throws Exception on database errors
+     */
+    @Before
+    public void setupDao() throws Exception {
+        // Use the JDBC UI "jdbc:h2:mem:testdb" to test towards the h2 database
+        // Use the JDBC UI "jdbc:mariadb://localhost:3306/policy" to test towards a locally installed mariadb instance
+        connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "policy", "P01icY");
+
+        final DaoParameters daoParameters = new DaoParameters();
+        daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
+
+        // Use the persistence unit ToscaConceptTest to test towards the h2 database
+        // Use the persistence unit ToscaConceptMariaDBTest to test towards a locally installed mariadb instance
+        daoParameters.setPersistenceUnit("ToscaConceptTest");
+
+        pfDao = new PfDaoFactory().createPfDao(daoParameters);
+        pfDao.init(daoParameters);
+    }
+
+    /**
+     * Set up GSON.
+     */
+    @Before
+    public void setupGson() {
+        standardCoder = new StandardCoder();
+    }
+
+    @After
+    public void teardown() throws Exception {
+        pfDao.close();
+        connection.close();
+    }
+
+    @Test
+    public void testPoliciesGet() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getPolicies(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getPolicyList(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        ToscaPolicy gotPolicy =
+                gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        List<ToscaPolicy> gotPolicyList =
+                new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", null);
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, null);
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+    }
+
+
+    @Test
+    public void testPoliciesGetFiltered() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(null, ToscaPolicyFilter.builder().build());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicies(pfDao, null);
+        }).hasMessage("filter is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(null, ToscaPolicyFilter.builder().build());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, null);
+        }).hasMessage("filter is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
+
+        ToscaPolicy gotPolicy =
+                gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).build());
+
+        gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
+
+        gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
+        assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
+
+        List<ToscaPolicy> gotPolicyList =
+                new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList =
+                new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+
+        gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
+                ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
+        assertEquals(1, gotPolicyList.size());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
+    }
+
+    @Test
+    public void testPolicyCreate() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, null);
+        }).hasMessage("serviceTemplate is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+    }
+
+
+    @Test
+    public void testPolicyUpdate() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().updatePolicies(pfDao, null);
+        }).hasMessage("serviceTemplate is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate updatedServiceTemplate =
+                new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
+
+        ToscaPolicy updatedPolicy =
+                updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
+        assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
+    }
+
+    @Test
+    public void testPoliciesDelete() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, null, null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, null, "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, "name", null);
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
+        }).hasMessage("dao is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
+        }).hasMessage("name is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
+        }).hasMessage("name is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
+        }).hasMessage("version is marked @NonNull but is null");
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
+                ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
+                ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+                new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
+
+        ToscaPolicy beforePolicy =
+                toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        ToscaPolicy createdPolicy =
+                createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
+
+        ToscaServiceTemplate deletedServiceTemplate =
+                new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        ToscaPolicy deletedPolicy =
+                deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
+        assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
+        assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
+
+        ToscaServiceTemplate gotServiceTemplate =
+                new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
+
+        assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
+    }
+
+    @Test
+    public void testAssertPoliciesExist() throws PfModelException {
+        ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
+        }).hasMessage("version is marked @NonNull but is null");
+
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("topology template not specified on service template");
+
+        testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("no policies specified on topology template of service template");
+
+        testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
+        }).hasMessage("An incoming list of concepts must have at least one entry");
+    }
+}