2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021-2022 Nordix Foundation.
4 * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.clamp.acm.runtime.commissioning;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.verify;
28 import static org.mockito.Mockito.when;
29 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
30 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_ST_TEMPLATE_YAML;
32 import com.fasterxml.jackson.databind.ObjectMapper;
33 import com.fasterxml.jackson.databind.PropertyNamingStrategies;
34 import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper;
35 import java.util.List;
37 import java.util.Objects;
38 import org.junit.jupiter.api.Test;
39 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
40 import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider;
41 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
42 import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
43 import org.onap.policy.common.utils.coder.Coder;
44 import org.onap.policy.common.utils.coder.StandardCoder;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaCapabilityType;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
51 import org.onap.policy.models.tosca.authorative.concepts.ToscaRelationshipType;
52 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
55 class CommissioningProviderTest {
57 private static final Coder CODER = new StandardCoder();
58 private final ObjectMapper mapper = new ObjectMapper();
61 * Test the fetching of automation composition definitions (ToscaServiceTemplates).
66 void testGetAutomationCompositionDefinitions() throws Exception {
67 var acProvider = mock(AutomationCompositionProvider.class);
68 var participantProvider = mock(ParticipantProvider.class);
69 var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
71 CommissioningProvider provider =
72 new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
74 List<ToscaNodeTemplate> listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
75 assertThat(listOfTemplates).isEmpty();
77 when(acProvider.getFilteredNodeTemplates(any()))
78 .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
79 listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
80 assertThat(listOfTemplates).hasSize(2);
84 * Test the creation of automation composition definitions (ToscaServiceTemplates).
89 void testCreateAutomationCompositionDefinitions() throws Exception {
90 var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
91 var acProvider = mock(AutomationCompositionProvider.class);
92 var participantProvider = mock(ParticipantProvider.class);
94 CommissioningProvider provider =
95 new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
97 List<ToscaNodeTemplate> listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
98 assertThat(listOfTemplates).isEmpty();
100 ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
101 when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
103 // Response should return the number of node templates present in the service template
104 List<ToscaConceptIdentifier> affectedDefinitions = provider
105 .createAutomationCompositionDefinitions(serviceTemplate).getAffectedAutomationCompositionDefinitions();
106 assertThat(affectedDefinitions).hasSize(13);
108 when(acProvider.getFilteredNodeTemplates(any()))
109 .thenReturn(List.of(new ToscaNodeTemplate(), new ToscaNodeTemplate()));
111 listOfTemplates = provider.getAutomationCompositionDefinitions(null, null);
112 assertThat(listOfTemplates).hasSize(2);
116 * Test the fetching of a full ToscaServiceTemplate object - as opposed to the reduced template that is being
117 * tested in the testGetToscaServiceTemplateReduced() test.
121 void testGetToscaServiceTemplate() throws Exception {
122 var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
123 var acProvider = mock(AutomationCompositionProvider.class);
124 var participantProvider = mock(ParticipantProvider.class);
126 CommissioningProvider provider =
127 new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
128 ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_ST_TEMPLATE_YAML);
129 when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
131 provider.createAutomationCompositionDefinitions(serviceTemplate);
132 verify(serviceTemplateProvider).createServiceTemplate(serviceTemplate);
134 when(serviceTemplateProvider.getToscaServiceTemplate(null, null)).thenReturn(serviceTemplate);
136 ToscaServiceTemplate returnedServiceTemplate = provider.getToscaServiceTemplate(null, null);
137 assertThat(returnedServiceTemplate).isNotNull();
139 Map<String, ToscaNodeTemplate> nodeTemplates =
140 returnedServiceTemplate.getToscaTopologyTemplate().getNodeTemplates();
142 assertThat(nodeTemplates).hasSize(8);
146 * Test the fetching of a reduced ToscaServiceTemplate with only some of the objects from the full template.
147 * The reduced template does not contain: DataTypesAsMap or PolicyTypesAsMap.
151 void testGetToscaServiceTemplateReduced() throws Exception {
152 var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
153 var acProvider = mock(AutomationCompositionProvider.class);
154 var participantProvider = mock(ParticipantProvider.class);
156 CommissioningProvider provider =
157 new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
158 ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_ST_TEMPLATE_YAML);
159 when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
161 provider.createAutomationCompositionDefinitions(serviceTemplate);
163 when(serviceTemplateProvider.getServiceTemplateList(any(), any()))
164 .thenReturn(List.of(Objects.requireNonNull(serviceTemplate)));
166 String returnedServiceTemplate = provider.getToscaServiceTemplateReduced(null, null);
167 assertThat(returnedServiceTemplate).isNotNull();
168 ToscaServiceTemplate parsedServiceTemplate = CODER.decode(returnedServiceTemplate, ToscaServiceTemplate.class);
170 assertThat(parsedServiceTemplate.getToscaTopologyTemplate().getNodeTemplates()).hasSize(8);
174 * Tests the different schemas being returned from the schema endpoint. As schemas of the different
175 * sections of the Tosca Service Templates can be returned by the API, this test must cover all of the
176 * different sections.
180 void testGetToscaServiceTemplateSchema() throws Exception {
181 var serviceTemplateProvider = mock(ServiceTemplateProvider.class);
182 var acProvider = mock(AutomationCompositionProvider.class);
183 var participantProvider = mock(ParticipantProvider.class);
185 CommissioningProvider provider =
186 new CommissioningProvider(serviceTemplateProvider, acProvider, null, participantProvider);
187 ToscaServiceTemplate serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_ST_TEMPLATE_YAML);
188 when(serviceTemplateProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
190 provider.createAutomationCompositionDefinitions(serviceTemplate);
191 provider.initialize();
193 mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
195 Map<String, Class<?>> sections = Map.of("all", ToscaServiceTemplate.class, "data_types", ToscaDataType.class,
196 "capability_types", ToscaCapabilityType.class, "node_types", ToscaNodeType.class, "relationship_types",
197 ToscaRelationshipType.class, "policy_types", ToscaPolicyType.class, "topology_template",
198 ToscaTopologyTemplate.class, "node_templates", List.class);
200 for (Map.Entry<String, Class<?>> entry : sections.entrySet()) {
201 String returnedServiceTemplateSchema = provider.getToscaServiceTemplateSchema(entry.getKey());
202 assertThat(returnedServiceTemplateSchema).isNotNull();
204 var visitor = new SchemaFactoryWrapper();
206 if (entry.getKey().equals("node_templates")) {
207 mapper.acceptJsonFormatVisitor(
208 mapper.getTypeFactory().constructCollectionType(List.class, ToscaNodeTemplate.class), visitor);
210 mapper.acceptJsonFormatVisitor(mapper.constructType(entry.getValue()), visitor);
213 var jsonSchema = visitor.finalSchema();
214 String localServiceTemplateSchema = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonSchema);
215 assertThat(localServiceTemplateSchema).isEqualTo(returnedServiceTemplateSchema);