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