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.ArgumentMatchers.eq;
29 import static org.mockito.Mockito.mock;
30 import static org.mockito.Mockito.when;
32 import java.util.List;
33 import org.junit.jupiter.api.Test;
34 import org.onap.policy.common.utils.coder.CoderException;
35 import org.onap.policy.common.utils.coder.StandardYamlCoder;
36 import org.onap.policy.common.utils.resources.ResourceUtils;
37 import org.onap.policy.models.base.PfModelException;
38 import org.onap.policy.models.provider.PolicyModelsProvider;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
41 class ServiceTemplateProviderTest {
43 private static final String TOSCA_SERVICE_TEMPLATE_YAML =
44 "src/test/resources/providers/tosca-for-smoke-testing.yaml";
46 private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
49 void testGetCommonOrInstancePropertiesFromNodeTypes() throws PfModelException {
50 var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
52 var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
54 var result = serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
55 assertNotNull(result);
56 assertThat(result).hasSize(8);
60 void testGetDerivedCommonOrInstanceNodeTemplates() throws PfModelException {
61 var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
63 var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
65 var commonOrInstanceNodeTypeProps =
66 serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
68 var result = serviceTemplateProvider.getDerivedCommonOrInstanceNodeTemplates(
69 serviceTemplate.getToscaTopologyTemplate().getNodeTemplates(), commonOrInstanceNodeTypeProps);
71 assertNotNull(result);
72 assertThat(result).hasSize(8);
76 void testCreateServiceTemplate() throws PfModelException {
77 var modelsProvider = mock(PolicyModelsProvider.class);
78 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
80 var serviceTemplate = new ToscaServiceTemplate();
81 when(modelsProvider.createServiceTemplate(eq(serviceTemplate))).thenReturn(serviceTemplate);
83 var result = serviceTemplateProvider.createServiceTemplate(serviceTemplate);
85 assertThat(result).isEqualTo(serviceTemplate);
89 void testDeleteServiceTemplate() throws PfModelException {
90 var serviceTemplate = new ToscaServiceTemplate();
91 serviceTemplate.setName("Name");
92 serviceTemplate.setVersion("1.0.0");
93 var modelsProvider = mock(PolicyModelsProvider.class);
94 when(modelsProvider.deleteServiceTemplate(eq(serviceTemplate.getName()), eq(serviceTemplate.getVersion())))
95 .thenReturn(serviceTemplate);
97 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
99 serviceTemplateProvider.deleteServiceTemplate(serviceTemplate.getName(), serviceTemplate.getVersion());
101 assertThat(result).isEqualTo(serviceTemplate);
105 void testGetServiceTemplateListEmpty() throws PfModelException {
106 var modelsProvider = mock(PolicyModelsProvider.class);
107 when(modelsProvider.getServiceTemplateList(any(String.class), any(String.class))).thenReturn(List.of());
109 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
110 assertThatThrownBy(() -> serviceTemplateProvider.getToscaServiceTemplate("Name", "1.0.0"))
111 .hasMessage("Control Loop definitions not found");
115 void testGetServiceTemplateList() throws PfModelException {
116 var serviceTemplate = new ToscaServiceTemplate();
117 serviceTemplate.setName("Name");
118 serviceTemplate.setVersion("1.0.0");
119 var modelsProvider = mock(PolicyModelsProvider.class);
120 when(modelsProvider.getServiceTemplateList(eq(serviceTemplate.getName()), eq(serviceTemplate.getVersion())))
121 .thenReturn(List.of(serviceTemplate));
123 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
124 var result = serviceTemplateProvider.getToscaServiceTemplate(serviceTemplate.getName(),
125 serviceTemplate.getVersion());
127 assertThat(result).isEqualTo(serviceTemplate);
131 void testGetServiceTemplate() throws PfModelException {
132 var serviceTemplate = new ToscaServiceTemplate();
133 serviceTemplate.setName("Name");
134 serviceTemplate.setVersion("1.0.0");
135 var modelsProvider = mock(PolicyModelsProvider.class);
136 when(modelsProvider.getServiceTemplateList(eq(serviceTemplate.getName()), eq(serviceTemplate.getVersion())))
137 .thenReturn(List.of(serviceTemplate));
139 var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
141 serviceTemplateProvider.getServiceTemplateList(serviceTemplate.getName(), serviceTemplate.getVersion());
143 assertThat(result).hasSize(1);
144 assertThat(result.get(0)).isEqualTo(serviceTemplate);
148 * Get ToscaServiceTemplate from resource.
150 * @param path path of the resource
152 public static ToscaServiceTemplate getToscaServiceTemplate(String path) {
155 return YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(path), ToscaServiceTemplate.class);
156 } catch (CoderException e) {
157 fail("Cannot read or decode " + path);