7f2731abfd0ec8291c5f513a47043c545a17a9ac
[policy/clamp.git] /
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider;
22
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;
30
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;
39
40 class ServiceTemplateProviderTest {
41
42     private static final String TOSCA_SERVICE_TEMPLATE_YAML =
43             "src/test/resources/providers/tosca-for-smoke-testing.yaml";
44
45     private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder();
46
47     @Test
48     void testGetCommonOrInstancePropertiesFromNodeTypes() throws PfModelException {
49         var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
50
51         var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
52
53         var result = serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
54         assertNotNull(result);
55         assertThat(result).hasSize(8);
56     }
57
58     @Test
59     void testGetDerivedCommonOrInstanceNodeTemplates() throws PfModelException {
60         var serviceTemplateProvider = new ServiceTemplateProvider(mock(PolicyModelsProvider.class));
61
62         var serviceTemplate = getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
63
64         var commonOrInstanceNodeTypeProps =
65                 serviceTemplateProvider.getCommonOrInstancePropertiesFromNodeTypes(true, serviceTemplate);
66
67         var result = serviceTemplateProvider.getDerivedCommonOrInstanceNodeTemplates(
68                 serviceTemplate.getToscaTopologyTemplate().getNodeTemplates(), commonOrInstanceNodeTypeProps);
69
70         assertNotNull(result);
71         assertThat(result).hasSize(8);
72     }
73
74     @Test
75     void testCreateServiceTemplate() throws PfModelException {
76         var modelsProvider = mock(PolicyModelsProvider.class);
77         var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
78
79         var serviceTemplate = new ToscaServiceTemplate();
80         when(modelsProvider.createServiceTemplate(serviceTemplate)).thenReturn(serviceTemplate);
81
82         var result = serviceTemplateProvider.createServiceTemplate(serviceTemplate);
83
84         assertThat(result).isEqualTo(serviceTemplate);
85     }
86
87     @Test
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);
95
96         var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
97         var result =
98                 serviceTemplateProvider.deleteServiceTemplate(serviceTemplate.getName(), serviceTemplate.getVersion());
99
100         assertThat(result).isEqualTo(serviceTemplate);
101     }
102
103     @Test
104     void testGetServiceTemplateListEmpty() throws PfModelException {
105         var modelsProvider = mock(PolicyModelsProvider.class);
106         when(modelsProvider.getServiceTemplateList(any(String.class), any(String.class))).thenReturn(List.of());
107
108         var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
109         assertThatThrownBy(() -> serviceTemplateProvider.getToscaServiceTemplate("Name", "1.0.0"))
110                 .hasMessage("Control Loop definitions not found");
111     }
112
113     @Test
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));
121
122         var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
123         var result = serviceTemplateProvider.getToscaServiceTemplate(serviceTemplate.getName(),
124                 serviceTemplate.getVersion());
125
126         assertThat(result).isEqualTo(serviceTemplate);
127     }
128
129     @Test
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));
137
138         var serviceTemplateProvider = new ServiceTemplateProvider(modelsProvider);
139         var result =
140                 serviceTemplateProvider.getServiceTemplateList(serviceTemplate.getName(), serviceTemplate.getVersion());
141
142         assertThat(result).hasSize(1);
143         assertThat(result.get(0)).isEqualTo(serviceTemplate);
144     }
145
146     /**
147      * Get ToscaServiceTemplate from resource.
148      *
149      * @param path path of the resource
150      */
151     public static ToscaServiceTemplate getToscaServiceTemplate(String path) {
152
153         try {
154             return YAML_TRANSLATOR.decode(ResourceUtils.getResourceAsStream(path), ToscaServiceTemplate.class);
155         } catch (CoderException e) {
156             fail("Cannot read or decode " + path);
157             return null;
158         }
159     }
160 }