Add generic methods to TOSCA providers and utils 80/116080/1
authorliamfallon <liam.fallon@est.tech>
Thu, 3 Dec 2020 12:40:58 +0000 (12:40 +0000)
committerliamfallon <liam.fallon@est.tech>
Thu, 3 Dec 2020 15:12:41 +0000 (15:12 +0000)
Generic methods for getting ehtire service templates are added to the
TOSCA providers in models-tosca.

These are needed to read service tempaltes containing entities that are
not policy related.

Issue-ID: POLICY-2900
Change-Id: If4c646037f51f8a18b66257426accc330905acf9
Signed-off-by: liamfallon <liam.fallon@est.tech>
models-tosca/src/main/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProvider.java
models-tosca/src/main/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProvider.java
models-tosca/src/main/java/org/onap/policy/models/tosca/utils/ToscaUtils.java
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderGenericTest.java [new file with mode: 0644]
models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderPolicyTypeTest.java
models-tosca/src/test/java/org/onap/policy/models/tosca/simple/provider/SimpleToscaProviderTest.java

index c1d46bf..e8f99f7 100644 (file)
@@ -56,6 +56,75 @@ public class AuthorativeToscaProvider {
     // TODO: In next release this locking mechanism should be removed and replaced with proper session handling
     private static final Object providerLockObject = "providerLockObject";
 
+    /**
+     * Get a service template.
+     *
+     * @param dao the DAO to use to access the database
+     * @param name the name of the control loop to get.
+     * @param version the version of the control loop to get.
+     * @return the control loops found
+     * @throws PfModelException on errors getting control loops
+     */
+    public ToscaServiceTemplate getServiceTemplate(@NonNull final PfDao dao, final String name, final String version)
+        throws PfModelException {
+
+        synchronized (providerLockObject) {
+            LOGGER.debug("->getServiceTemplate: name={}, version={}", name, version);
+
+            ToscaServiceTemplate gotServiceTemplate = new SimpleToscaProvider().getServiceTemplate(dao).toAuthorative();
+
+            LOGGER.debug("<-getServiceTemplate: name={}, version={}, gotServiceTemplate={}", name, version,
+                gotServiceTemplate);
+            return gotServiceTemplate;
+        }
+    }
+
+    /**
+     * Create a service template.
+     *
+     * @param dao the DAO to use to access the database
+     * @param serviceTemplate the service template to be created.
+     * @return the TOSCA service template that was created
+     * @throws PfModelException on errors creating the service template
+     */
+    public ToscaServiceTemplate createServiceTemplate(@NonNull final PfDao dao,
+        @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
+
+        synchronized (providerLockObject) {
+            LOGGER.debug("->createServiceTemplate: serviceTemplate={}", serviceTemplate);
+
+            ToscaServiceTemplate createdServiceTemplate = new SimpleToscaProvider()
+                .appendToServiceTemplate(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
+
+            LOGGER.debug("<-createServiceTemplate: createdServiceTemplate={}", createdServiceTemplate);
+            return createdServiceTemplate;
+        }
+    }
+
+    /**
+     * Delete a service template.
+     *
+     * @param dao the DAO to use to access the database
+     * @param name the name of the service template to delete.
+     * @param version the version of the service template to delete.
+     * @return the TOSCA service template that was deleted
+     * @throws PfModelException on errors deleting the control loop
+     */
+    public ToscaServiceTemplate deleteServiceTemplate(@NonNull final PfDao dao, @NonNull final String name,
+        @NonNull final String version) throws PfModelException {
+
+        synchronized (providerLockObject) {
+            LOGGER.debug("->deleteServiceTemplate: name={}, version={}", name, version);
+
+            ToscaServiceTemplate deletedServiceTemplate =
+                new SimpleToscaProvider().deleteServiceTemplate(dao).toAuthorative();
+
+            LOGGER.debug("<-deleteServiceTemplate: name={}, version={}, deletedServiceTemplate={}", name, version,
+                deletedServiceTemplate);
+            return deletedServiceTemplate;
+        }
+    }
+
     /**
      * Get policy types.
      *
@@ -186,11 +255,11 @@ public class AuthorativeToscaProvider {
         synchronized (providerLockObject) {
             LOGGER.debug("->createPolicyTypes: serviceTemplate={}", serviceTemplate);
 
-            ToscaServiceTemplate createdServiceTempalate = new SimpleToscaProvider()
+            ToscaServiceTemplate createdServiceTemplate = new SimpleToscaProvider()
                 .createPolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
 
-            LOGGER.debug("<-createPolicyTypes: createdServiceTempalate={}", createdServiceTempalate);
-            return createdServiceTempalate;
+            LOGGER.debug("<-createPolicyTypes: createdServiceTemplate={}", createdServiceTemplate);
+            return createdServiceTemplate;
         }
     }
 
@@ -206,13 +275,13 @@ public class AuthorativeToscaProvider {
         @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
 
         synchronized (providerLockObject) {
-            LOGGER.debug("->updatePolicyTypes: serviceTempalate={}", serviceTemplate);
+            LOGGER.debug("->updatePolicyTypes: serviceTemplate={}", serviceTemplate);
 
-            ToscaServiceTemplate updatedServiceTempalate = new SimpleToscaProvider()
+            ToscaServiceTemplate updatedServiceTemplate = new SimpleToscaProvider()
                 .updatePolicyTypes(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
 
-            LOGGER.debug("<-updatePolicyTypes: updatedServiceTempalate={}", updatedServiceTempalate);
-            return updatedServiceTempalate;
+            LOGGER.debug("<-updatePolicyTypes: updatedServiceTemplate={}", updatedServiceTemplate);
+            return updatedServiceTemplate;
         }
     }
 
@@ -231,12 +300,12 @@ public class AuthorativeToscaProvider {
         synchronized (providerLockObject) {
             LOGGER.debug("->deletePolicyType: name={}, version={}", name, version);
 
-            ToscaServiceTemplate deletedServiceTempalate =
+            ToscaServiceTemplate deletedServiceTemplate =
                 new SimpleToscaProvider().deletePolicyType(dao, new PfConceptKey(name, version)).toAuthorative();
 
-            LOGGER.debug("<-deletePolicyType: name={}, version={}, deletedServiceTempalate={}", name, version,
-                deletedServiceTempalate);
-            return deletedServiceTempalate;
+            LOGGER.debug("<-deletePolicyType: name={}, version={}, deletedServiceTemplate={}", name, version,
+                deletedServiceTemplate);
+            return deletedServiceTemplate;
         }
     }
 
@@ -255,12 +324,12 @@ public class AuthorativeToscaProvider {
         synchronized (providerLockObject) {
             LOGGER.debug("->getPolicies: name={}, version={}", name, version);
 
-            ToscaServiceTemplate gotServiceTempalate =
+            ToscaServiceTemplate gotServiceTemplate =
                 new SimpleToscaProvider().getPolicies(dao, name, version).toAuthorative();
 
-            LOGGER.debug("<-getPolicies: name={}, version={}, gotServiceTempalate={}", name, version,
-                gotServiceTempalate);
-            return gotServiceTempalate;
+            LOGGER.debug("<-getPolicies: name={}, version={}, gotServiceTemplate={}", name, version,
+                gotServiceTemplate);
+            return gotServiceTemplate;
         }
     }
 
@@ -288,7 +357,7 @@ public class AuthorativeToscaProvider {
                 return handlePfModelRuntimeException(pfme);
             }
 
-            LOGGER.debug("<-getPolicyList: name={}, version={}, policyTypeList={}", name, version, policyList);
+            LOGGER.debug("<-getPolicyList: name={}, version={}, policyList={}", name, version, policyList);
             return policyList;
         }
     }
@@ -370,13 +439,13 @@ public class AuthorativeToscaProvider {
         @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
 
         synchronized (providerLockObject) {
-            LOGGER.debug("->createPolicies: serviceTempalate={}", serviceTemplate);
+            LOGGER.debug("->createPolicies: serviceTemplate={}", serviceTemplate);
 
-            ToscaServiceTemplate createdServiceTempalate = new SimpleToscaProvider()
+            ToscaServiceTemplate createdServiceTemplate = new SimpleToscaProvider()
                 .createPolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
 
-            LOGGER.debug("<-createPolicies: createdServiceTempalate={}", createdServiceTempalate);
-            return createdServiceTempalate;
+            LOGGER.debug("<-createPolicies: createdServiceTemplate={}", createdServiceTemplate);
+            return createdServiceTemplate;
         }
     }
 
@@ -392,13 +461,13 @@ public class AuthorativeToscaProvider {
         @NonNull final ToscaServiceTemplate serviceTemplate) throws PfModelException {
 
         synchronized (providerLockObject) {
-            LOGGER.debug("->updatePolicies: serviceTempalate={}", serviceTemplate);
+            LOGGER.debug("->updatePolicies: serviceTemplate={}", serviceTemplate);
 
-            ToscaServiceTemplate updatedServiceTempalate = new SimpleToscaProvider()
+            ToscaServiceTemplate updatedServiceTemplate = new SimpleToscaProvider()
                 .updatePolicies(dao, new JpaToscaServiceTemplate(serviceTemplate)).toAuthorative();
 
-            LOGGER.debug("<-updatePolicies: updatedServiceTempalate={}", updatedServiceTempalate);
-            return updatedServiceTempalate;
+            LOGGER.debug("<-updatePolicies: updatedServiceTemplate={}", updatedServiceTemplate);
+            return updatedServiceTemplate;
         }
     }
 
@@ -408,7 +477,7 @@ public class AuthorativeToscaProvider {
      * @param dao the DAO to use to access the database
      * @param name the name of the policy to delete.
      * @param version the version of the policy to delete.
-     * @return the TOSCA service template containing the policy that weas deleted
+     * @return the TOSCA service template containing the policy that was deleted
      * @throws PfModelException on errors deleting policies
      */
     public ToscaServiceTemplate deletePolicy(@NonNull final PfDao dao, @NonNull final String name,
@@ -417,12 +486,12 @@ public class AuthorativeToscaProvider {
         synchronized (providerLockObject) {
             LOGGER.debug("->deletePolicy: name={}, version={}", name, version);
 
-            ToscaServiceTemplate deletedServiceTempalate =
+            ToscaServiceTemplate deletedServiceTemplate =
                 new SimpleToscaProvider().deletePolicy(dao, new PfConceptKey(name, version)).toAuthorative();
 
-            LOGGER.debug("<-deletePolicy: name={}, version={}, deletedServiceTempalate={}", name, version,
-                deletedServiceTempalate);
-            return deletedServiceTempalate;
+            LOGGER.debug("<-deletePolicy: name={}, version={}, deletedServiceTemplate={}", name, version,
+                deletedServiceTemplate);
+            return deletedServiceTemplate;
         }
     }
 
index 8ac9e80..459a329 100644 (file)
@@ -118,6 +118,24 @@ public class SimpleToscaProvider {
         return serviceTemplateToWrite;
     }
 
+    /**
+     * Delete service template.
+     *
+     * @param dao the DAO to use to access the database
+     * @return the TOSCA service template that was deleted
+     * @throws PfModelException on errors deleting the service template
+     */
+    public JpaToscaServiceTemplate deleteServiceTemplate(@NonNull final PfDao dao) throws PfModelException {
+        LOGGER.debug("->deleteServiceTemplate");
+
+        JpaToscaServiceTemplate serviceTemplate = getServiceTemplate(dao);
+
+        dao.delete(serviceTemplate);
+
+        LOGGER.debug("->deleteServiceTemplate: serviceTemplate={}", serviceTemplate);
+        return serviceTemplate;
+    }
+
     /**
      * Get data types.
      *
index 6cf6cc5..70c5027 100644 (file)
@@ -58,6 +58,7 @@ public final class ToscaUtils {
             new PfConceptKey("null",                         PfKey.NULL_KEY_VERSION),
             new PfConceptKey("list",                         PfKey.NULL_KEY_VERSION),
             new PfConceptKey("map",                          PfKey.NULL_KEY_VERSION),
+            new PfConceptKey("object",                       PfKey.NULL_KEY_VERSION),
             new PfConceptKey("scalar-unit.size",             PfKey.NULL_KEY_VERSION),
             new PfConceptKey("scalar-unit.time",             PfKey.NULL_KEY_VERSION),
             new PfConceptKey("scalar-unit.frequency",        PfKey.NULL_KEY_VERSION),
diff --git a/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderGenericTest.java b/models-tosca/src/test/java/org/onap/policy/models/tosca/authorative/provider/AuthorativeToscaProviderGenericTest.java
new file mode 100644 (file)
index 0000000..53e8311
--- /dev/null
@@ -0,0 +1,202 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 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 com.google.gson.GsonBuilder;
+import java.util.List;
+import java.util.Properties;
+import org.apache.commons.lang3.ObjectUtils;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+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.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.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test of the {@link AuthorativeToscaProvider} class.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+public class AuthorativeToscaProviderGenericTest {
+    private static final String POLICY_NO_VERSION_VERSION1 = "onap.policies.NoVersion:0.0.1";
+    private static final String POLICY_NO_VERSION = "onap.policies.NoVersion";
+    private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
+    private static final String VERSION_001 = "0.0.1";
+    private static String yamlAsJsonString;
+    private PfDao pfDao;
+    private StandardCoder standardCoder;
+
+    /**
+     * Read the policy type definition.
+     *
+     * @throws Exception on errors
+     */
+    @BeforeClass
+    public static void readPolicyDefinition() {
+        String yamlString = ResourceUtils.getResourceAsString("src/test/resources/onap.policies.NoVersion.yaml");
+
+        Object yamlObject = new Yaml().load(yamlString);
+        yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+    }
+
+    /**
+     * Set up the DAO towards the database.
+     *
+     * @throws Exception on database errors
+     */
+    @Before
+    public void setupDao() throws Exception {
+        final DaoParameters daoParameters = new DaoParameters();
+        daoParameters.setPluginClass(DefaultPfDao.class.getName());
+
+        daoParameters.setPersistenceUnit("ToscaConceptTest");
+
+        Properties jdbcProperties = new Properties();
+        jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
+        jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
+
+        // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
+        jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
+        jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
+
+        daoParameters.setJdbcProperties(jdbcProperties);
+
+        pfDao = new PfDaoFactory().createPfDao(daoParameters);
+        pfDao.init(daoParameters);
+    }
+
+    /**
+     * Set up GSON.
+     */
+    @Before
+    public void setupGson() {
+        standardCoder = new StandardCoder();
+    }
+
+    @After
+    public void teardown() {
+        pfDao.close();
+    }
+
+    @Test
+    public void testCreateGetDelete() throws Exception {
+        assertThatThrownBy(() -> {
+            new AuthorativeToscaProvider().getServiceTemplate(null, null, null);
+        }).hasMessageMatching(DAO_IS_NULL);
+
+        ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+
+        assertNotNull(toscaServiceTemplate);
+        ToscaServiceTemplate createdServiceTemplate =
+            new AuthorativeToscaProvider().createServiceTemplate(pfDao, toscaServiceTemplate);
+
+        PfConceptKey policyTypeKey = new PfConceptKey(POLICY_NO_VERSION_VERSION1);
+
+        ToscaPolicyType beforePolicyType = toscaServiceTemplate.getPolicyTypes().get(policyTypeKey.getName());
+        ToscaPolicyType createdPolicyType = createdServiceTemplate.getPolicyTypes().get(policyTypeKey.getName());
+        assertEquals(true, beforePolicyType.getName().equals(createdPolicyType.getName()));
+        assertEquals(0, ObjectUtils.compare(beforePolicyType.getDescription(), createdPolicyType.getDescription()));
+
+        ToscaServiceTemplate gotServiceTemplate = new AuthorativeToscaProvider().getServiceTemplate(pfDao, null, null);
+
+        ToscaPolicyType gotPolicyType = gotServiceTemplate.getPolicyTypes().get(policyTypeKey.getName());
+        assertEquals(true, beforePolicyType.getName().equals(gotPolicyType.getName()));
+        assertEquals(0, ObjectUtils.compare(beforePolicyType.getDescription(), createdPolicyType.getDescription()));
+
+        List<ToscaPolicyType> gotPolicyTypeList =
+            new AuthorativeToscaProvider().getPolicyTypeList(pfDao, POLICY_NO_VERSION, VERSION_001);
+        assertEquals(2, gotPolicyTypeList.size());
+        assertEquals(true, beforePolicyType.getName().equals(gotPolicyType.getName()));
+
+        gotPolicyTypeList = new AuthorativeToscaProvider().getPolicyTypeList(pfDao, POLICY_NO_VERSION, null);
+        assertEquals(2, gotPolicyTypeList.size());
+        assertEquals(true, beforePolicyType.getName().equals(gotPolicyType.getName()));
+
+        gotPolicyTypeList = new AuthorativeToscaProvider().getPolicyTypeList(pfDao, null, null);
+        assertEquals(2, gotPolicyTypeList.size());
+        assertEquals(true, beforePolicyType.getName().equals(gotPolicyType.getName()));
+
+        gotPolicyTypeList = new AuthorativeToscaProvider().getPolicyTypeList(pfDao, null, VERSION_001);
+        assertEquals(2, gotPolicyTypeList.size());
+        assertEquals(true, beforePolicyType.getName().equals(gotPolicyType.getName()));
+
+        assertThatThrownBy(
+            () -> new AuthorativeToscaProvider().getPolicyTypeList(new DefaultPfDao(), POLICY_NO_VERSION, VERSION_001))
+                .hasMessageContaining("Policy Framework DAO has not been initialized");
+
+        assertTrue(new AuthorativeToscaProvider().getPolicyTypeList(pfDao, "i.dont.Exist", VERSION_001).isEmpty());
+
+        ToscaServiceTemplate deletedServiceTemplate =
+            new AuthorativeToscaProvider().deleteServiceTemplate(pfDao, "Dummy", "0.0.1");
+        assertEquals(2, deletedServiceTemplate.getPolicyTypes().size());
+    }
+
+    @Test
+    public void testNullParameters() throws Exception {
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().getServiceTemplate(null, null, null))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().createServiceTemplate(null, null))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().createServiceTemplate(pfDao, null))
+            .hasMessageMatching("^serviceTemplate is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().createServiceTemplate(null, new ToscaServiceTemplate()))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(null, null, null))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(null, null, "0.0.1"))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(null, "Dummy", null))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(null, "Dummy", "0.0.1"))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(pfDao, null, null))
+            .hasMessageMatching("^name is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(pfDao, null, "0.0.1"))
+            .hasMessageMatching("^name is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().deleteServiceTemplate(pfDao, "Dummy", null))
+            .hasMessageMatching("^version is marked .*on.*ull but is null$");
+    }
+}
index 66ed700..0e11645 100644 (file)
@@ -418,4 +418,10 @@ public class AuthorativeToscaProviderPolicyTypeTest {
             new AuthorativeToscaProvider().createPolicyTypes(pfDao, testServiceTemplate);
         }).hasMessage("An incoming list of concepts must have at least one entry");
     }
+
+    @Test
+    public void testNullParameters() throws Exception {
+        assertThatThrownBy(() -> new AuthorativeToscaProvider().getPolicyTypeList(null, null, null))
+            .hasMessageMatching("^dao is marked .*on.*ull but is null$");
+    }
 }
index c597cd4..1e18f12 100644 (file)
@@ -840,6 +840,43 @@ public class SimpleToscaProviderTest {
         }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
     }
 
+    @Test
+    public void testDeleteServiceTemplate() throws PfModelException {
+        assertThatThrownBy(() -> {
+            new SimpleToscaProvider().deleteServiceTemplate(null);
+        }).hasMessageMatching("^dao is marked .*on.*ull but is null$");
+
+        assertThatThrownBy(() -> {
+            new SimpleToscaProvider().deleteServiceTemplate(pfDao);
+        }).hasMessage("service template not found in database");
+
+        JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
+
+        PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
+        JpaToscaDataType dataType0 = new JpaToscaDataType();
+        dataType0.setKey(dataType0Key);
+        serviceTemplate.setDataTypes(new JpaToscaDataTypes());
+        serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
+
+        JpaToscaServiceTemplate createdServiceTemplate =
+            new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
+
+        assertEquals(1, createdServiceTemplate.getDataTypes().getConceptMap().size());
+        assertEquals(dataType0, createdServiceTemplate.getDataTypes().get(dataType0Key));
+        assertEquals(null, createdServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
+
+        JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deleteServiceTemplate(pfDao);
+
+        assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
+    }
+
+    @Test
+    public void testNullParameters() {
+        assertThatThrownBy(() -> {
+            new SimpleToscaProvider().getCascadedDataTypes(null, null, null);
+        }).hasMessageMatching("^dbServiceTemplate is marked .*on.*ull but is null$");
+    }
+
     private void createPolicyTypes() throws CoderException, PfModelException {
         Object yamlObject = new Yaml()
             .load(ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.tcagen2.yaml"));