9a36499956d3076c7dac1448fcc4f21dae923f81
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / test / java / org / openecomp / sdc / translator / services / heattotosca / ConsolidationServiceTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.translator.services.heattotosca;
18
19 import static org.mockito.Matchers.any;
20 import static org.mockito.Matchers.eq;
21 import static org.mockito.Mockito.times;
22 import static org.mockito.Mockito.verify;
23
24 import org.apache.commons.lang3.tuple.ImmutablePair;
25 import org.apache.commons.lang3.tuple.Pair;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.mockito.ArgumentCaptor;
30 import org.mockito.Captor;
31 import org.mockito.InjectMocks;
32 import org.mockito.Mock;
33 import org.mockito.Mockito;
34 import org.mockito.MockitoAnnotations;
35 import org.mockito.Spy;
36 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
37 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
38 import org.openecomp.sdc.tosca.services.ToscaConstants;
39 import org.openecomp.sdc.translator.SubInterfaceConsolidationDataTestInfo;
40 import org.openecomp.sdc.translator.TestUtils;
41 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
42 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionData;
43 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionMode;
44 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
45 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
46
47 import java.io.IOException;
48 import java.util.ArrayList;
49 import java.util.Arrays;
50 import java.util.Collections;
51 import java.util.HashMap;
52 import java.util.List;
53 import java.util.Map;
54
55 public class ConsolidationServiceTest {
56
57
58   @Spy
59   private TranslationContext translationContext = new TranslationContext();
60   private static String mainST = "MainServiceTemplate.yaml";
61
62   @Mock
63   private UnifiedCompositionService unifiedCompositionServiceMock;
64
65   @Captor
66   private ArgumentCaptor<List<UnifiedCompositionData>> unifiedModelListArg;
67   @Captor
68   private ArgumentCaptor<UnifiedCompositionMode> unifiedCompositionModeArg;
69
70   @Spy
71   @InjectMocks
72   private ConsolidationService consolidationService;
73
74   @Before
75   public void setUp() throws Exception {
76     MockitoAnnotations.initMocks(this);
77   }
78
79   @Test
80   public void testConsolidationValidPreCondition() throws IOException {
81
82     ConsolidationData consolidationData = new ConsolidationData();
83     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
84     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel(
85         "/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/valid_pre_condition/",
86         null,
87         null);
88
89     TestUtils.initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName,
90         consolidationData);
91
92     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
93     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
94     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
95
96     TestUtils.updateComputeTemplateConsolidationData(
97         mainST,
98         computeNodeTypeName, "server_ps01",
99         null, null, null, null, null, null,
100         portTypeToIdList, consolidationData);
101
102     TestUtils.updateComputeTemplateConsolidationData(
103         mainST,
104         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
105         portTypeToIdList, consolidationData);
106
107     TestUtils.initPortConsolidationData(mainST, consolidationData);
108     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
109         null, null, null, null, null,
110         consolidationData);
111     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
112         null, null, null, null, null,
113         consolidationData);
114
115     translationContext.setConsolidationData(consolidationData);
116     List<UnifiedCompositionMode> expectedUnifiedModes =
117         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
118
119     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
120   }
121
122   @Test
123   public void testConsolidationFalsePreConditionOneComputeNode() throws IOException {
124     ConsolidationData consolidationData = new ConsolidationData();
125     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
126     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
127         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/one_compute_node/",
128             null, null);
129
130     TestUtils
131         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
132
133     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
134     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
135     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
136
137     TestUtils.updateComputeTemplateConsolidationData(
138         mainST,
139         computeNodeTypeName, "server_ps01",
140         null, null, null, null, null, null,
141         portTypeToIdList, consolidationData);
142
143     TestUtils.initPortConsolidationData(mainST, consolidationData);
144     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
145         null, null, null, null, null,
146         consolidationData);
147     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
148         null, null, null, null, null,
149         consolidationData);
150
151     translationContext.setConsolidationData(consolidationData);
152     List<UnifiedCompositionMode> expectedUnifiedModes =
153         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
154     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
155   }
156
157   @Test
158   public void testConsolidationFalsePreConditionMoreThanOnePortPerType() throws IOException {
159     ConsolidationData consolidationData = new ConsolidationData();
160     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
161     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
162         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/more_than_one_port/",
163             null, null);
164
165     TestUtils
166         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
167
168     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
169     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
170     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_2"));
171
172     TestUtils.updateComputeTemplateConsolidationData(
173         mainST,
174         computeNodeTypeName, "server_ps01",
175         null, null, null, null, null, null,
176         portTypeToIdList, consolidationData);
177
178     TestUtils.updateComputeTemplateConsolidationData(
179         mainST,
180         computeNodeTypeName, "server_ps02",
181         null, null, null, null, null, null,
182         portTypeToIdList, consolidationData);
183
184
185     TestUtils.initPortConsolidationData(mainST, consolidationData);
186
187     translationContext.setConsolidationData(consolidationData);
188     List<UnifiedCompositionMode> expectedUnifiedModes =
189         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
190     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
191   }
192
193   @Test
194   public void testConsolidationFalsePreConditionDifferentPortTypesBetweenComputes()
195       throws IOException {
196     ConsolidationData consolidationData = new ConsolidationData();
197     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
198     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
199         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_port_types",
200             null, null);
201
202     TestUtils
203         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
204
205     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
206     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
207
208     TestUtils.updateComputeTemplateConsolidationData(
209         mainST,
210         computeNodeTypeName, "server_ps01",
211         null, null, null, null, null, null,
212         portTypeToIdList, consolidationData);
213
214     portTypeToIdList = new ArrayList<>();
215     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
216
217     TestUtils.updateComputeTemplateConsolidationData(
218         mainST,
219         computeNodeTypeName, "server_ps02",
220         null, null, null, null, null, null,
221         portTypeToIdList, consolidationData);
222
223     TestUtils.initPortConsolidationData(mainST, consolidationData);
224     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
225         null, null, null, null, null,
226         consolidationData);
227     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
228         null, null, null, null, null,
229         consolidationData);
230
231     translationContext.setConsolidationData(consolidationData);
232     List<UnifiedCompositionMode> expectedUnifiedModes =
233         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
234     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
235
236   }
237
238   @Test
239   public void testConsolidationResultTrueWithMoreThanTwoCompute() throws IOException {
240     ConsolidationData consolidationData = new ConsolidationData();
241     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
242     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
243         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/three_compute_valid",
244             null, null);
245
246     TestUtils
247         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
248
249     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
250     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
251     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
252
253     TestUtils.updateComputeTemplateConsolidationData(
254         mainST,
255         computeNodeTypeName, "server_ps01",
256         null, null, null, null, null, null,
257         portTypeToIdList, consolidationData);
258
259     TestUtils.updateComputeTemplateConsolidationData(
260         mainST,
261         computeNodeTypeName, "server_ps02",
262         null, null, null, null, null, null,
263         portTypeToIdList, consolidationData);
264
265     TestUtils.updateComputeTemplateConsolidationData(
266         mainST,
267         computeNodeTypeName, "server_ps03",
268         null, null, null, null, null, null,
269         portTypeToIdList, consolidationData);
270
271     TestUtils.initPortConsolidationData(mainST, consolidationData);
272     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
273         null, null, null, null, null,
274         consolidationData);
275     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
276         null, null, null, null, null,
277         consolidationData);
278
279     translationContext.setConsolidationData(consolidationData);
280
281     List<UnifiedCompositionMode> expectedUnifiedModes =
282         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
283     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
284   }
285
286   @Test
287   public void testConsolidationResultFalseWithMoreThanTwoComputeOneIsDiff() throws IOException {
288     ConsolidationData consolidationData = new ConsolidationData();
289     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
290     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
291         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/three_compute_valid",
292             null, null);
293
294     TestUtils
295         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
296
297     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
298     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
299     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
300
301     TestUtils.updateComputeTemplateConsolidationData(
302         mainST,
303         computeNodeTypeName, "server_ps01",
304         null, null, null, null, null, null,
305         portTypeToIdList, consolidationData);
306
307     TestUtils.updateComputeTemplateConsolidationData(
308         mainST,
309         computeNodeTypeName, "server_ps02",
310         null, null, null, null, null, null,
311         portTypeToIdList, consolidationData);
312
313     portTypeToIdList = new ArrayList<>();
314     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
315     TestUtils.updateComputeTemplateConsolidationData(
316         mainST,
317         computeNodeTypeName, "server_ps03",
318         null, null, null, null, null, null,
319         portTypeToIdList, consolidationData);
320
321     TestUtils.initPortConsolidationData(mainST, consolidationData);
322     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
323         null, null, null, null, null,
324         consolidationData);
325     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
326         null, null, null, null, null,
327         consolidationData);
328
329     translationContext.setConsolidationData(consolidationData);
330     List<UnifiedCompositionMode> expectedUnifiedModes =
331         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
332     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
333   }
334
335   @Test
336   public void testConsolidationResultFalseForTwoTypesOfComputeWithOneInstanceEach()
337       throws IOException {
338     ConsolidationData consolidationData = new ConsolidationData();
339     String computeNodeTypeName1 = "org.openecomp.resource.vfc.nodes.heat.ps_server";
340     String computeNodeTypeName2 = "org.openecomp.resource.vfc.nodes.heat.cmaui";
341     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
342         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/three_compute_valid",
343             null, null);
344
345     TestUtils.initComputeNodeTypeInConsolidationData
346         (mainST, computeNodeTypeName1, consolidationData);
347     TestUtils.initComputeNodeTypeInConsolidationData
348         (mainST, computeNodeTypeName2, consolidationData);
349
350     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
351     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
352     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
353
354     TestUtils.updateComputeTemplateConsolidationData(
355         mainST,
356         computeNodeTypeName1, "server_ps01",
357         null, null, null, null, null, null,
358         portTypeToIdList, consolidationData);
359
360     TestUtils.updateComputeTemplateConsolidationData(
361         mainST,
362         computeNodeTypeName2, "server_ps02",
363         null, null, null, null, null, null,
364         portTypeToIdList, consolidationData);
365
366     TestUtils.initPortConsolidationData(mainST, consolidationData);
367     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
368         null, null, null, null, null,
369         consolidationData);
370     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
371         null, null, null, null, null,
372         consolidationData);
373
374     translationContext.setConsolidationData(consolidationData);
375
376     List<UnifiedCompositionMode> expectedUnifiedModes =
377         Arrays.asList(UnifiedCompositionMode.SingleSubstitution,
378             UnifiedCompositionMode.SingleSubstitution);
379     verifyMainServiceTemplateConsolidation(2, expectedUnifiedModes, toscaServiceModel);
380   }
381
382   @Test
383   public void testConsolidationValidForTwoSimilarComputeAndFalseForSingleCompute()
384       throws IOException {
385     ConsolidationData consolidationData = new ConsolidationData();
386     String computeNodeTypeName1 = "org.openecomp.resource.vfc.nodes.heat.ps_server";
387     String computeNodeTypeName2 = "org.openecomp.resource.vfc.nodes.heat.cmaui";
388     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
389         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/three_compute_two_similar_one_diff",
390             null, null);
391
392     TestUtils
393         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName1, consolidationData);
394     TestUtils
395         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName2, consolidationData);
396
397     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
398     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
399     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
400
401     TestUtils.updateComputeTemplateConsolidationData(
402         mainST,
403         computeNodeTypeName1, "server_ps01",
404         null, null, null, null, null, null,
405         portTypeToIdList, consolidationData);
406
407     TestUtils.updateComputeTemplateConsolidationData(
408         mainST,
409         computeNodeTypeName1, "server_ps02",
410         null, null, null, null, null, null,
411         portTypeToIdList, consolidationData);
412     TestUtils.updateComputeTemplateConsolidationData(
413         mainST,
414         computeNodeTypeName2, "server_ps03",
415         null, null, null, null, null, null,
416         portTypeToIdList, consolidationData);
417
418     TestUtils.initPortConsolidationData(mainST, consolidationData);
419     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
420         null, null, null, null, null,
421         consolidationData);
422     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
423         null, null, null, null, null,
424         consolidationData);
425
426     translationContext.setConsolidationData(consolidationData);
427     List<UnifiedCompositionMode> expectedUnifiedModes =
428         Arrays.asList(UnifiedCompositionMode.ScalingInstances,
429             UnifiedCompositionMode.SingleSubstitution);
430     verifyMainServiceTemplateConsolidation(2, expectedUnifiedModes, toscaServiceModel);
431   }
432
433   @Test
434   public void testValidComputeAndPortConsolidation() throws IOException {
435     ConsolidationData consolidationData = new ConsolidationData();
436     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
437     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
438         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_compute_valid",
439             null, null);
440
441     TestUtils
442         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
443
444     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
445     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
446     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
447
448     TestUtils.updateComputeTemplateConsolidationData(
449         mainST,
450         computeNodeTypeName, "server_ps01",
451         null, null, null, null, null, null,
452         portTypeToIdList, consolidationData);
453
454     TestUtils.updateComputeTemplateConsolidationData(
455         mainST,
456         computeNodeTypeName, "server_ps02",
457         null, null, null, null, null, null,
458         portTypeToIdList, consolidationData);
459
460     TestUtils.updateComputeTemplateConsolidationData(
461         mainST,
462         computeNodeTypeName, "server_ps03",
463         null, null, null, null, null, null,
464         portTypeToIdList, consolidationData);
465
466     TestUtils.initPortConsolidationData(mainST, consolidationData);
467     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
468         null, null, null, null, null,
469         consolidationData);
470     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
471         null, null, null, null, null,
472         consolidationData);
473
474     translationContext.setConsolidationData(consolidationData);
475     List<UnifiedCompositionMode> expectedUnifiedModes =
476         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
477     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
478   }
479
480   @Test
481   public void testFalseComputeConsolidationForTwoSimilarImageNamesAndOneDiff() throws IOException {
482     ConsolidationData consolidationData = new ConsolidationData();
483     String computeNodeTypeName1 = "org.openecomp.resource.vfc.nodes.heat.ps_server";
484     String computeNodeTypeName2 = "org.openecomp.resource.vfc.nodes.heat.pd_server";
485     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
486         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_image_name_diff",
487             null, null);
488
489     TestUtils.initComputeNodeTypeInConsolidationData(
490         mainST, computeNodeTypeName1, consolidationData);
491     TestUtils.initComputeNodeTypeInConsolidationData(
492         mainST, computeNodeTypeName2, consolidationData);
493
494     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
495     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
496     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
497
498     TestUtils.updateComputeTemplateConsolidationData(
499         mainST,
500         computeNodeTypeName1, "server_ps01",
501         null, null, null, null, null, null,
502         portTypeToIdList, consolidationData);
503
504     TestUtils.updateComputeTemplateConsolidationData(
505         mainST,
506         computeNodeTypeName1, "server_ps02",
507         null, null, null, null, null, null,
508         portTypeToIdList, consolidationData);
509
510     TestUtils.updateComputeTemplateConsolidationData(
511         mainST,
512         computeNodeTypeName1, "server_ps03",
513         null, null, null, null, null, null,
514         portTypeToIdList, consolidationData);
515
516     TestUtils.updateComputeTemplateConsolidationData(
517         mainST,
518         computeNodeTypeName2, "server_pd01",
519         null, null, null, null, null, null,
520         portTypeToIdList, consolidationData);
521
522     TestUtils.updateComputeTemplateConsolidationData(
523         mainST,
524         computeNodeTypeName2, "server_pd02",
525         null, null, null, null, null, null,
526         portTypeToIdList, consolidationData);
527
528     TestUtils.updateComputeTemplateConsolidationData(
529         mainST,
530         computeNodeTypeName2, "server_pd03",
531         null, null, null, null, null, null,
532         portTypeToIdList, consolidationData);
533
534     TestUtils.initPortConsolidationData(mainST, consolidationData);
535     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
536         null, null, null, null, null,
537         consolidationData);
538     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
539         null, null, null, null, null,
540         consolidationData);
541
542     translationContext.setConsolidationData(consolidationData);
543     List<UnifiedCompositionMode> expectedUnifiedModes =
544         Arrays
545             .asList(UnifiedCompositionMode.CatalogInstance, UnifiedCompositionMode.CatalogInstance);
546     verifyMainServiceTemplateConsolidation(2, expectedUnifiedModes, toscaServiceModel);
547   }
548
549   @Test
550   public void testFalseComputeConsolidationOneImageNameMissing() throws IOException {
551     ConsolidationData consolidationData = new ConsolidationData();
552     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.pd_server";
553     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
554         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_image_missing",
555             null, null);
556
557     TestUtils.initComputeNodeTypeInConsolidationData(
558         mainST, computeNodeTypeName, consolidationData);
559
560     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
561     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
562     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
563
564     TestUtils.updateComputeTemplateConsolidationData(
565         mainST,
566         computeNodeTypeName, "server_pd01",
567         null, null, null, null, null, null,
568         portTypeToIdList, consolidationData);
569
570     TestUtils.updateComputeTemplateConsolidationData(
571         mainST,
572         computeNodeTypeName, "server_pd02",
573         null, null, null, null, null, null,
574         portTypeToIdList, consolidationData);
575
576     TestUtils.updateComputeTemplateConsolidationData(
577         mainST,
578         computeNodeTypeName, "server_pd03",
579         null, null, null, null, null, null,
580         portTypeToIdList, consolidationData);
581
582     TestUtils.initPortConsolidationData(mainST, consolidationData);
583     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
584         null, null, null, null, null,
585         consolidationData);
586     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
587         null, null, null, null, null,
588         consolidationData);
589
590     translationContext.setConsolidationData(consolidationData);
591     List<UnifiedCompositionMode> expectedUnifiedModes =
592         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
593     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
594   }
595
596   @Test
597   public void testFalseComputeConsolidationForTwoSimilarFlavorNamesAndOneDiff() throws IOException {
598     ConsolidationData consolidationData = new ConsolidationData();
599     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
600     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
601         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_flavor_name_diff",
602             null, null);
603
604     TestUtils
605         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
606
607     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
608     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
609     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
610
611     TestUtils.updateComputeTemplateConsolidationData(
612         mainST,
613         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
614         portTypeToIdList, consolidationData);
615
616     TestUtils.updateComputeTemplateConsolidationData(
617         mainST,
618         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
619         portTypeToIdList, consolidationData);
620
621     TestUtils.updateComputeTemplateConsolidationData(
622         mainST,
623         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
624         portTypeToIdList, consolidationData);
625
626     TestUtils.initPortConsolidationData(mainST, consolidationData);
627     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
628         null, null, null, null, null,
629         consolidationData);
630     TestUtils.updatePortConsolidationData(mainST, "sm01_port_1",
631         null, null, null, null, null,
632         consolidationData);
633
634     translationContext.setConsolidationData(consolidationData);
635     List<UnifiedCompositionMode> expectedUnifiedModes =
636         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
637     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
638   }
639
640   @Test
641   public void testFalsePortConsolidationForOneDiffFixedIpsValue() throws IOException {
642     ConsolidationData consolidationData = new ConsolidationData();
643     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
644     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
645         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_exCP_naming_diff",
646             null, null);
647
648     TestUtils
649         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
650
651     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
652     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
653     TestUtils.updateComputeTemplateConsolidationData(
654         mainST,
655         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
656         portTypeToIdList, consolidationData);
657
658     portTypeToIdList = new ArrayList<>();
659     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
660     TestUtils.updateComputeTemplateConsolidationData(
661         mainST,
662         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
663         portTypeToIdList, consolidationData);
664
665     portTypeToIdList = new ArrayList<>();
666     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
667     TestUtils.updateComputeTemplateConsolidationData(
668         mainST,
669         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
670         portTypeToIdList, consolidationData);
671
672     TestUtils.initPortConsolidationData(mainST, consolidationData);
673     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
674         null, null, null, null, null,
675         consolidationData);
676
677     translationContext.setConsolidationData(consolidationData);
678     List<UnifiedCompositionMode> expectedUnifiedModes =
679         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
680     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
681   }
682
683   @Test
684   public void testFalsePortConsolidationForOneDiffExpcNaming() {
685
686   }
687
688   @Test
689   public void testFalsePortConsolidationForTwoPortsWithFixedIpsAndOneWithout() throws IOException {
690     ConsolidationData consolidationData = new ConsolidationData();
691     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
692     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
693         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_port_without_fixed_ips",
694             null, null);
695
696     TestUtils
697         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
698
699     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
700     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
701     TestUtils.updateComputeTemplateConsolidationData(
702         mainST,
703         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
704         portTypeToIdList, consolidationData);
705
706     portTypeToIdList = new ArrayList<>();
707     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
708     TestUtils.updateComputeTemplateConsolidationData(
709         mainST,
710         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
711         portTypeToIdList, consolidationData);
712
713     portTypeToIdList = new ArrayList<>();
714     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
715     TestUtils.updateComputeTemplateConsolidationData(
716         mainST,
717         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
718         portTypeToIdList, consolidationData);
719
720     TestUtils.initPortConsolidationData(mainST, consolidationData);
721     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
722         null, null, null, null, null,
723         consolidationData);
724
725     translationContext.setConsolidationData(consolidationData);
726     List<UnifiedCompositionMode> expectedUnifiedModes =
727         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
728     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
729   }
730
731   @Test
732   public void testFalsePortConsolidationForTwoPortsWithAddressPairsAndOneWithout()
733       throws IOException {
734     ConsolidationData consolidationData = new ConsolidationData();
735     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
736     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
737         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_port_without_allowed_address_pairs",
738             null, null);
739
740     TestUtils
741         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
742
743     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
744     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
745     TestUtils.updateComputeTemplateConsolidationData(
746         mainST,
747         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
748         portTypeToIdList, consolidationData);
749     portTypeToIdList = new ArrayList<>();
750     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
751     TestUtils.updateComputeTemplateConsolidationData(
752         mainST,
753         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
754         portTypeToIdList, consolidationData);
755
756     portTypeToIdList = new ArrayList<>();
757     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
758     TestUtils.updateComputeTemplateConsolidationData(
759         mainST,
760         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
761         portTypeToIdList, consolidationData);
762
763     TestUtils.initPortConsolidationData(mainST, consolidationData);
764     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
765         null, null, null, null, null,
766         consolidationData);
767
768     translationContext.setConsolidationData(consolidationData);
769     List<UnifiedCompositionMode> expectedUnifiedModes =
770         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
771     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
772   }
773
774   @Test
775   public void testFalsePortConsolidationForTwoPortsWithMacAddressAndOneWithout()
776       throws IOException {
777     ConsolidationData consolidationData = new ConsolidationData();
778     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
779     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
780         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/one_port_without_mac_address",
781             null, null);
782
783     TestUtils
784         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
785
786     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
787     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
788     TestUtils.updateComputeTemplateConsolidationData(
789         mainST,
790         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
791         portTypeToIdList, consolidationData);
792
793     portTypeToIdList = new ArrayList<>();
794     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
795     TestUtils.updateComputeTemplateConsolidationData(
796         mainST,
797         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
798         portTypeToIdList, consolidationData);
799     portTypeToIdList = new ArrayList<>();
800     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
801     TestUtils.updateComputeTemplateConsolidationData(
802         mainST,
803         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
804         portTypeToIdList, consolidationData);
805
806     TestUtils.initPortConsolidationData(mainST, consolidationData);
807     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
808         null, null, null, null, null,
809         consolidationData);
810
811     translationContext.setConsolidationData(consolidationData);
812     List<UnifiedCompositionMode> expectedUnifiedModes =
813         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
814     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
815   }
816
817   @Test
818   public void testValidPortConsolidationForPortsWithNoneOfTheCheckedProperties()
819       throws IOException {
820     ConsolidationData consolidationData = new ConsolidationData();
821     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
822     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
823         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/ports_with_none_of_the_properties",
824             null, null);
825
826     TestUtils
827         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
828
829     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
830     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
831     TestUtils.updateComputeTemplateConsolidationData(
832         mainST,
833         computeNodeTypeName, "server_ps01", null, null, null, null, null, null,
834         portTypeToIdList, consolidationData);
835
836     portTypeToIdList = new ArrayList<>();
837     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
838     TestUtils.updateComputeTemplateConsolidationData(
839         mainST,
840         computeNodeTypeName, "server_ps02", null, null, null, null, null, null,
841         portTypeToIdList, consolidationData);
842
843     portTypeToIdList = new ArrayList<>();
844     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
845     TestUtils.updateComputeTemplateConsolidationData(
846         mainST,
847         computeNodeTypeName, "server_ps03", null, null, null, null, null, null,
848         portTypeToIdList, consolidationData);
849
850     TestUtils.initPortConsolidationData(mainST, consolidationData);
851     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
852         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
853         Collections.singletonList("group_id_1"), null,
854         null,
855         consolidationData);
856     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
857         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
858         Collections.singletonList("group_id_1"), null,
859         null,
860         consolidationData);
861     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
862         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
863         Collections.singletonList("group_id_1"), null,
864         null,
865         consolidationData);
866
867     translationContext.setConsolidationData(consolidationData);
868     List<UnifiedCompositionMode> expectedUnifiedModes =
869         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
870     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
871   }
872
873   @Test
874   public void testComputeRelationsSimilarBetweenComputeNodes() throws IOException {
875     ConsolidationData consolidationData = new ConsolidationData();
876     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
877     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
878         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_compute_with_same_relations",
879             null, null);
880
881     TestUtils
882         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
883
884     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
885     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
886     TestUtils.updateComputeTemplateConsolidationData(
887         mainST,
888         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
889         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
890         Collections.singletonList("group_id1"),
891         null, null,
892         portTypeToIdList,
893         consolidationData);
894
895     portTypeToIdList = new ArrayList<>();
896     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
897     TestUtils.updateComputeTemplateConsolidationData(
898         mainST,
899         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
900         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
901         Collections.singletonList("group_id1"),
902         null, null,
903         portTypeToIdList,
904         consolidationData);
905
906     portTypeToIdList = new ArrayList<>();
907     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
908     TestUtils.updateComputeTemplateConsolidationData(
909         mainST,
910         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
911         Collections.singletonList("cmaui_volume"),
912         Collections.singletonList("cmaui_volume"), Collections.singletonList("group_id1"), null,
913         null,
914         portTypeToIdList,
915         consolidationData);
916
917     TestUtils.initPortConsolidationData(mainST, consolidationData);
918     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
919         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
920         Collections.singletonList("group_id_1"), null,
921         null,
922         consolidationData);
923     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
924         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
925         Collections.singletonList("group_id_1"), null,
926         null,
927         consolidationData);
928     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
929         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
930         Collections.singletonList("group_id_1"), null,
931         null,
932         consolidationData);
933
934
935     translationContext.setConsolidationData(consolidationData);
936     List<UnifiedCompositionMode> expectedUnifiedModes =
937         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
938     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
939   }
940
941   @Test
942   public void testNodesInRelationsDiffBetweenThreeComputes() throws IOException {
943     ConsolidationData consolidationData = new ConsolidationData();
944     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
945     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
946         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
947             null, null);
948
949     TestUtils
950         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
951
952     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
953     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
954     TestUtils.updateComputeTemplateConsolidationData(
955         mainST,
956         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
957         Collections.singletonList
958             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
959         Collections.singletonList("group_id1"), null, null,
960         portTypeToIdList,
961         consolidationData);
962
963     portTypeToIdList = new ArrayList<>();
964     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
965     TestUtils.updateComputeTemplateConsolidationData(
966         mainST,
967         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
968         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
969         Collections.singletonList("group_id1"),
970         null, null,
971         portTypeToIdList,
972         consolidationData);
973
974     portTypeToIdList = new ArrayList<>();
975     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
976     TestUtils.updateComputeTemplateConsolidationData(
977         mainST,
978         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_2"),
979         Collections.singletonList
980             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
981         Collections.singletonList("group_id1"), null, null,
982         portTypeToIdList,
983         consolidationData);
984
985     TestUtils.initPortConsolidationData(mainST, consolidationData);
986     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1", null, null, null, null, null,
987         consolidationData);
988
989
990     translationContext.setConsolidationData(consolidationData);
991     List<UnifiedCompositionMode> expectedUnifiedModes =
992         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
993     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
994   }
995
996   @Test
997   public void testNodesOutRelationsDiffBetweenThreeComputes() throws IOException {
998     ConsolidationData consolidationData = new ConsolidationData();
999     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1000     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1001         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1002             null, null);
1003
1004     TestUtils
1005         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1006
1007     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1008     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1009     TestUtils.updateComputeTemplateConsolidationData(
1010         mainST,
1011         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1012         Collections.singletonList
1013             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1014         Collections.singletonList("group_id1"), null, null,
1015         portTypeToIdList,
1016         consolidationData);
1017
1018     portTypeToIdList = new ArrayList<>();
1019     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1020     TestUtils.updateComputeTemplateConsolidationData(
1021         mainST,
1022         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1023         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1024         Collections.singletonList("group_id1"),
1025         null, null,
1026         portTypeToIdList,
1027         consolidationData);
1028
1029     portTypeToIdList = new ArrayList<>();
1030     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1031     TestUtils.updateComputeTemplateConsolidationData(
1032         mainST,
1033         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1034         Collections.singletonList("cmaui_volume_1"), Collections.singletonList("cmaui_volume"),
1035         Collections.singletonList("group_id1"),
1036         null, null,
1037         portTypeToIdList,
1038         consolidationData);
1039
1040     TestUtils.initPortConsolidationData(mainST, consolidationData);
1041     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1", null, null, null, null, null,
1042         consolidationData);
1043
1044
1045     translationContext.setConsolidationData(consolidationData);
1046     List<UnifiedCompositionMode> expectedUnifiedModes =
1047         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1048     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1049   }
1050
1051   @Test
1052   public void testVolumeRelationsDiffBetweenThreeComputes() throws IOException {
1053     ConsolidationData consolidationData = new ConsolidationData();
1054     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1055     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1056         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_compute_valid",
1057             null, null);
1058
1059     TestUtils
1060         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1061
1062     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1063     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1064     TestUtils.updateComputeTemplateConsolidationData(
1065         mainST,
1066         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1067         Collections.singletonList
1068             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1069         Collections.singletonList("group_id1"), null, null,
1070         portTypeToIdList,
1071         consolidationData);
1072
1073     portTypeToIdList = new ArrayList<>();
1074     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1075     TestUtils.updateComputeTemplateConsolidationData(
1076         mainST,
1077         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1078         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1079         Collections.singletonList("group_id1"),
1080         null, null,
1081         portTypeToIdList,
1082         consolidationData);
1083
1084     portTypeToIdList = new ArrayList<>();
1085     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1086     TestUtils.updateComputeTemplateConsolidationData(
1087         mainST,
1088         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1089         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume_1"),
1090         Collections.singletonList("group_id1"),
1091         null, null,
1092         portTypeToIdList,
1093         consolidationData);
1094
1095     TestUtils.initPortConsolidationData(mainST, consolidationData);
1096     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1", null, null, null, null, null,
1097         consolidationData);
1098
1099
1100     translationContext.setConsolidationData(consolidationData);
1101     List<UnifiedCompositionMode> expectedUnifiedModes =
1102         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1103     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1104   }
1105
1106   @Test
1107   public void testGroupRelationsDiffBetweenThreeComputes() throws IOException {
1108     ConsolidationData consolidationData = new ConsolidationData();
1109     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1110     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1111         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_compute_valid",
1112             null, null);
1113
1114     TestUtils
1115         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1116
1117     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1118     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1119     TestUtils.updateComputeTemplateConsolidationData(
1120         mainST,
1121         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1122         Collections.singletonList
1123             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1124         Collections.singletonList("group_id_1"), null,
1125         null,
1126         portTypeToIdList,
1127         consolidationData);
1128
1129     portTypeToIdList = new ArrayList<>();
1130     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1131     TestUtils.updateComputeTemplateConsolidationData(
1132         mainST,
1133         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1134         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1135         Collections.singletonList("group_id_1"),
1136         null, null,
1137         portTypeToIdList,
1138         consolidationData);
1139
1140     portTypeToIdList = new ArrayList<>();
1141     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1142     TestUtils.updateComputeTemplateConsolidationData(
1143         mainST,
1144         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1145         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1146         Collections.singletonList("group_id_2"),
1147         null, null,
1148         portTypeToIdList,
1149         consolidationData);
1150
1151     TestUtils.initPortConsolidationData(mainST, consolidationData);
1152     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1", null, null, null, null, null,
1153         consolidationData);
1154
1155
1156     translationContext.setConsolidationData(consolidationData);
1157     List<UnifiedCompositionMode> expectedUnifiedModes =
1158         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1159     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1160   }
1161
1162   @Test
1163   public void testPortConsolidationDataRelationsSimilar() throws IOException {
1164     ConsolidationData consolidationData = new ConsolidationData();
1165     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1166     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1167         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1168             null, null);
1169
1170     TestUtils
1171         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1172
1173     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1174     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1175     TestUtils.updateComputeTemplateConsolidationData(
1176         mainST,
1177         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1178         Collections.singletonList
1179             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1180         Collections.singletonList("group_id_1"), null,
1181         null,
1182         portTypeToIdList,
1183         consolidationData);
1184
1185     portTypeToIdList = new ArrayList<>();
1186     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1187     TestUtils.updateComputeTemplateConsolidationData(
1188         mainST,
1189         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1190         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1191         Collections.singletonList("group_id_1"),
1192         null, null,
1193         portTypeToIdList,
1194         consolidationData);
1195
1196     portTypeToIdList = new ArrayList<>();
1197     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1198     TestUtils.updateComputeTemplateConsolidationData(
1199         mainST,
1200         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1201         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1202         Collections.singletonList("group_id_1"),
1203         null, null,
1204         portTypeToIdList,
1205         consolidationData);
1206
1207     TestUtils.initPortConsolidationData(mainST, consolidationData);
1208     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1209         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1210         Collections.singletonList("group_id_1"), null,
1211         null,
1212         consolidationData);
1213     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1214         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1215         Collections.singletonList("group_id_1"), null,
1216         null,
1217         consolidationData);
1218     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1219         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1220         Collections.singletonList("group_id_1"), null,
1221         null,
1222         consolidationData);
1223
1224     translationContext.setConsolidationData(consolidationData);
1225     List<UnifiedCompositionMode> expectedUnifiedModes =
1226         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
1227     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1228   }
1229
1230   @Test
1231   public void testNodesInRelationsDiffBetweenThreePortConsolidationDatas() throws IOException {
1232     ConsolidationData consolidationData = new ConsolidationData();
1233     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1234     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1235         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1236             null, null);
1237
1238     TestUtils
1239         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1240
1241     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1242     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1243     TestUtils.updateComputeTemplateConsolidationData(
1244         mainST,
1245         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1246         Collections.singletonList
1247             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1248         Collections.singletonList("group_id_1"), null,
1249         null,
1250         portTypeToIdList,
1251         consolidationData);
1252
1253     portTypeToIdList = new ArrayList<>();
1254     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1255     TestUtils.updateComputeTemplateConsolidationData(
1256         mainST,
1257         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1258         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1259         Collections.singletonList("group_id_1"),
1260         null, null,
1261         portTypeToIdList,
1262         consolidationData);
1263
1264     portTypeToIdList = new ArrayList<>();
1265     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1266     TestUtils.updateComputeTemplateConsolidationData(
1267         mainST,
1268         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1269         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1270         Collections.singletonList("group_id_1"),
1271         null, null,
1272         portTypeToIdList,
1273         consolidationData);
1274
1275     TestUtils.initPortConsolidationData(mainST, consolidationData);
1276     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1277         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1278         Collections.singletonList("group_id_1"), null,
1279         null,
1280         consolidationData);
1281     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1282         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1283         Collections.singletonList("group_id_1"), null,
1284         null,
1285         consolidationData);
1286     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1287         Collections.singletonList("node_in_2"), Collections.singletonList("net_id_1"),
1288         Collections.singletonList("group_id_1"), null,
1289         null,
1290         consolidationData);
1291
1292     translationContext.setConsolidationData(consolidationData);
1293     List<UnifiedCompositionMode> expectedUnifiedModes =
1294         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1295     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1296   }
1297
1298   @Test
1299   public void testNodesOutRelationsDiffBetweenThreePortConsolidationDatas() throws IOException {
1300     ConsolidationData consolidationData = new ConsolidationData();
1301     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1302     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1303         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1304             null, null);
1305
1306     TestUtils
1307         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1308
1309     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1310     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1311     TestUtils.updateComputeTemplateConsolidationData(
1312         mainST,
1313         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1314         Collections.singletonList
1315             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1316         Collections.singletonList("group_id_1"), null,
1317         null,
1318         portTypeToIdList,
1319         consolidationData);
1320
1321     portTypeToIdList = new ArrayList<>();
1322     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1323     TestUtils.updateComputeTemplateConsolidationData(
1324         mainST,
1325         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1326         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1327         Collections.singletonList("group_id_1"),
1328         null, null,
1329         portTypeToIdList,
1330         consolidationData);
1331
1332     portTypeToIdList = new ArrayList<>();
1333     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1334     TestUtils.updateComputeTemplateConsolidationData(
1335         mainST,
1336         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1337         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1338         Collections.singletonList("group_id_1"),
1339         null, null,
1340         portTypeToIdList,
1341         consolidationData);
1342
1343     TestUtils.initPortConsolidationData(mainST, consolidationData);
1344     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1345         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1346         Collections.singletonList("group_id_1"), null,
1347         null,
1348         consolidationData);
1349     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1350         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1351         Collections.singletonList("group_id_1"), null,
1352         null,
1353         consolidationData);
1354     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1355         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_2"),
1356         Collections.singletonList("group_id_1"), null,
1357         null,
1358         consolidationData);
1359
1360     translationContext.setConsolidationData(consolidationData);
1361     List<UnifiedCompositionMode> expectedUnifiedModes =
1362         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1363     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1364   }
1365
1366   @Test
1367   public void testGroupIdsRelationsDiffBetweenThreePortConsolidationDatas() throws IOException {
1368     ConsolidationData consolidationData = new ConsolidationData();
1369     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1370     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1371         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1372             null, null);
1373
1374     TestUtils
1375         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1376
1377     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1378     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1379     TestUtils.updateComputeTemplateConsolidationData(
1380         mainST,
1381         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1382         Collections.singletonList
1383             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1384         Collections.singletonList("group_id_1"), null,
1385         null,
1386         portTypeToIdList,
1387         consolidationData);
1388
1389     portTypeToIdList = new ArrayList<>();
1390     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1391     TestUtils.updateComputeTemplateConsolidationData(
1392         mainST,
1393         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1394         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1395         Collections.singletonList("group_id_1"),
1396         null, null,
1397         portTypeToIdList,
1398         consolidationData);
1399
1400     portTypeToIdList = new ArrayList<>();
1401     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1402     TestUtils.updateComputeTemplateConsolidationData(
1403         mainST,
1404         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1405         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1406         Collections.singletonList("group_id_1"),
1407         null, null,
1408         portTypeToIdList,
1409         consolidationData);
1410
1411     TestUtils.initPortConsolidationData(mainST, consolidationData);
1412     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1413         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1414         Arrays.asList("group_id_1", "group_id_2"), null, null,
1415         consolidationData);
1416     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1417         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1418         Arrays.asList("group_id_1", "group_id_2"), null, null,
1419         consolidationData);
1420     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1421         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1422         Arrays.asList("group_id_1", "group_id_3"), null, null,
1423         consolidationData);
1424
1425     translationContext.setConsolidationData(consolidationData);
1426     List<UnifiedCompositionMode> expectedUnifiedModes =
1427         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1428     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1429   }
1430
1431   @Test
1432   public void testValidConsolidationForComputesWithValidGetAttr() throws IOException {
1433     ConsolidationData consolidationData = new ConsolidationData();
1434     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1435     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1436         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1437             null, null);
1438
1439     TestUtils
1440         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1441
1442     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1443     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1444
1445     TestUtils.updateComputeTemplateConsolidationData(
1446         mainST,
1447         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1448         Collections.singletonList
1449             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1450         Collections.singletonList("group_id_1"),
1451         Collections.singletonList("node_1"), null,
1452         portTypeToIdList,
1453         consolidationData);
1454
1455     portTypeToIdList = new ArrayList<>();
1456     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1457     TestUtils.updateComputeTemplateConsolidationData(
1458         mainST,
1459         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1460         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1461         Collections.singletonList("group_id_1"),
1462         Collections.singletonList("node_2"), null,
1463         portTypeToIdList,
1464         consolidationData);
1465
1466     portTypeToIdList = new ArrayList<>();
1467     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1468     TestUtils.updateComputeTemplateConsolidationData(
1469         mainST,
1470         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1471         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1472         Collections.singletonList("group_id_1"),
1473         Collections.singletonList("node_3"), null,
1474         portTypeToIdList,
1475         consolidationData);
1476
1477     TestUtils.initPortConsolidationData(mainST, consolidationData);
1478     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1479         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1480         Arrays.asList("group_id_1", "group_id_2"), null, null,
1481         consolidationData);
1482     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1483         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1484         Arrays.asList("group_id_1", "group_id_2"), null, null,
1485         consolidationData);
1486     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1487         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1488         Arrays.asList("group_id_1", "group_id_2"), null, null,
1489         consolidationData);
1490
1491     translationContext.setConsolidationData(consolidationData);
1492     List<UnifiedCompositionMode> expectedUnifiedModes =
1493         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
1494     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1495   }
1496
1497   @Test
1498   public void testInvalidConsolidationForComputesWithGetAttrForEachOther() throws IOException {
1499     ConsolidationData consolidationData = new ConsolidationData();
1500     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1501     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1502         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1503             null, null);
1504
1505     TestUtils
1506         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1507
1508     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1509     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1510
1511     TestUtils.updateComputeTemplateConsolidationData(
1512         mainST,
1513         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1514         Collections.singletonList
1515             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1516         Collections.singletonList("group_id_1"),
1517         Collections.singletonList("server_ps02"), null,
1518         portTypeToIdList,
1519         consolidationData);
1520
1521     portTypeToIdList = new ArrayList<>();
1522     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1523     TestUtils.updateComputeTemplateConsolidationData(
1524         mainST,
1525         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1526         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1527         Collections.singletonList("group_id_1"),
1528         Collections.singletonList("node_1"), null,
1529         portTypeToIdList,
1530         consolidationData);
1531
1532     portTypeToIdList = new ArrayList<>();
1533     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1534     TestUtils.updateComputeTemplateConsolidationData(
1535         mainST,
1536         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1537         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1538         Collections.singletonList("group_id_1"),
1539         Collections.singletonList("node_2"), null,
1540         portTypeToIdList,
1541         consolidationData);
1542
1543     TestUtils.initPortConsolidationData(mainST, consolidationData);
1544     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1545         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1546         Arrays.asList("group_id_1", "group_id_2"), null, null,
1547         consolidationData);
1548     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1549         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1550         Arrays.asList("group_id_1", "group_id_2"), null, null,
1551         consolidationData);
1552     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1553         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1554         Arrays.asList("group_id_1", "group_id_2"), null, null,
1555         consolidationData);
1556
1557     translationContext.setConsolidationData(consolidationData);
1558     List<UnifiedCompositionMode> expectedUnifiedModes =
1559         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1560     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1561   }
1562
1563   @Test
1564   public void testValidConsolidationForPortsWithValidGetAttr() throws IOException {
1565     ConsolidationData consolidationData = new ConsolidationData();
1566     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1567     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1568         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1569             null, null);
1570
1571     TestUtils
1572         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1573
1574     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1575     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1576
1577     TestUtils.updateComputeTemplateConsolidationData(
1578         mainST,
1579         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1580         Collections.singletonList
1581             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1582         Collections.singletonList("group_id_1"), null,
1583         null,
1584         portTypeToIdList,
1585         consolidationData);
1586
1587     portTypeToIdList = new ArrayList<>();
1588     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1589     TestUtils.updateComputeTemplateConsolidationData(
1590         mainST,
1591         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1592         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1593         Collections.singletonList("group_id_1"),
1594         null, null,
1595         portTypeToIdList,
1596         consolidationData);
1597
1598     portTypeToIdList = new ArrayList<>();
1599     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1600     TestUtils.updateComputeTemplateConsolidationData(
1601         mainST,
1602         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1603         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1604         Collections.singletonList("group_id_1"),
1605         null, null,
1606         portTypeToIdList,
1607         consolidationData);
1608
1609     TestUtils.initPortConsolidationData(mainST, consolidationData);
1610     List<String> portNodeTemplateIds =
1611         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3");
1612     List<List<String>> nodesConnectedInIds =
1613         Arrays.asList(Collections.singletonList("node_in_1"),
1614             Collections.singletonList("node_in_1"),
1615             Collections.singletonList("node_in_1"));
1616     List<List<String>> nodesConnectedOutIds =
1617         Arrays.asList(Collections.singletonList("node_out_1"),
1618             Collections.singletonList("node_out_1"),
1619             Collections.singletonList("node_out_1"));
1620     List<List<String>> getAttrInIds =
1621         Arrays.asList(Collections.singletonList("get_attr_1"),
1622             Collections.singletonList("get_attr_2"),
1623             Collections.singletonList("get_attr_3"));
1624     List<List<String>> groupIds =
1625         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
1626             Arrays.asList("group_id_1", "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
1627     List<List<Pair<String, GetAttrFuncData>>> getAttrOut =
1628         Arrays.asList(null, null, null);
1629
1630     TestUtils.updateMultiplePortConsolidationDatas(
1631         mainST, portNodeTemplateIds, nodesConnectedInIds, nodesConnectedOutIds, groupIds,
1632         getAttrInIds, getAttrOut, consolidationData);
1633
1634     translationContext.setConsolidationData(consolidationData);
1635     List<UnifiedCompositionMode> expectedUnifiedModes =
1636         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
1637     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1638   }
1639
1640   @Test
1641   public void testInvalidConsolidationForPortsWithGetAttrInForEachOther() throws IOException {
1642     ConsolidationData consolidationData = new ConsolidationData();
1643     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1644     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1645         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation" +
1646                 "/three_ports_similar_relations",
1647             null, null);
1648
1649     TestUtils
1650         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1651
1652     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1653     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1654
1655     TestUtils.updateComputeTemplateConsolidationData(
1656         mainST,
1657         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1658         Collections.singletonList
1659             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1660         Collections.singletonList("group_id_1"),
1661         Collections.singletonList("node_1"), null,
1662         portTypeToIdList,
1663         consolidationData);
1664
1665     portTypeToIdList = new ArrayList<>();
1666     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1667     TestUtils.updateComputeTemplateConsolidationData(
1668         mainST,
1669         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1670         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1671         Collections.singletonList("group_id_1"),
1672         Collections.singletonList("node_2"), null,
1673         portTypeToIdList,
1674         consolidationData);
1675
1676     portTypeToIdList = new ArrayList<>();
1677     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1678     TestUtils.updateComputeTemplateConsolidationData(
1679         mainST,
1680         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1681         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1682         Collections.singletonList("group_id_1"),
1683         Collections.singletonList("node_3"), null,
1684         portTypeToIdList,
1685         consolidationData);
1686
1687     TestUtils.initPortConsolidationData(mainST, consolidationData);
1688     List<String> portNodeTemplateIds =
1689         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3");
1690     List<List<String>> nodesConnectedInIds =
1691         Arrays.asList(Collections.singletonList("node_in_1"),
1692             Collections.singletonList("node_in_1"),
1693             Collections.singletonList("node_in_1"));
1694     List<List<String>> nodesConnectedOutIds =
1695         Arrays.asList(Collections.singletonList("node_out_1"),
1696             Collections.singletonList("node_out_1"),
1697             Collections.singletonList("node_out_1"));
1698     List<List<String>> getAttrInIds =
1699         Arrays.asList(Collections.singletonList("get_attr_1"),
1700             Collections.singletonList("get_attr_2"),
1701             Collections.singletonList("cm01_port_1"));
1702     List<List<String>> groupIds =
1703         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
1704             Arrays.asList("group_id_1", "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
1705     List<List<Pair<String, GetAttrFuncData>>> getAttrOut =
1706         Arrays.asList(null, null, null);
1707
1708     TestUtils.updateMultiplePortConsolidationDatas(
1709         mainST, portNodeTemplateIds, nodesConnectedInIds, nodesConnectedOutIds, groupIds,
1710         getAttrInIds, getAttrOut, consolidationData);
1711
1712     translationContext.setConsolidationData(consolidationData);
1713     List<UnifiedCompositionMode> expectedUnifiedModes =
1714         Collections.singletonList(UnifiedCompositionMode.CatalogInstance);
1715     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1716   }
1717
1718   @Test
1719   public void testValidConsolidationForComputesWithSamePortTypesPointingByGetAttrIn() throws
1720       IOException {
1721     ConsolidationData consolidationData = new ConsolidationData();
1722     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1723     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1724         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1725             null, null);
1726
1727     TestUtils
1728         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1729
1730     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1731     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1732
1733     TestUtils.updateComputeTemplateConsolidationData(
1734         mainST,
1735         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1736         Collections.singletonList
1737             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1738         Collections.singletonList("group_id_1"),
1739         Collections.singletonList("cm01_port_1"), null,
1740         portTypeToIdList,
1741         consolidationData);
1742
1743     portTypeToIdList = new ArrayList<>();
1744     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1745     TestUtils.updateComputeTemplateConsolidationData(
1746         mainST,
1747         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1748         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1749         Collections.singletonList("group_id_1"),
1750         Collections.singletonList("cm01_port_2"), null,
1751         portTypeToIdList,
1752         consolidationData);
1753
1754     portTypeToIdList = new ArrayList<>();
1755     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1756     TestUtils.updateComputeTemplateConsolidationData(
1757         mainST,
1758         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1759         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1760         Collections.singletonList("group_id_1"),
1761         Collections.singletonList("cm01_port_3"), null,
1762         portTypeToIdList,
1763         consolidationData);
1764
1765     TestUtils.initPortConsolidationData(mainST, consolidationData);
1766     List<String> portNodeTemplateIds =
1767         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3");
1768     List<List<String>> nodesConnectedInIds =
1769         Arrays.asList(Collections.singletonList("node_in_1"),
1770             Collections.singletonList("node_in_1"),
1771             Collections.singletonList("node_in_1"));
1772     List<List<String>> nodesConnectedOutIds =
1773         Arrays.asList(Collections.singletonList("node_out_1"),
1774             Collections.singletonList("node_out_1"),
1775             Collections.singletonList("node_out_1"));
1776     List<List<String>> getAttrInIds =
1777         Arrays.asList(Collections.singletonList("get_attr_1"),
1778             Collections.singletonList("get_attr_2"),
1779             Collections.singletonList("get_attr_3"));
1780     List<List<String>> groupIds =
1781         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
1782             Arrays.asList("group_id_1", "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
1783     List<List<Pair<String, GetAttrFuncData>>> getAttrOut =
1784         Arrays.asList(null, null, null);
1785
1786     TestUtils.updateMultiplePortConsolidationDatas(
1787         mainST, portNodeTemplateIds, nodesConnectedInIds, nodesConnectedOutIds, groupIds,
1788         getAttrInIds, getAttrOut, consolidationData);
1789
1790     translationContext.setConsolidationData(consolidationData);
1791     List<UnifiedCompositionMode> expectedUnifiedModes =
1792         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
1793     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1794   }
1795
1796   @Test
1797   public void testValidGetAttrOutFromComputes() throws IOException {
1798     ConsolidationData consolidationData = new ConsolidationData();
1799     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1800     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1801         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1802             null, null);
1803
1804     TestUtils
1805         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1806
1807     GetAttrFuncData getAttrFuncData = new GetAttrFuncData("name", "c1_name");
1808     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1809     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1810     TestUtils.updateComputeTemplateConsolidationData(
1811         mainST,
1812         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1813         Collections.singletonList
1814             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1815         Collections.singletonList("group_id_1"),
1816         Collections.singletonList("cm01_port_1"),
1817         Collections.singletonList(
1818             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
1819         portTypeToIdList,
1820         consolidationData);
1821
1822     portTypeToIdList = new ArrayList<>();
1823     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1824     TestUtils.updateComputeTemplateConsolidationData(
1825         mainST,
1826         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1827         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1828         Collections.singletonList("group_id_1"),
1829         Collections.singletonList("cm01_port_1"),
1830         Collections.singletonList(
1831             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
1832         portTypeToIdList,
1833         consolidationData);
1834
1835     portTypeToIdList = new ArrayList<>();
1836     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1837     TestUtils.updateComputeTemplateConsolidationData(
1838         mainST,
1839         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1840         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1841         Collections.singletonList("group_id_1"),
1842         Collections.singletonList("cm01_port_1"),
1843         Collections.singletonList(
1844             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
1845         portTypeToIdList,
1846         consolidationData);
1847
1848     TestUtils.initPortConsolidationData(mainST, consolidationData);
1849     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
1850         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1851         Arrays.asList("group_id_1", "group_id_2"),
1852         Collections.singletonList("sm01_port_2"), null,
1853         consolidationData);
1854     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
1855         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1856         Arrays.asList("group_id_1", "group_id_2"),
1857         Collections.singletonList("sm01_port_1"), null,
1858         consolidationData);
1859     TestUtils.updatePortConsolidationData(mainST, "cm01_port_3",
1860         Collections.singletonList("node_in_1"), Collections.singletonList("net_id_1"),
1861         Arrays.asList("group_id_1", "group_id_2"),
1862         Collections.singletonList("rm01_port_1"), null,
1863         consolidationData);
1864
1865     translationContext.setConsolidationData(consolidationData);
1866     List<UnifiedCompositionMode> expectedUnifiedModes =
1867         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
1868     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1869   }
1870
1871   @Test
1872   public void testInValidGetAttrOutFromComputesPortTypeDifferent() throws IOException {
1873     ConsolidationData consolidationData = new ConsolidationData();
1874     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1875     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1876         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1877             null, null);
1878
1879     TestUtils
1880         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1881
1882     GetAttrFuncData getAttrFuncData = new GetAttrFuncData("name", "c1_name");
1883     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1884     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1885     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
1886     TestUtils.updateComputeTemplateConsolidationData(
1887         mainST,
1888         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1889         Collections.singletonList
1890             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1891         Collections.singletonList("group_id_1"),
1892         Collections.singletonList("cm01_port_1"),
1893         Collections.singletonList(
1894             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
1895         portTypeToIdList,
1896         consolidationData);
1897
1898     portTypeToIdList = new ArrayList<>();
1899     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1900     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_2"));
1901     TestUtils.updateComputeTemplateConsolidationData(
1902         mainST,
1903         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
1904         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1905         Collections.singletonList("group_id_1"),
1906         Collections.singletonList("cm01_port_1"),
1907         Collections.singletonList(
1908             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
1909         portTypeToIdList,
1910         consolidationData);
1911
1912     portTypeToIdList = new ArrayList<>();
1913     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
1914     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_3"));
1915     TestUtils.updateComputeTemplateConsolidationData(
1916         mainST,
1917         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
1918         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1919         Collections.singletonList("group_id_1"),
1920         Collections.singletonList("cm01_port_1"),
1921         Collections.singletonList(
1922             new ImmutablePair<>("sm01_port_1", getAttrFuncData)),
1923         portTypeToIdList,
1924         consolidationData);
1925
1926     TestUtils.initPortConsolidationData(mainST, consolidationData);
1927
1928     List<String> portNodeTemplateIds =
1929         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3", "sm01_port_1",
1930             "sm01_port_2",
1931             "sm01_port_3");
1932     List<List<String>> nodesConnectedInIds =
1933         Arrays.asList(Collections.singletonList("node_in_1"),
1934             Collections.singletonList("node_in_1"), Collections.singletonList
1935                 ("node_in_1"), Collections.singletonList("node_in_1"),
1936             Collections.singletonList("node_in_1"),
1937             Collections.singletonList("node_in_1"));
1938     List<List<String>> nodesConnectedOutIds =
1939         Arrays.asList(Collections.singletonList("node_out_1"),
1940             Collections.singletonList("node_out_1"), Collections.singletonList
1941                 ("node_out_1"), Collections.singletonList("node_out_1"),
1942             Collections.singletonList("node_out_1"),
1943             Collections.singletonList("node_out_1"));
1944     List<List<String>> getAttrInIds =
1945         Arrays.asList(Collections.singletonList("get_attr_1"),
1946             Collections.singletonList("get_attr_2"), Collections.singletonList
1947                 ("get_attr_3"), Collections.singletonList("get_attr_1"),
1948             Collections.singletonList("get_attr_2"),
1949             Collections.singletonList("get_attr_3"));
1950     List<List<String>> groupIds =
1951         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
1952             Arrays.asList("group_id_1",
1953                 "group_id_2"), Arrays.asList("group_id_1", "group_id_2"),
1954             Arrays.asList("group_id_1", "group_id_2"),
1955             Arrays.asList("group_id_1",
1956                 "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
1957     List<List<Pair<String, GetAttrFuncData>>> getAttrOut =
1958         Arrays.asList(null, null, null, null,
1959             null, null);
1960
1961     TestUtils.updateMultiplePortConsolidationDatas(mainST, portNodeTemplateIds,
1962         nodesConnectedInIds, nodesConnectedOutIds, groupIds, getAttrInIds, getAttrOut,
1963         consolidationData);
1964
1965     translationContext.setConsolidationData(consolidationData);
1966     List<UnifiedCompositionMode> expectedUnifiedModes =
1967         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
1968     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
1969   }
1970
1971   @Test
1972   public void testValidGetAttrOutFromPorts() throws IOException {
1973     ConsolidationData consolidationData = new ConsolidationData();
1974     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
1975     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
1976         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
1977             null, null);
1978
1979     TestUtils
1980         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
1981
1982     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
1983     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
1984     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
1985     TestUtils.updateComputeTemplateConsolidationData(
1986         mainST,
1987         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
1988         Collections.singletonList
1989             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
1990         Collections.singletonList("group_id_1"),
1991         Collections.singletonList("cm01_port_1"), null,
1992         portTypeToIdList,
1993         consolidationData);
1994
1995     portTypeToIdList = new ArrayList<>();
1996     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
1997     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_2"));
1998     TestUtils.updateComputeTemplateConsolidationData(
1999         mainST,
2000         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
2001         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
2002         Collections.singletonList("group_id_1"),
2003         Collections.singletonList("cm01_port_1"), null,
2004         portTypeToIdList,
2005         consolidationData);
2006
2007     portTypeToIdList = new ArrayList<>();
2008     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
2009     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_3"));
2010     TestUtils.updateComputeTemplateConsolidationData(
2011         mainST,
2012         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
2013         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
2014         Collections.singletonList("group_id_1"),
2015         Collections.singletonList("cm01_port_1"), null,
2016         portTypeToIdList,
2017         consolidationData);
2018
2019     TestUtils.initPortConsolidationData(mainST, consolidationData);
2020
2021     GetAttrFuncData getAttrFuncData = new GetAttrFuncData("name", "s1_name");
2022     List<String> portNodeTemplateIds =
2023         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3", "sm01_port_1",
2024             "sm01_port_2",
2025             "sm01_port_3");
2026     List<List<String>> nodesConnectedInIds =
2027         Arrays.asList(Collections.singletonList("node_in_1"),
2028             Collections.singletonList("node_in_1"), Collections.singletonList
2029                 ("node_in_1"), Collections.singletonList("node_in_1"),
2030             Collections.singletonList("node_in_1"),
2031             Collections.singletonList("node_in_1"));
2032     List<List<String>> nodesConnectedOutIds =
2033         Arrays.asList(Collections.singletonList("node_out_1"),
2034             Collections.singletonList("node_out_1"), Collections.singletonList
2035                 ("node_out_1"), Collections.singletonList("node_out_1"),
2036             Collections.singletonList("node_out_1"),
2037             Collections.singletonList("node_out_1"));
2038     List<List<String>> getAttrInIds =
2039         Arrays.asList(null, null, null, null, null, null);
2040     List<List<String>> groupIds =
2041         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
2042             Arrays.asList("group_id_1",
2043                 "group_id_2"), Arrays.asList("group_id_1", "group_id_2"),
2044             Arrays.asList("group_id_1", "group_id_2"),
2045             Arrays.asList("group_id_1",
2046                 "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
2047     List<List<Pair<String, GetAttrFuncData>>> getAttrOut = Arrays.asList(
2048         Collections.singletonList(
2049             new ImmutablePair<>("sm01_port_1", getAttrFuncData)),
2050         Collections.singletonList(
2051             new ImmutablePair<>("sm01_port_2", getAttrFuncData)),
2052         Collections.singletonList(
2053             new ImmutablePair<>("sm01_port_3", getAttrFuncData)),
2054         Collections.singletonList(
2055             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
2056         Collections.singletonList(
2057             new ImmutablePair<>("cm01_port_2", getAttrFuncData)),
2058         Collections.singletonList(
2059             new ImmutablePair<>("cm01_port_3", getAttrFuncData)));
2060
2061     TestUtils.updateMultiplePortConsolidationDatas(mainST, portNodeTemplateIds,
2062         nodesConnectedInIds, nodesConnectedOutIds, groupIds, getAttrInIds, getAttrOut,
2063         consolidationData);
2064
2065     translationContext.setConsolidationData(consolidationData);
2066     List<UnifiedCompositionMode> expectedUnifiedModes =
2067         Collections.singletonList(UnifiedCompositionMode.ScalingInstances);
2068     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
2069   }
2070
2071   @Test
2072   public void testInvalidGetAttrOutFromPorts() throws IOException {
2073     ConsolidationData consolidationData = new ConsolidationData();
2074     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2075     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2076         ("/mock/services/heattotosca/consolidation/translatedfiles/computeportconsolidation/three_ports_similar_relations",
2077             null, null);
2078
2079     TestUtils
2080         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
2081
2082     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
2083     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_1"));
2084     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_1"));
2085     TestUtils.updateComputeTemplateConsolidationData(
2086         mainST,
2087         computeNodeTypeName, "server_ps01", Collections.singletonList("cm01_port_1"),
2088         Collections.singletonList
2089             ("cmaui_volume"), Collections.singletonList("cmaui_volume"),
2090         Collections.singletonList("group_id_1"),
2091         Collections.singletonList("cm01_port_1"), null,
2092         portTypeToIdList,
2093         consolidationData);
2094
2095     portTypeToIdList = new ArrayList<>();
2096     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_2"));
2097     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_2"));
2098     TestUtils.updateComputeTemplateConsolidationData(
2099         mainST,
2100         computeNodeTypeName, "server_ps02", Collections.singletonList("cm01_port_1"),
2101         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
2102         Collections.singletonList("group_id_1"),
2103         Collections.singletonList("cm01_port_1"), null,
2104         portTypeToIdList,
2105         consolidationData);
2106
2107     portTypeToIdList = new ArrayList<>();
2108     portTypeToIdList.add(new ImmutablePair<>("cm01_port", "cm01_port_3"));
2109     portTypeToIdList.add(new ImmutablePair<>("sm01_port", "sm01_port_3"));
2110     TestUtils.updateComputeTemplateConsolidationData(
2111         mainST,
2112         computeNodeTypeName, "server_ps03", Collections.singletonList("cm01_port_1"),
2113         Collections.singletonList("cmaui_volume"), Collections.singletonList("cmaui_volume"),
2114         Collections.singletonList("group_id_1"),
2115         Collections.singletonList("cm01_port_1"), null,
2116         portTypeToIdList,
2117         consolidationData);
2118
2119     TestUtils.initPortConsolidationData(mainST, consolidationData);
2120
2121     GetAttrFuncData getAttrFuncData = new GetAttrFuncData("name", "s1_name");
2122     List<String> portNodeTemplateIds =
2123         Arrays.asList("cm01_port_1", "cm01_port_2", "cm01_port_3", "sm01_port_1",
2124             "sm01_port_2",
2125             "sm01_port_3");
2126     List<List<String>> nodesConnectedInIds =
2127         Arrays.asList(Collections.singletonList("node_in_1"),
2128             Collections.singletonList("node_in_1"), Collections.singletonList
2129                 ("node_in_1"), Collections.singletonList("node_in_1"),
2130             Collections.singletonList("node_in_1"),
2131             Collections.singletonList("node_in_1"));
2132     List<List<String>> nodesConnectedOutIds =
2133         Arrays.asList(Collections.singletonList("node_out_1"),
2134             Collections.singletonList("node_out_1"), Collections.singletonList
2135                 ("node_out_1"), Collections.singletonList("node_out_1"),
2136             Collections.singletonList("node_out_1"),
2137             Collections.singletonList("node_out_1"));
2138     List<List<String>> getAttrInIds =
2139         Arrays.asList(null, null, null, null, null, null);
2140     List<List<String>> groupIds =
2141         Arrays.asList(Arrays.asList("group_id_1", "group_id_2"),
2142             Arrays.asList("group_id_1", "group_id_2"), Arrays.asList("group_id_1", "group_id_2"),
2143             Arrays.asList("group_id_1", "group_id_2"),
2144             Arrays.asList("group_id_1",
2145                 "group_id_2"), Arrays.asList("group_id_1", "group_id_2"));
2146     List<List<Pair<String, GetAttrFuncData>>> getAttrOut = Arrays.asList(
2147         Collections.singletonList(
2148             new ImmutablePair<>("server_ps01", getAttrFuncData)),
2149         Collections.singletonList(
2150             new ImmutablePair<>("server_ps01", getAttrFuncData)),
2151         Collections.singletonList(
2152             new ImmutablePair<>("sm01_port_3", getAttrFuncData)),
2153         Collections.singletonList(
2154             new ImmutablePair<>("cm01_port_1", getAttrFuncData)),
2155         Collections.singletonList(
2156             new ImmutablePair<>("cm01_port_2", getAttrFuncData)),
2157         Collections.singletonList(
2158             new ImmutablePair<>("cm01_port_3", getAttrFuncData)));
2159
2160     TestUtils.updateMultiplePortConsolidationDatas(mainST, portNodeTemplateIds,
2161         nodesConnectedInIds, nodesConnectedOutIds, groupIds, getAttrInIds, getAttrOut,
2162         consolidationData);
2163
2164     translationContext.setConsolidationData(consolidationData);
2165     List<UnifiedCompositionMode> expectedUnifiedModes =
2166         Collections.singletonList(UnifiedCompositionMode.SingleSubstitution);
2167     verifyMainServiceTemplateConsolidation(1, expectedUnifiedModes, toscaServiceModel);
2168   }
2169
2170   @Test
2171   public void testSubstitutionConsolidationPreConditionTrue() throws IOException {
2172     translationContext = new TranslationContext();
2173     String mainSTName = "MainServiceTemplate.yaml";
2174     String nestedServiceTemplateName = "nested-pcm_v0.1ServiceTemplate.yaml";
2175
2176     ConsolidationData consolidationData = new ConsolidationData();
2177     TestUtils.updateNestedConsolidationData(mainSTName, Collections.singletonList("server_pcm_001"),
2178         consolidationData);
2179     TestUtils.initComputeNodeTypeInConsolidationData(mainSTName,
2180         "org.openecomp.resource.vfc.nodes.heat" +
2181             ".pcm_server", consolidationData);
2182     TestUtils.initComputeNodeTemplateIdInConsolidationData(mainSTName,
2183         "org.openecomp.resource.vfc.nodes.heat.pcm_server", "server_pcm_001", consolidationData);
2184     TestUtils.initComputeNodeTypeInConsolidationData(nestedServiceTemplateName,
2185         "org.openecomp.resource.vfc.nodes.heat" +
2186             ".pcm_server", consolidationData);
2187     TestUtils.initComputeNodeTemplateIdInConsolidationData(nestedServiceTemplateName,
2188         "org.openecomp.resource.vfc.nodes" +
2189             ".heat.pcm_server", "pcm_server", consolidationData);
2190
2191     translationContext.setConsolidationData(consolidationData);
2192
2193     addMockServiceTemplateToContext(mainSTName, "Main");
2194     addMockServiceTemplateToContext(nestedServiceTemplateName, "nested-pcm_v0.1");
2195
2196     verifySubstitutionServiceTemplateConsolidation
2197         (1, translationContext.getTranslatedServiceTemplates().get(mainSTName),
2198             translationContext.getTranslatedServiceTemplates().get(nestedServiceTemplateName),
2199             UnifiedCompositionMode.NestedSingleCompute);
2200   }
2201
2202   @Test
2203   public void testSubstitutionConsolidationPreConditionFalseMoreThanOneComputeType()
2204       throws IOException {
2205     translationContext = new TranslationContext();
2206     String mainSTName = "MainServiceTemplate.yaml";
2207     String nestedServiceTemplateName = "nested-pcm_v0.1ServiceTemplate.yaml";
2208
2209     ConsolidationData consolidationData = new ConsolidationData();
2210     TestUtils.updateNestedConsolidationData(mainSTName, Collections.singletonList("server_pcm_001"),
2211         consolidationData);
2212     TestUtils.initComputeNodeTypeInConsolidationData(mainSTName,
2213         "org.openecomp.resource.vfc.nodes.heat" +
2214             ".pcm_server", consolidationData);
2215     TestUtils.initComputeNodeTemplateIdInConsolidationData(mainSTName,
2216         "org.openecomp.resource.vfc.nodes" +
2217             ".heat.pcm_server", "server_pcm_001", consolidationData);
2218     TestUtils.initComputeNodeTypeInConsolidationData(nestedServiceTemplateName,
2219         "org.openecomp.resource.vfc.nodes.heat" +
2220             ".pcm_server", consolidationData);
2221
2222     TestUtils.updateNestedConsolidationData(mainSTName, Collections.singletonList("server_oam_001"),
2223         consolidationData);
2224     TestUtils.initComputeNodeTypeInConsolidationData(mainSTName,
2225         "org.openecomp.resource.vfc.nodes.heat" +
2226             ".oam_server", consolidationData);
2227     TestUtils.initComputeNodeTemplateIdInConsolidationData(mainSTName,
2228         "org.openecomp.resource.vfc.nodes.heat.oam_server", "server_oam_001", consolidationData);
2229     TestUtils.initComputeNodeTypeInConsolidationData(nestedServiceTemplateName,
2230         "org.openecomp.resource.vfc.nodes.heat" +
2231             ".oam_server", consolidationData);
2232
2233     translationContext.setConsolidationData(consolidationData);
2234
2235     addMockServiceTemplateToContext(mainSTName, "Main");
2236     addMockServiceTemplateToContext(nestedServiceTemplateName, "nested-pcm_v0.1");
2237
2238     verifySubstitutionServiceTemplateConsolidation
2239         (1, translationContext.getTranslatedServiceTemplates().get(mainSTName),
2240             translationContext.getTranslatedServiceTemplates().get
2241                 (nestedServiceTemplateName), UnifiedCompositionMode.SingleSubstitution);
2242   }
2243
2244   @Test
2245   public void testSubstitutionConsolidationPreConditionFalseMoreThanOneComputeOfSameType()
2246       throws IOException {
2247     translationContext = new TranslationContext();
2248     String mainSTName = "MainServiceTemplate.yaml";
2249     String nestedServiceTemplateName = "nested-pcm_v0.1ServiceTemplate.yaml";
2250
2251     ConsolidationData consolidationData = new ConsolidationData();
2252     TestUtils.updateNestedConsolidationData(mainSTName, Collections.singletonList("server_pcm_001"),
2253         consolidationData);
2254     TestUtils.initComputeNodeTypeInConsolidationData(nestedServiceTemplateName,
2255         "org.openecomp.resource.vfc.nodes.heat" +
2256             ".pcm_server", consolidationData);
2257     TestUtils.initComputeNodeTypeInConsolidationData(mainSTName,
2258         "org.openecomp.resource.vfc.nodes.heat" +
2259             ".pcm_server", consolidationData);
2260     TestUtils.initComputeNodeTemplateIdInConsolidationData(nestedServiceTemplateName,
2261         "org.openecomp.resource.vfc.nodes" +
2262             ".heat.pcm_server", "pcm_server_1", consolidationData);
2263
2264     TestUtils
2265         .updateNestedConsolidationData(nestedServiceTemplateName,
2266             Collections.singletonList("server_pcm_002"),
2267             consolidationData);
2268     TestUtils.initComputeNodeTemplateIdInConsolidationData(nestedServiceTemplateName,
2269         "org.openecomp.resource.vfc.nodes" +
2270             ".heat.pcm_server", "pcm_server_2", consolidationData);
2271
2272     translationContext.setConsolidationData(consolidationData);
2273
2274     addMockServiceTemplateToContext(mainSTName, "Main");
2275     addMockServiceTemplateToContext(nestedServiceTemplateName, "nested-pcm_v0.1");
2276
2277     Mockito.doNothing().when(consolidationService).serviceTemplateConsolidation
2278         (translationContext.getTranslatedServiceTemplates().get(nestedServiceTemplateName),
2279             translationContext);
2280     verifySubstitutionServiceTemplateConsolidation
2281         (1, translationContext.getTranslatedServiceTemplates().get(mainSTName),
2282             translationContext.getTranslatedServiceTemplates().get(nestedServiceTemplateName),
2283             UnifiedCompositionMode.SingleSubstitution);
2284   }
2285
2286   @Test
2287   public void testSubstitutionConsolidationPreConditionFalseNestedInsideNested() {
2288     translationContext = new TranslationContext();
2289     String mainSTName = "MainServiceTemplate.yaml";
2290     String nestedServiceTemplateName = "nested-pcm_v0.1ServiceTemplate.yaml";
2291
2292     ConsolidationData consolidationData = new ConsolidationData();
2293     TestUtils.updateNestedConsolidationData(mainSTName, Collections.singletonList("server_pcm_001"),
2294         consolidationData);
2295     TestUtils.initComputeNodeTypeInConsolidationData(mainSTName,
2296         "org.openecomp.resource.vfc.nodes.heat" +
2297             ".pcm_server", consolidationData);
2298     TestUtils.initComputeNodeTemplateIdInConsolidationData(mainSTName,
2299         "org.openecomp.resource.vfc.nodes.heat.pcm_server", "server_pcm_001", consolidationData);
2300     TestUtils.initComputeNodeTypeInConsolidationData(nestedServiceTemplateName,
2301         "org.openecomp.resource.vfc.nodes.heat" +
2302             ".pcm_server", consolidationData);
2303     TestUtils.initComputeNodeTemplateIdInConsolidationData(nestedServiceTemplateName,
2304         "org.openecomp.resource.vfc.nodes" +
2305             ".heat.pcm_server", "pcm_server", consolidationData);
2306
2307     TestUtils
2308         .updateNestedConsolidationData(nestedServiceTemplateName,
2309             Collections.singletonList("nested_resource"),
2310             consolidationData);
2311
2312     translationContext.setConsolidationData(consolidationData);
2313
2314     addMockServiceTemplateToContext(mainSTName, "Main");
2315     addMockServiceTemplateToContext(nestedServiceTemplateName, "nested-pcm_v0.1");
2316
2317     verifySubstitutionServiceTemplateConsolidation
2318         (0, translationContext.getTranslatedServiceTemplates().get(mainSTName),
2319             translationContext.getTranslatedServiceTemplates().get(nestedServiceTemplateName),
2320             UnifiedCompositionMode.SingleSubstitution);
2321   }
2322
2323   @Test
2324   public void testConsolidationPreConditionFalseDiffSubportTypes() throws IOException {
2325     translationContext = new TranslationContext();
2326     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2327     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2328         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2329             null, null);
2330
2331     ConsolidationData consolidationData = new ConsolidationData();
2332     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2333
2334     TestUtils
2335         .addPortSubInterface(
2336             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2337                 "role_1", "interface_1", null, null, null, null, consolidationData));
2338     TestUtils
2339         .addPortSubInterface(
2340             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested2.yaml", 2,
2341                 "role_2", "interface_2", null, null, null, null, consolidationData));
2342     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.SingleSubstitution));
2343   }
2344
2345   private void generateComputeAndPortConsolidationData(String computeNodeTypeName,
2346                                                        ConsolidationData consolidationData) {
2347     TestUtils
2348         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
2349
2350     updateComputeConsolidationData("server_ps01", computeNodeTypeName, "cm01_port",
2351         "cm01_port_1", consolidationData);
2352
2353     updateComputeConsolidationData("server_ps02", computeNodeTypeName, "cm01_port",
2354         "cm01_port_2", consolidationData);
2355
2356     TestUtils.initPortConsolidationData(mainST, consolidationData);
2357     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
2358         null, null, null, null, null,
2359         consolidationData);
2360     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
2361         null, null, null, null, null,
2362         consolidationData);
2363   }
2364
2365   @Test
2366   public void testConsolidationPreConditionFalseDiffSubportNumber() throws IOException {
2367     translationContext = new TranslationContext();
2368     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2369     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2370         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2371             null, null);
2372
2373     ConsolidationData consolidationData = new ConsolidationData();
2374     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2375
2376     TestUtils
2377         .addPortSubInterface(
2378             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2379                 "role_1", "interface_1", null, null, null, null, consolidationData));
2380     TestUtils
2381         .addPortSubInterface(
2382             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2383                 "role_2", "interface_2", null, null, null, null, consolidationData));
2384     TestUtils
2385         .addPortSubInterface(
2386             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2387                 "role_3", "interface_3", null, null, null, null, consolidationData));
2388
2389     testConsolidation(1, toscaServiceModel,
2390         consolidationData, Collections.singletonList(UnifiedCompositionMode.SingleSubstitution));
2391   }
2392
2393   @Test
2394   public void testConsolidationRuleFalseDifferentCountInResourceGroup() throws IOException {
2395     translationContext = new TranslationContext();
2396     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2397     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2398         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2399             null, null);
2400
2401     ConsolidationData consolidationData = new ConsolidationData();
2402     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2403
2404     TestUtils
2405         .addPortSubInterface(
2406             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2407                 "role_1", "interface_1", null, null, null, null, consolidationData));
2408     TestUtils
2409         .addPortSubInterface(
2410             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 3,
2411                 "role_1", "interface_2", null, null, null, null, consolidationData));
2412
2413     testConsolidation(1, toscaServiceModel,
2414         consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2415   }
2416
2417   @Test
2418   public void testConsolidationRuleFalseDifferentNodesConnectedInToResourceGroup()
2419       throws IOException {
2420     translationContext = new TranslationContext();
2421     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2422     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2423         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2424             null, null);
2425
2426     ConsolidationData consolidationData = new ConsolidationData();
2427     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2428
2429     TestUtils
2430         .addPortSubInterface(
2431             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2432                 "role_1", "interface_1", Collections.singletonList("node_1"), null, null, null,
2433                 consolidationData));
2434     TestUtils
2435         .addPortSubInterface(
2436             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2437                 "role_1", "interface_2", Collections.singletonList("node_2"), null, null, null,
2438                 consolidationData));
2439
2440     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2441   }
2442
2443   @Test
2444   public void testConsolidationRuleFalseDifferentNodesConnectedOutFromResourceGroup()
2445       throws IOException {
2446     translationContext = new TranslationContext();
2447     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2448     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2449         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2450             null, null);
2451
2452     ConsolidationData consolidationData = new ConsolidationData();
2453     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2454
2455     TestUtils
2456         .addPortSubInterface(
2457             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2458                 "role_1", "interface_1", null, Collections.singletonList("node_1"), null, null,
2459                 consolidationData));
2460     TestUtils
2461         .addPortSubInterface(
2462             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2463                 "role_1", "interface_2", null, Collections.singletonList("node_2"), null, null,
2464                 consolidationData));
2465
2466     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2467   }
2468
2469   @Test
2470   public void testConsolidationRuleFalseGetAttrInBetweenSubInterfacesOfSameType()
2471       throws IOException {
2472     translationContext = new TranslationContext();
2473     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2474     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2475         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2476             null, null);
2477
2478     ConsolidationData consolidationData = new ConsolidationData();
2479     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2480
2481     TestUtils
2482         .addPortSubInterface(
2483             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2484                 "role_1", "interface_1", null, null, Collections.singletonList("in_node_1"), null,
2485                 consolidationData));
2486     TestUtils
2487         .addPortSubInterface(
2488             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2489                 "role_1", "interface_2", null, null, Collections.singletonList("interface_1"), null,
2490                 consolidationData));
2491
2492     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2493   }
2494
2495   @Test
2496   public void testConsolidationRuleFalseGetAttrOutBetweenSubInterfacesOfSameType()
2497       throws IOException {
2498     translationContext = new TranslationContext();
2499     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2500     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2501         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2502             null, null);
2503
2504     ConsolidationData consolidationData = new ConsolidationData();
2505     TestUtils
2506         .initComputeNodeTypeInConsolidationData(mainST, computeNodeTypeName, consolidationData);
2507
2508     updateComputeConsolidationData("server_ps01", computeNodeTypeName, "cm01_port",
2509         "cm01_port_1", consolidationData);
2510     updateComputeConsolidationData("server_ps02", computeNodeTypeName, "cm01_port",
2511         "cm01_port_2", consolidationData);
2512
2513     GetAttrFuncData getAttrFuncData = new GetAttrFuncData("name", "c1_name");
2514     Pair<String, GetAttrFuncData> getAttrOutInvalid1 =
2515         new ImmutablePair<>("interface_1", getAttrFuncData);
2516     Pair<String, GetAttrFuncData> getAttrOutInvalid2 =
2517         new ImmutablePair<>("interface_2", getAttrFuncData);
2518
2519     TestUtils.initPortConsolidationData(mainST, consolidationData);
2520     TestUtils.updatePortConsolidationData(mainST, "cm01_port_1",
2521         null, null, null, null, null,
2522         consolidationData);
2523     TestUtils.updatePortConsolidationData(mainST, "cm01_port_2",
2524         null, null, null, null, null,
2525         consolidationData);
2526
2527     TestUtils
2528         .addPortSubInterface(
2529             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2530                 "role_1", "interface_1", null, null, null,
2531                 Collections.singletonList(getAttrOutInvalid1), consolidationData));
2532     TestUtils
2533         .addPortSubInterface(
2534             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2535                 "role_1", "interface_2", null, null, null,
2536                 Collections.singletonList(getAttrOutInvalid2), consolidationData));
2537
2538     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2539   }
2540
2541   @Test
2542   public void testConsolidationRuleFalseDifferentRoleInResourceGroup() throws IOException {
2543     translationContext = new TranslationContext();
2544     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2545     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2546         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2547             null, null);
2548
2549     ConsolidationData consolidationData = new ConsolidationData();
2550     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2551
2552     TestUtils
2553         .addPortSubInterface(
2554             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2555                 "role_1", "interface_1", null, null, null, null, consolidationData));
2556     TestUtils
2557         .addPortSubInterface(
2558             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2559                 "role_2", "interface_2", null, null, null, null, consolidationData));
2560
2561     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.CatalogInstance));
2562   }
2563
2564   @Test
2565   public void testConsolidationRuleTrueForSubInterfaces() throws IOException {
2566     translationContext = new TranslationContext();
2567     String computeNodeTypeName = "org.openecomp.resource.vfc.nodes.heat.ps_server";
2568     ToscaServiceModel toscaServiceModel = TestUtils.loadToscaServiceModel
2569         ("/mock/services/heattotosca/consolidation/translatedfiles/pre_condition/different_subinterface_types",
2570             null, null);
2571
2572     ConsolidationData consolidationData = new ConsolidationData();
2573     generateComputeAndPortConsolidationData(computeNodeTypeName, consolidationData);
2574
2575     TestUtils
2576         .addPortSubInterface(
2577             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_1", "nested1.yaml", 2,
2578                 "role_1", "interface_1", Collections.singletonList("node_1"),
2579                 Collections.singletonList("node_1"), null, null, consolidationData));
2580     TestUtils
2581         .addPortSubInterface(
2582             new SubInterfaceConsolidationDataTestInfo(mainST, "cm01_port_2", "nested1.yaml", 2,
2583                 "role_1", "interface_2", Collections.singletonList("node_1"),
2584                 Collections.singletonList("node_1"), null, null, consolidationData));
2585
2586     testConsolidation(1, toscaServiceModel, consolidationData, Collections.singletonList(UnifiedCompositionMode.ScalingInstances));
2587   }
2588
2589   private void testConsolidation(int times, ToscaServiceModel toscaServiceModel,
2590                                  ConsolidationData consolidationData,
2591                                  List<UnifiedCompositionMode> expectedUnifiedModes) {
2592     Mockito.doNothing().when(unifiedCompositionServiceMock).createUnifiedComposition(
2593         any(),
2594         any(),
2595         any(),
2596         any(),
2597         any());
2598     translationContext.setConsolidationData(consolidationData);
2599     verifyMainServiceTemplateConsolidation(times, expectedUnifiedModes, toscaServiceModel);
2600   }
2601
2602   private void updateComputeConsolidationData(String computeNodeTemplateId,
2603                                               String computeNodeTypeName,
2604                                               String portType,
2605                                               String portNodeTemplateId,
2606                                               ConsolidationData consolidationData) {
2607     List<Pair<String, String>> portTypeToIdList = new ArrayList<>();
2608     portTypeToIdList.add(new ImmutablePair<>(portType, portNodeTemplateId));
2609
2610     TestUtils.updateComputeTemplateConsolidationData(
2611         mainST,
2612         computeNodeTypeName, computeNodeTemplateId,
2613         null, null, null, null, null, null,
2614         portTypeToIdList, consolidationData);
2615   }
2616
2617
2618   private void verifyMainServiceTemplateConsolidation(int times,
2619                                                       List<UnifiedCompositionMode> expectedUnifiedCompositionModes,
2620                                                       ToscaServiceModel toscaServiceModel) {
2621     consolidationService
2622         .serviceTemplateConsolidation(toscaServiceModel.getServiceTemplates().get(mainST),
2623             translationContext);
2624
2625     ServiceTemplate mainServiceTemplate = toscaServiceModel.getServiceTemplates().get(mainST);
2626     verify(unifiedCompositionServiceMock, times(times))
2627         .createUnifiedComposition(
2628             eq(mainServiceTemplate),
2629             any(),
2630             unifiedModelListArg.capture(),
2631             unifiedCompositionModeArg.capture(),
2632             eq(translationContext));
2633
2634     List<UnifiedCompositionMode> actualUnifiedCompositionModes =
2635         unifiedCompositionModeArg.getAllValues();
2636     Assert.assertEquals(expectedUnifiedCompositionModes, actualUnifiedCompositionModes);
2637   }
2638
2639   private void verifySubstitutionServiceTemplateConsolidation(int times,
2640                                                               ServiceTemplate mainST,
2641                                                               ServiceTemplate nestedST,
2642                                                               UnifiedCompositionMode expectedMode) {
2643     consolidationService.substitutionServiceTemplateConsolidation(null, mainST,
2644         nestedST, translationContext);
2645
2646     if (expectedMode.equals(UnifiedCompositionMode.NestedSingleCompute)) {
2647       verify(unifiedCompositionServiceMock, times(times)).
2648           createUnifiedComposition(
2649               eq(mainST),
2650               eq(nestedST),
2651               unifiedModelListArg.capture(),
2652               unifiedCompositionModeArg.capture(),
2653               eq(translationContext));
2654       Assert.assertEquals(expectedMode, unifiedCompositionModeArg.getValue());
2655
2656     }
2657   }
2658
2659   private void addMockServiceTemplateToContext(String serviceTemplateFileName,
2660                                                String templateName) {
2661     ServiceTemplate serviceTemplate = new ServiceTemplate();
2662     Map<String, String> metadata = new HashMap<>();
2663     metadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, templateName);
2664     serviceTemplate.setMetadata(metadata);
2665     translationContext.getTranslatedServiceTemplates()
2666         .put(serviceTemplateFileName, serviceTemplate);
2667   }
2668
2669 }