564e02dca5def99376154d1c4309ca2f58d848ac
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components.impl.generic;
23
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertFalse;
26 import static org.junit.jupiter.api.Assertions.assertThrows;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.when;
30
31 import fj.data.Either;
32 import java.util.Arrays;
33 import java.util.List;
34 import java.util.Map;
35 import org.junit.jupiter.api.BeforeEach;
36 import org.junit.jupiter.api.Test;
37 import org.mockito.InjectMocks;
38 import org.mockito.Mock;
39 import org.mockito.MockitoAnnotations;
40 import org.openecomp.sdc.be.config.CategoryBaseTypeConfig;
41 import org.openecomp.sdc.be.config.Configuration;
42 import org.openecomp.sdc.be.config.ConfigurationManager;
43 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
44 import org.openecomp.sdc.be.impl.ComponentsUtils;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.InputDefinition;
47 import org.openecomp.sdc.be.model.PropertyDefinition;
48 import org.openecomp.sdc.be.model.Resource;
49 import org.openecomp.sdc.be.model.category.CategoryDefinition;
50 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
51 import org.openecomp.sdc.exception.ResponseFormat;
52
53 class GenericTypeBusinessLogicTest {
54
55     @InjectMocks
56     private GenericTypeBusinessLogic testInstance;
57
58     @Mock
59     private ToscaOperationFacade toscaOperationFacadeMock;
60
61     @Mock
62     private ComponentsUtils componentsUtils;
63
64     @BeforeEach
65     public void setUp() {
66         MockitoAnnotations.openMocks(this);
67         testInstance = new GenericTypeBusinessLogic(componentsUtils, toscaOperationFacadeMock);
68         final var configurationManager = new ConfigurationManager();
69
70         final var configuration = new Configuration();
71         CategoryBaseTypeConfig categoryBaseTypeConfig1 = new CategoryBaseTypeConfig();
72         categoryBaseTypeConfig1.setRequired(true);
73         CategoryBaseTypeConfig categoryBaseTypeConfig2 = new CategoryBaseTypeConfig();
74         categoryBaseTypeConfig2.setRequired(false);
75         Map<String, CategoryBaseTypeConfig> serviceBaseNodeTypeMap = Map.of(
76             "category1", categoryBaseTypeConfig1,
77             "category2", categoryBaseTypeConfig2
78         );
79         configuration.setServiceBaseNodeTypes(serviceBaseNodeTypeMap);
80         configurationManager.setConfiguration(configuration);
81     }
82
83     @Test
84     void fetchDerivedFromGenericType_cvfv_getGenericResourceTypeFromDerivedFrom() {
85         Resource cvfc = new Resource();
86         cvfc.setResourceType(ResourceTypeEnum.CVFC);
87         cvfc.setDerivedFrom(Arrays.asList("genericType", "someOtherType"));
88         cvfc.setDerivedFromGenericType("genericType");
89         Resource genericResource = new Resource();
90         when(toscaOperationFacadeMock.getLatestCertifiedNodeTypeByToscaResourceName(cvfc.getDerivedFromGenericType()))
91             .thenReturn(Either.left(genericResource));
92         Either<Resource, ResponseFormat> fetchedGenericType = testInstance.fetchDerivedFromGenericType(cvfc);
93         assertEquals(genericResource, fetchedGenericType.left().value());
94     }
95
96     @Test
97     void fetchDerivedFromGenericType_getGenericResourceTypeFromConfiguration() {
98         Resource resource = mock(Resource.class);
99         when(resource.getResourceType()).thenReturn(ResourceTypeEnum.VF);
100         final var genericType = "genericType";
101         when(resource.fetchGenericTypeToscaNameFromConfig()).thenReturn(genericType);
102         Resource genericResource = new Resource();
103         when(toscaOperationFacadeMock.getLatestCertifiedNodeTypeByToscaResourceName(genericType)).thenReturn(Either.left(genericResource));
104         Either<Resource, ResponseFormat> fetchedGenericType = testInstance.fetchDerivedFromGenericType(resource);
105         assertEquals(genericResource, fetchedGenericType.left().value());
106     }
107
108     @Test
109     void generateInputsFromGenericTypeProperties() {
110         Resource genericNodeType = new Resource();
111         genericNodeType.setUniqueId("genericUid");
112         PropertyDefinition propertyDefinition = generatePropDefinition("prop1");
113         PropertyDefinition propertyDefinition2 = generatePropDefinition("prop2");
114
115         genericNodeType.setProperties(Arrays.asList(propertyDefinition, propertyDefinition2));
116
117         List<InputDefinition> genericInputs = testInstance.generateInputsFromGenericTypeProperties(genericNodeType);
118         assertEquals(2, genericInputs.size());
119         assertInput(genericInputs.get(0), propertyDefinition);
120         assertInput(genericInputs.get(1), propertyDefinition2);
121     }
122
123     @Test
124     void generateInputsFromGenericTypeProperties_genericHasNoProps() {
125         Resource genericNodeType = new Resource();
126         assertTrue(testInstance.generateInputsFromGenericTypeProperties(genericNodeType).isEmpty());
127     }
128
129     @Test
130     void hasMandatorySubstitutionForServiceTest() {
131         final var component = mock(Component.class);
132         when(component.isService()).thenReturn(true);
133         final var categoryDefinition = new CategoryDefinition();
134         categoryDefinition.setName("category1");
135         when(component.getCategories()).thenReturn(List.of(categoryDefinition));
136         assertTrue(testInstance.hasMandatorySubstitutionType(component));
137     }
138
139     @Test
140     void hasMandatorySubstitutionForServiceWithNotRequiredCategoryTest() {
141         final var component = mock(Component.class);
142         when(component.isService()).thenReturn(true);
143         final var categoryDefinition = new CategoryDefinition();
144         categoryDefinition.setName("category2");
145         when(component.getCategories()).thenReturn(List.of(categoryDefinition));
146         assertFalse(testInstance.hasMandatorySubstitutionType(component));
147     }
148
149     @Test
150     void hasMandatorySubstitutionForServiceWithNotConfiguredCategoryTest() {
151         final var component = mock(Component.class);
152         when(component.isService()).thenReturn(true);
153         final var categoryDefinition = new CategoryDefinition();
154         categoryDefinition.setName("category3");
155         when(component.getCategories()).thenReturn(List.of(categoryDefinition));
156         assertTrue(testInstance.hasMandatorySubstitutionType(component));
157     }
158
159     @Test
160     void hasMandatorySubstitutionForServiceWithNonExistentConfigTest() {
161         final var configurationManager = new ConfigurationManager();
162         configurationManager.setConfiguration(new Configuration());
163         final var component = mock(Component.class);
164         when(component.isService()).thenReturn(true);
165         assertTrue(testInstance.hasMandatorySubstitutionType(component));
166     }
167
168     @Test
169     void hasMandatorySubstitutionServiceMissingCategoryTest() {
170         final Component component = mock(Component.class);
171         when(component.isService()).thenReturn(true);
172         assertThrows(IllegalArgumentException.class, () -> testInstance.hasMandatorySubstitutionType(component));
173     }
174
175     @Test
176     void hasMandatorySubstitutionTypeForNonServiceComponentTest() {
177         final Component component = mock(Component.class);
178         when(component.isService()).thenReturn(false);
179         assertTrue(testInstance.hasMandatorySubstitutionType(component));
180     }
181
182     private void assertInput(InputDefinition inputDefinition, PropertyDefinition propertyDefinition) {
183         assertEquals("genericUid", inputDefinition.getOwnerId());
184         assertEquals(inputDefinition.getValue(), propertyDefinition.getValue());
185         assertEquals(inputDefinition.getName(), propertyDefinition.getName());
186     }
187
188     private PropertyDefinition generatePropDefinition(String name) {
189         PropertyDefinition propertyDefinition = new PropertyDefinition();
190         propertyDefinition.setName(name);
191         propertyDefinition.setValue(name + "value");
192         return propertyDefinition;
193     }
194
195 }