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.models.controlloop.persistence.provider;
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.assertNotNull;
26 import static org.junit.jupiter.api.Assertions.fail;
27 import static org.mockito.ArgumentMatchers.any;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.when;
31 import java.util.List;
32 import org.junit.jupiter.api.Test;
33 import org.onap.policy.common.utils.coder.CoderException;
34 import org.onap.policy.common.utils.coder.StandardYamlCoder;
35 import org.onap.policy.common.utils.resources.ResourceUtils;
36 import org.onap.policy.models.base.PfModelException;
37 import org.onap.policy.models.provider.PolicyModelsProvider;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
40 class ServiceTemplateProviderTest {
42 private static final String TOSCA_SERVICE_TEMPLATE_YAML =
43 "src/test/resources/providers/tosca-for-smoke-testing.yaml";
45 private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
48 void testGetCommonOrInstancePropertiesFromNodeTypes() throws PfModelException {
49 var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
51 var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
53 var result = serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
54 assertNotNull(result);
55 assertThat(result).hasSize(8);
59 void testGetDerivedCommonOrInstanceNodeTemplates() throws PfModelException {
60 var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
62 var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
64 var commonOrInstanceNodeTypeProps =
65 serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
67 var result = serviceTemplateProvider.getDerivedCommonOrInstanceNodeTemplates(
68 serviceTemplate.getToscaTopologyTemplate().getNodeTemplates(), commonOrInstanceNodeTypeProps);
70 assertNotNull(result);
71 assertThat(result).hasSize(8);
75 void testCreateServiceTemplate() throws PfModelException {
76 var modelsProvider = mock(PolicyModelsProvider.class);
77 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
79 var serviceTemplate = new ToscaServiceTemplate();
80 when(modelsProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
82 var result = serviceTemplateProvider.createServiceTemplate(serviceTemplate);
84 assertThat(result).isEqualTo(serviceTemplate);
88 void testDeleteServiceTemplate() throws PfModelException {
89 var serviceTemplate = new ToscaServiceTemplate();
90 serviceTemplate.setName("Name");
91 serviceTemplate.setVersion("1.0.0");
92 var modelsProvider = mock(PolicyModelsProvider.class);
93 when(modelsProvider.deleteServiceTemplate(serviceTemplate.getName(), serviceTemplate.getVersion()))
94 .thenReturn(serviceTemplate);
96 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
98 serviceTemplateProvider.deleteServiceTemplate(serviceTemplate.getName(), serviceTemplate.getVersion());
100 assertThat(result).isEqualTo(serviceTemplate);
104 void testGetServiceTemplateListEmpty() throws PfModelException {
105 var modelsProvider = mock(PolicyModelsProvider.class);
106 when(modelsProvider.getServiceTemplateList(any(String.class), any(String.class))).thenReturn(List.of());
108 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
109 assertThatThrownBy(() -> serviceTemplateProvider.getToscaServiceTemplate("Name", "1.0.0"))
110 .hasMessage("Control Loop definitions not found");
114 void testGetServiceTemplateList() throws PfModelException {
115 var serviceTemplate = new ToscaServiceTemplate();
116 serviceTemplate.setName("Name");
117 serviceTemplate.setVersion("1.0.0");
118 var modelsProvider = mock(PolicyModelsProvider.class);
119 when(modelsProvider.getServiceTemplateList(serviceTemplate.getName(), serviceTemplate.getVersion()))
120 .thenReturn(List.of(serviceTemplate));
122 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
123 var result = serviceTemplateProvider.getToscaServiceTemplate(serviceTemplate.getName(),
124 serviceTemplate.getVersion());
126 assertThat(result).isEqualTo(serviceTemplate);
130 void testGetServiceTemplate() throws PfModelException {
131 var serviceTemplate = new ToscaServiceTemplate();
132 serviceTemplate.setName("Name");
133 serviceTemplate.setVersion("1.0.0");
134 var modelsProvider = mock(PolicyModelsProvider.class);
135 when(modelsProvider.getServiceTemplateList(serviceTemplate.getName(), serviceTemplate.getVersion()))
136 .thenReturn(List.of(serviceTemplate));
138 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
140 serviceTemplateProvider.getServiceTemplateList(serviceTemplate.getName(), serviceTemplate.getVersion());
142 assertThat(result).hasSize(1);
143 assertThat(result.get(0)).isEqualTo(serviceTemplate);
147 * Get ToscaServiceTemplate from resource.
149 * @param path path of the resource
151 public static ToscaServiceTemplate getToscaServiceTemplate(String path) {
154 return YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(path), ToscaServiceTemplate.class);
155 } catch (CoderException e) {
156 fail("Cannot read or decode " + path);