2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
20 package org.onap.sdc.impl;
22 import org.junit.jupiter.api.Test;
23 import org.onap.sdc.tosca.parser.api.IEntityDetails;
24 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
25 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
26 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
27 import org.onap.sdc.toscaparser.api.Property;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
32 import java.util.Arrays;
33 import java.util.HashMap;
34 import java.util.List;
37 import static com.google.common.collect.Lists.newArrayList;
38 import static org.assertj.core.api.Assertions.assertThat;
40 public class GetVfModulesWithMembersTest {
42 private static final String SERVICE_WITH_SINGLE_VF_CSAR = "csars/service-JennyVtsbcVlanSvc-csar.csar";
43 private static final String SERVICE_WITH_DOUBLE_VF_CSAR = "csars/service-Metaswitch1-csar.csar";
44 private static final String VF_MODULE_MODEL_INVARIANT_UUID = "vfModuleModelInvariantUUID";
45 private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
46 private static final String VF_MODULE_MODEL_VERSION = "vfModuleModelVersion";
47 private static final String VF_MODULE_MODEL_CUSTOMIZATION_UUID = "vfModuleModelCustomizationUUID";
48 private static final String INT_UNUSED_NETWORK = "int_unused_network";
49 private static final String INT_HA_RSG = "int_ha_rsg";
50 private static final String INT_HA_NETWORK = "int_ha_network";
51 private static final String ABSTRACT_RTP_MSC = "abstract_rtp_msc";
52 private static final String ABSTRACT_SSC = "abstract_ssc";
53 private static final String MODULE_1_PERIMETA_SSC_B = "module_1_perimeta_ssc_b";
54 private static final String MODULE_1_PERIMETA_SSC_A = "module_1_perimeta_ssc_a";
55 private static final String MODULE_2_PERIMETA_RTP_MSC = "module_2_perimeta_rtp_msc";
56 private static final String SHARED_PERIMETA_INT_HA_RSG = "shared_perimeta_int_ha_rsg";
57 private static final String SHARED_PERIMETA_INTERNAL_HA_NET_0 = "shared_perimeta_internal_ha_net_0";
58 private static final String SHARED_PERIMETA_INTERNAL_UNUSED_NET_0 = "shared_perimeta_internal_unused_net_0";
59 private static final String ABSTRACT_RTP_MSC_A = "abstract_rtp_msc_a";
60 private static final String ABSTRACT_RTP_MSC_B = "abstract_rtp_msc_b";
61 private static final String ABSTRACT_SSC_B = "abstract_ssc_b";
62 private static final String ABSTRACT_SSC_A = "abstract_ssc_a";
63 private static final String MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL = "Module with index %s does not exist in the model of %s";
64 private ISdcCsarHelper helper;
65 private static Logger log = LoggerFactory.getLogger(GetVfModulesWithMembersTest.class.getName());
67 public void setUp(String path) {
69 URL resource = GetEntityTest.class.getClassLoader().getResource(path);
70 if (resource != null) {
71 helper = SdcToscaParserFactory.getInstance().getSdcCsarHelper(resource.getFile());
74 } catch (SdcToscaParserException e) {
75 log.error("Failed to create ISdcCsarHelper object from {}.", path, e);
80 public void getVfModulesByVfSingleVfTest() {
81 setUp(SERVICE_WITH_SINGLE_VF_CSAR);
82 List<String> expectedVfModules = newArrayList("jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_2_perimeta_rtp_msc..module-1",
83 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..base_perimeta_deployment_create..module-0",
84 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_a..module-3",
85 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_b..module-2");
87 List<IEntityDetails> entities = helper.getVFModule("05e77410-a1d8-44fe-8440-b9410c8f98ee");
88 verifyVfModulesNames(expectedVfModules, entities);
90 for(IEntityDetails entity : entities){
91 char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
92 List<String> actualMembersList = newArrayList();
95 verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"a141bf13-d817-4258-98d6-9f9d51fbe1c6");
96 verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"e10458d4-6e4f-40a4-b47b-57a97380efc1");
97 verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
98 verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"8f07ed2f-7f10-4f06-bba6-8f1222ced3ef");
99 verifyModuleMembers(entity, actualMembersList, Arrays.asList(INT_UNUSED_NETWORK, INT_HA_RSG, INT_HA_NETWORK));
100 verifyModuleProperties(entity,moduleIndex,null);
103 verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"eff0e0fd-67c5-4891-9382-d6959d761442");
104 verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"d65b3d01-7b3d-4b27-9bd2-0165bab75709");
105 verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
106 verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"97b648a3-eaf1-4dfb-a685-259b74a1a6fb");
107 verifyModuleMember(entity, ABSTRACT_RTP_MSC);
108 verifyModuleProperties(entity,moduleIndex,MODULE_2_PERIMETA_RTP_MSC);
112 verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"1c0e7c32-897c-454a-bb5d-42cc5e8f135c");
113 verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"99589e9b-e650-4b0a-aa01-0dbf51adb226");
114 verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
115 verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"fedb631d-211b-4659-a7eb-19421905808c");
116 verifyModuleMember(entity, ABSTRACT_SSC);
117 verifyModuleProperties(entity,moduleIndex, MODULE_1_PERIMETA_SSC_B);
120 verifyModuleMetadata(entity, VF_MODULE_MODEL_INVARIANT_UUID,"5a7f8d9c-e102-4556-9484-3a5be8020977");
121 verifyModuleMetadata(entity, VF_MODULE_MODEL_UUID,"6130333c-6e41-4abe-84aa-7c669c6d2287");
122 verifyModuleMetadata(entity, VF_MODULE_MODEL_VERSION,"5");
123 verifyModuleMetadata(entity, VF_MODULE_MODEL_CUSTOMIZATION_UUID,"94d27f05-a116-4662-b330-8758c2b049d7");
124 verifyModuleMember(entity, ABSTRACT_SSC);
125 verifyModuleProperties(entity,moduleIndex, MODULE_1_PERIMETA_SSC_A);
128 log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_SINGLE_VF_CSAR));
134 public void getVfModulesByServiceSingleVfTest() {
135 setUp(SERVICE_WITH_SINGLE_VF_CSAR);
136 List<String> expectedVfModules = newArrayList("jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_2_perimeta_rtp_msc..module-1",
137 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..base_perimeta_deployment_create..module-0",
138 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_a..module-3",
139 "jennyvtsbcvlanvnf0..JennyVtsbcVlanVnf..module_1_perimeta_ssc_b..module-2");
141 List<IEntityDetails> entities = helper.getVFModule();
142 verifyVfModulesNames(expectedVfModules, entities);
144 for(IEntityDetails entity : entities){
145 char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
146 List<String> actualMembersList = newArrayList();
148 switch (moduleIndex){
150 verifyModuleMembers(entity, actualMembersList, Arrays.asList(INT_UNUSED_NETWORK, INT_HA_RSG, INT_HA_NETWORK));
153 verifyModuleMember(entity, ABSTRACT_RTP_MSC);
157 verifyModuleMember(entity, ABSTRACT_SSC);
160 log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_SINGLE_VF_CSAR));
166 public void getVfModulesByVfDuplicateVfTest() {
167 setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
168 List<String> expectedVfModules = newArrayList("vsp10..Vsp1..base_perimeta_deployment_create..module-0",
169 "vsp10..Vsp1..module_2_perimeta_rtp_msc..module-1",
170 "vsp10..Vsp1..module_1_perimeta_ssc_a..module-3",
171 "vsp10..Vsp1..module_1_perimeta_ssc_b..module-2");
173 List<IEntityDetails> entities = helper.getVFModule("2b5f00de-8816-465c-b7bc-c36e26775e1e");
174 verifyVfModulesNames(expectedVfModules, entities);
176 for(IEntityDetails entity : entities){
177 char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
178 List<String> actualMembersList = newArrayList();
179 switch (moduleIndex){
181 verifyModuleMembers(entity, actualMembersList, Arrays.asList(SHARED_PERIMETA_INT_HA_RSG, SHARED_PERIMETA_INTERNAL_HA_NET_0,
182 SHARED_PERIMETA_INTERNAL_UNUSED_NET_0));
185 verifyModuleMembers(entity, actualMembersList, Arrays.asList(ABSTRACT_RTP_MSC_A, ABSTRACT_RTP_MSC_B));
188 verifyModuleMember(entity, ABSTRACT_SSC_B);
191 verifyModuleMember(entity, ABSTRACT_SSC_A);
194 log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_DOUBLE_VF_CSAR));
200 public void getVfModulesByServiceDuplicateVfTest() {
201 setUp(SERVICE_WITH_DOUBLE_VF_CSAR);
202 List<String> expectedVfModules = newArrayList("vsp10..Vsp1..base_perimeta_deployment_create..module-0",
203 "vsp10..Vsp1..module_2_perimeta_rtp_msc..module-1",
204 "vsp10..Vsp1..module_1_perimeta_ssc_a..module-3",
205 "vsp10..Vsp1..module_1_perimeta_ssc_b..module-2",
206 "vsp11..Vsp1..base_perimeta_deployment_create..module-0",
207 "vsp11..Vsp1..module_2_perimeta_rtp_msc..module-1",
208 "vsp11..Vsp1..module_1_perimeta_ssc_a..module-3",
209 "vsp11..Vsp1..module_1_perimeta_ssc_b..module-2");
211 List<IEntityDetails> entities = helper.getVFModule();
212 verifyVfModulesNames(expectedVfModules, entities);
214 for(IEntityDetails entity : entities){
215 char moduleIndex = entity.getName().charAt(entity.getName().length()-1);
216 List<String> actualMembersList = newArrayList();
217 switch (moduleIndex){
219 verifyModuleMembers(entity, actualMembersList, Arrays.asList(SHARED_PERIMETA_INT_HA_RSG,
220 SHARED_PERIMETA_INTERNAL_HA_NET_0,
221 SHARED_PERIMETA_INTERNAL_UNUSED_NET_0));
224 verifyModuleMembers(entity, actualMembersList, Arrays.asList(ABSTRACT_RTP_MSC_A,
225 ABSTRACT_RTP_MSC_B));
228 verifyModuleMember(entity, ABSTRACT_SSC_B);
231 verifyModuleMember(entity, ABSTRACT_SSC_A);
234 log.error(String.format(MODULE_WITH_INDEX_DOES_NOT_EXIST_IN_THE_MODEL, moduleIndex, SERVICE_WITH_DOUBLE_VF_CSAR));
240 public void getVfModulesManualServiceTest(){
241 setUp("csars/service-Servicenovfmodules-csar.csar");
242 List<IEntityDetails> entities = helper.getVFModule();
243 assertThat(entities.size()).isEqualTo(0);
246 private void verifyVfModulesNames(List<String> expectedVfModules, List<IEntityDetails> entities) {
247 List<String> actualVfModules = newArrayList();
248 for (IEntityDetails entity : entities) {
249 actualVfModules.add(entity.getName());
251 assertThat(actualVfModules).containsExactlyInAnyOrderElementsOf(expectedVfModules);
254 private void verifyModuleMembers(IEntityDetails entity, List<String> actualMembersList, List<String> expectedMembersList) {
255 entity.getMemberNodes().forEach(member -> actualMembersList.add(member.getName()));
256 assertThat(actualMembersList).containsOnlyElementsOf(expectedMembersList);
257 actualMembersList.clear();
260 private void verifyModuleMember(IEntityDetails entity, String expectedMember) {
261 String actualMember = entity.getMemberNodes().get(0).getName();
262 assertThat(actualMember).isEqualTo(expectedMember);
265 private void verifyModuleMetadata(IEntityDetails entity, String metadataKey, String metadataValue) {
266 assertThat(entity.getMetadata().getValue(metadataKey)).isEqualTo(metadataValue);
269 private void verifyModuleProperties(IEntityDetails entity, char moduleNumber, String vfModuleLabel){
270 Map<String, String> expectedProperties;
271 if (moduleNumber == '0'){
272 expectedProperties = getExpectedPropertiesBase();
274 expectedProperties = getExpectedPropertiesNonBase(vfModuleLabel);
276 assertThat(expectedProperties).isEqualTo(getActualProperties(entity));
279 private Map<String, String> getExpectedPropertiesNonBase(String vfModuleLabel){
280 Map<String, String> properties = new HashMap<>();
281 properties.put("min_vf_module_instances","0");
282 properties.put("vf_module_label",vfModuleLabel);
283 properties.put("vf_module_type","Expansion");
284 properties.put("isBase","false");
285 properties.put("initial_count","0");
286 properties.put("volume_group","false");
290 private Map<String,String> getExpectedPropertiesBase(){
291 Map<String, String> properties = new HashMap<>();
292 properties.put("min_vf_module_instances","1");
293 properties.put("vf_module_label","base_perimeta_deployment_create");
294 properties.put("max_vf_module_instances","1");
295 properties.put("vf_module_type","Base");
296 properties.put("isBase","true");
297 properties.put("initial_count","1");
298 properties.put("volume_group","false");
302 private Map<String,String> getActualProperties(IEntityDetails entity){
303 Map<String, String> properties = new HashMap<>();
304 for (Property prop : entity.getProperties().values()){
305 properties.put(prop.getName(),prop.getValue().toString());