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