Backend support for operation milestones with activity inputs
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / tosca / PolicyExportParserImplTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 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  */
20
21 package org.openecomp.sdc.be.tosca;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
25 import static org.junit.jupiter.api.Assertions.assertNull;
26 import static org.mockito.Mockito.when;
27
28 import fj.data.Either;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.HashMap;
32 import java.util.List;
33 import java.util.Map;
34 import org.junit.jupiter.api.Test;
35 import org.junit.jupiter.api.extension.ExtendWith;
36 import org.mockito.Mock;
37 import org.mockito.junit.jupiter.MockitoExtension;
38 import org.openecomp.sdc.be.components.impl.exceptions.SdcResourceNotFoundException;
39 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
40 import org.openecomp.sdc.be.model.Component;
41 import org.openecomp.sdc.be.model.ComponentInstance;
42 import org.openecomp.sdc.be.model.GroupDefinition;
43 import org.openecomp.sdc.be.model.PolicyDefinition;
44 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
45 import org.openecomp.sdc.be.tosca.model.ToscaMetadata;
46 import org.openecomp.sdc.be.tosca.model.ToscaPolicyTemplate;
47
48 @ExtendWith(MockitoExtension.class)
49 class PolicyExportParserImplTest {
50
51     private static final String[] POLICY_KEYS = {"policy_key_1", "policy_key_2"};
52     private static final String[] VERSIONS = {"version_1", "version_1"};
53     private static final String[] POLICY_NAMES = {"name_1", "name_2"};
54     private static final String[] POLICY_UUIDS = {"policyUUID_1", "policyUUID_2"};
55     private static final String[] INVARIANT_UUIDS = {"invariantUUID_1", "invariantUUID_2"};
56     private static final String[] POLICY_TYPE_NAMES = {"policyTypeName_1", "policyTypeName_2"};
57     private static final String[] POLICY_COMPONENT_INSTANCES = {"policyComponentInstanceId"};
58     private static final String POLICY_COMPONENT_INSTANCES_NAME = "policyComponentInstanceName";
59     private static final String[] POLICY_GROUPS = {"policyGroupId"};
60     private static final String POLICY_GROUP_NAME = "PolicyGroupName";
61
62     private PolicyExportParser policiyExportParser;
63
64     @Mock
65     private ApplicationDataTypeCache applicationDataTypeCache;
66     @Mock
67     private PropertyConvertor propertyConvertor;
68
69     @Mock
70     private Component component;
71
72     @Test
73     void failToGetAllDataTypes() {
74
75         when(applicationDataTypeCache.getAll(null)).thenReturn(Either.right(null));
76         assertThatExceptionOfType(SdcResourceNotFoundException.class).isThrownBy(() -> policiyExportParser = new PolicyExportParserImpl(
77             applicationDataTypeCache,
78             propertyConvertor));
79     }
80
81     @Test
82     void noPoliciesInComponent() {
83
84         when(applicationDataTypeCache.getAll(null)).thenReturn(Either.left(null));
85         when(component.getPolicies()).thenReturn(null);
86         policiyExportParser = new PolicyExportParserImpl(applicationDataTypeCache, propertyConvertor);
87         Map<String, ToscaPolicyTemplate> policies = policiyExportParser.getPolicies(component);
88         assertNull(policies);
89     }
90
91     @Test
92     void onePoliciesInComponent() {
93
94         List<Integer> constIndexes = Arrays.asList(new Integer[]{0});
95         testPoliciesInComponent(constIndexes);
96     }
97
98     @Test
99     void twoPoliciesInComponent() {
100
101         List<Integer> constIndexes = Arrays.asList(new Integer[]{0, 1});
102         testPoliciesInComponent(constIndexes);
103     }
104
105     private void testPoliciesInComponent(List<Integer> constIndexes) {
106         when(applicationDataTypeCache.getAll(null)).thenReturn(Either.left(null));
107         Map<String, PolicyDefinition> policiesToAdd = getPolicies(constIndexes);
108
109         when(component.getPolicies()).thenReturn(policiesToAdd);
110         when(component.getComponentInstances()).thenReturn(getComponentInstances());
111         when(component.getGroups()).thenReturn(getGroups());
112         policiyExportParser = new PolicyExportParserImpl(applicationDataTypeCache, propertyConvertor);
113
114         Map<String, ToscaPolicyTemplate> policies = policiyExportParser.getPolicies(component);
115
116         for (Integer i : constIndexes) {
117
118             ToscaPolicyTemplate toscaPolicyTemplate = policies.get(POLICY_NAMES[i]);
119             ToscaMetadata metadata = (ToscaMetadata) toscaPolicyTemplate.getMetadata();
120
121             assertThat(metadata.getInvariantUUID()).isEqualTo(INVARIANT_UUIDS[i]);
122             assertThat(metadata.getUUID()).isEqualTo(POLICY_UUIDS[i]);
123             assertThat(metadata.getName()).isEqualTo(POLICY_NAMES[i]);
124             assertThat(metadata.getVersion()).isEqualTo(VERSIONS[i]);
125
126             String type = toscaPolicyTemplate.getType();
127             assertThat(type).isEqualTo(POLICY_TYPE_NAMES[i]);
128
129             List<String> targets = toscaPolicyTemplate.getTargets();
130             assertThat(targets.get(0)).isEqualTo(POLICY_COMPONENT_INSTANCES_NAME);
131             assertThat(targets.get(1)).isEqualTo(POLICY_GROUP_NAME);
132         }
133     }
134
135     private List<GroupDefinition> getGroups() {
136         List<GroupDefinition> groups = new ArrayList<>();
137         GroupDefinition groupDefinition = new GroupDefinition();
138         groupDefinition.setUniqueId(POLICY_GROUPS[0]);
139         groupDefinition.setName(POLICY_GROUP_NAME);
140         groups.add(groupDefinition);
141         return groups;
142     }
143
144     private List<ComponentInstance> getComponentInstances() {
145         List<ComponentInstance> componentInstances = new ArrayList<>();
146         ComponentInstance componentInstance = new ComponentInstance();
147         componentInstance.setUniqueId(POLICY_COMPONENT_INSTANCES[0]);
148         componentInstance.setName(POLICY_COMPONENT_INSTANCES_NAME);
149         componentInstances.add(componentInstance);
150         return componentInstances;
151     }
152
153     private Map<String, PolicyDefinition> getPolicies(List<Integer> indexes) {
154         Map<String, PolicyDefinition> policies = new HashMap<>();
155
156         for (int index : indexes) {
157
158             PolicyDefinition policyDefinition = new PolicyDefinition();
159
160             // Set type
161             policyDefinition.setPolicyTypeName(POLICY_TYPE_NAMES[index]);
162
163             // Set Metadata
164             policyDefinition.setInvariantUUID(INVARIANT_UUIDS[index]);
165             policyDefinition.setPolicyUUID(POLICY_UUIDS[index]);
166             policyDefinition.setName(POLICY_NAMES[index]);
167             policyDefinition.setVersion(VERSIONS[index]);
168
169             // Set targets
170             policyDefinition.setTargets(getTargets());
171
172             policies.put(POLICY_KEYS[index], policyDefinition);
173         }
174         return policies;
175     }
176
177     private Map<PolicyTargetType, List<String>> getTargets() {
178         Map<PolicyTargetType, List<String>> targets = new HashMap<>();
179         targets.put(PolicyTargetType.COMPONENT_INSTANCES, Arrays.asList(POLICY_COMPONENT_INSTANCES));
180         targets.put(PolicyTargetType.GROUPS, Arrays.asList(POLICY_GROUPS));
181         return targets;
182     }
183 }