2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021 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.clamp.controlloop.runtime.commissioning;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
27 import java.util.ArrayList;
28 import java.util.List;
29 import org.junit.jupiter.api.AfterEach;
30 import org.junit.jupiter.api.Test;
31 import org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider.ControlLoopProvider;
32 import org.onap.policy.clamp.controlloop.runtime.main.parameters.ClRuntimeParameterGroup;
33 import org.onap.policy.clamp.controlloop.runtime.util.CommonTestData;
34 import org.onap.policy.common.utils.coder.Coder;
35 import org.onap.policy.common.utils.coder.CoderException;
36 import org.onap.policy.common.utils.coder.StandardCoder;
37 import org.onap.policy.common.utils.coder.YamlJsonTranslator;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.provider.PolicyModelsProvider;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
45 class CommissioningProviderTest {
46 private static final String TOSCA_SERVICE_TEMPLATE_YAML =
47 "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
48 private static final String TEMPLATE_IS_NULL = ".*serviceTemplate is marked non-null but is null";
49 private static final Coder CODER = new StandardCoder();
50 private static final YamlJsonTranslator yamlTranslator = new YamlJsonTranslator();
51 private static int dbNum = 0;
52 private static final Object lockit = new Object();
54 private PolicyModelsProvider modelsProvider = null;
55 private ControlLoopProvider clProvider = null;
57 private static String getParameterGroupAsString() {
59 return ResourceUtils.getResourceAsString("src/test/resources/parameters/TestParameters.json")
60 .replace("jdbc:h2:mem:testdb", "jdbc:h2:mem:commissioningdb" + dbNum);
64 * return a Cl Runtime Parameters.
66 * @throws CoderException .
68 public ClRuntimeParameterGroup getClRuntimeParameterGroup() throws CoderException {
69 synchronized (lockit) {
70 return CODER.decode(getParameterGroupAsString(), ClRuntimeParameterGroup.class);
75 void close() throws Exception {
76 if (modelsProvider != null) {
77 modelsProvider.close();
79 if (clProvider != null) {
85 * Test the fetching of control loop definitions (ToscaServiceTemplates).
90 void testGetControlLoopDefinitions() throws Exception {
91 ClRuntimeParameterGroup clRuntimeParameterGroup = getClRuntimeParameterGroup();
93 CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
94 clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
96 CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
97 ToscaServiceTemplate serviceTemplate = yamlTranslator
98 .fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
100 List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
101 assertThat(listOfTemplates).isEmpty();
103 provider.createControlLoopDefinitions(serviceTemplate);
104 listOfTemplates = provider.getControlLoopDefinitions(null, null);
105 assertThat(listOfTemplates).hasSize(2);
108 listOfTemplates = provider.getControlLoopDefinitions("org.onap.domain.pmsh.PMSHControlLoopDefinition", "1.2.3");
109 assertThat(listOfTemplates).hasSize(1);
110 for (ToscaNodeTemplate template : listOfTemplates) {
111 // Other CL elements contain PMSD instead of PMSH in their name
112 assertThat(template.getName()).doesNotContain("PMSD");
116 listOfTemplates = provider.getControlLoopDefinitions("WrongControlLoopName", "0.0.0");
117 assertThat(listOfTemplates).isEmpty();
122 * Test the creation of control loop definitions (ToscaServiceTemplates).
124 * @throws Exception .
127 void testCreateControlLoopDefinitions() throws Exception {
128 ClRuntimeParameterGroup clRuntimeParameterGroup = getClRuntimeParameterGroup();
130 CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
131 clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
133 CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
134 // Test Service template is null
135 assertThatThrownBy(() -> provider.createControlLoopDefinitions(null)).hasMessageMatching(TEMPLATE_IS_NULL);
136 List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
137 assertThat(listOfTemplates).isEmpty();
139 ToscaServiceTemplate serviceTemplate = yamlTranslator
140 .fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
142 // Response should return the number of node templates present in the service template
143 List<ToscaConceptIdentifier> affectedDefinitions =
144 provider.createControlLoopDefinitions(serviceTemplate).getAffectedControlLoopDefinitions();
145 assertThat(affectedDefinitions).hasSize(13);
146 listOfTemplates = provider.getControlLoopDefinitions(null, null);
147 assertThat(listOfTemplates).hasSize(2);
151 * Test the deletion of control loop definitions (ToscaServiceTemplate).
153 * @throws Exception .
156 void testDeleteControlLoopDefinitions() throws Exception {
157 ClRuntimeParameterGroup clRuntimeParameterGroup = getClRuntimeParameterGroup();
159 CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
160 clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
162 CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
163 ToscaServiceTemplate serviceTemplate = yamlTranslator
164 .fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
166 List<ToscaNodeTemplate> listOfTemplates = provider.getControlLoopDefinitions(null, null);
167 assertThat(listOfTemplates).isEmpty();
169 provider.createControlLoopDefinitions(serviceTemplate);
170 listOfTemplates = provider.getControlLoopDefinitions(null, null);
171 assertThat(listOfTemplates).hasSize(2);
173 provider.deleteControlLoopDefinition(serviceTemplate.getName(), serviceTemplate.getVersion());
174 listOfTemplates = provider.getControlLoopDefinitions(null, null);
175 assertThat(listOfTemplates).isEmpty();
179 * Test the fetching of control loop element definitions.
181 * @throws Exception .
184 void testGetControlLoopElementDefinitions() throws Exception {
185 ClRuntimeParameterGroup clRuntimeParameterGroup = getClRuntimeParameterGroup();
187 CommonTestData.getPolicyModelsProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
188 clProvider = new ControlLoopProvider(clRuntimeParameterGroup.getDatabaseProviderParameters());
190 CommissioningProvider provider = new CommissioningProvider(modelsProvider, clProvider);
191 ToscaServiceTemplate serviceTemplate = yamlTranslator
192 .fromYaml(ResourceUtils.getResourceAsString(TOSCA_SERVICE_TEMPLATE_YAML), ToscaServiceTemplate.class);
194 provider.getControlLoopDefinitions(null, null);
196 provider.createControlLoopDefinitions(serviceTemplate);
197 List<ToscaNodeTemplate> controlLoopDefinitionList =
198 provider.getControlLoopDefinitions("org.onap.domain.pmsh.PMSHControlLoopDefinition", "1.2.3");
200 List<ToscaNodeTemplate> controlLoopElementNodeTemplates =
201 provider.getControlLoopElementDefinitions(controlLoopDefinitionList.get(0));
203 // 4 PMSH control loop elements definitions.
204 assertThat(controlLoopElementNodeTemplates).hasSize(4);
206 List<ToscaNodeType> derivedTypes = getDerivedNodeTypes(serviceTemplate);
207 for (ToscaNodeTemplate template : controlLoopElementNodeTemplates) {
208 assertTrue(checkNodeType(template, derivedTypes));
212 private boolean checkNodeType(ToscaNodeTemplate template, List<ToscaNodeType> derivedNodeTypes) {
213 String controlLoopElementType = "org.onap.policy.clamp.controlloop.ControlLoopElement";
214 for (ToscaNodeType derivedType : derivedNodeTypes) {
215 if (template.getType().equals(derivedType.getName()) || template.getType().equals(controlLoopElementType)) {
222 private List<ToscaNodeType> getDerivedNodeTypes(ToscaServiceTemplate serviceTemplate) {
223 String type = "org.onap.policy.clamp.controlloop.ControlLoopElement";
224 List<ToscaNodeType> nodeTypes = new ArrayList<>();
225 for (ToscaNodeType nodeType : serviceTemplate.getNodeTypes().values()) {
226 if (nodeType.getDerivedFrom().equals(type)) {
227 nodeTypes.add(nodeType);