From fc5eb8622019f06498a05b8dadef7f0a7bb3ab4b Mon Sep 17 00:00:00 2001 From: Ester Rotstein Date: Thu, 20 Jul 2017 09:14:38 +0300 Subject: [PATCH] [SDC-142] support nested node templates Change-Id: I04b61547decd93b2a2e2941d77f077f515ac1daf Signed-off-by: Ester Rotstein --- .../sdc/tosca/parser/api/ISdcCsarHelper.java | 7 +++ .../sdc/tosca/parser/impl/SdcCsarHelperImpl.java | 36 ++++++++++++-- .../sdc/impl/ToscaParserNodeTemplateTest.java | 52 +++++++++++++++++++-- .../resources/csars/service-nested-vfc-csar.csar | Bin 47592 -> 47690 bytes 4 files changed, 87 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java b/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java index bb5bd25..06a66c6 100644 --- a/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java +++ b/src/main/java/org/openecomp/sdc/tosca/parser/api/ISdcCsarHelper.java @@ -387,4 +387,11 @@ public interface ISdcCsarHelper { * @return true if node template has topology template, false if not. */ public boolean hasTopology(NodeTemplate nodeTemplate); + + /** + * Get children node templates for node template. + * @param nodeTemplate - Node Template to get its children + * @return return list of children node templates for node template. + */ + public List getNodeTemplateChildren(NodeTemplate nodeTemplate); } diff --git a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java index c927817..9b40416 100644 --- a/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java +++ b/src/main/java/org/openecomp/sdc/tosca/parser/impl/SdcCsarHelperImpl.java @@ -22,9 +22,7 @@ package org.openecomp.sdc.tosca.parser.impl; import java.util.*; import java.util.Map.Entry; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -41,7 +39,6 @@ import org.openecomp.sdc.toscaparser.api.ToscaTemplate; import org.openecomp.sdc.toscaparser.api.elements.Metadata; import org.openecomp.sdc.toscaparser.api.elements.NodeType; import org.openecomp.sdc.toscaparser.api.functions.Function; -import org.openecomp.sdc.toscaparser.api.functions.GetInput; import org.openecomp.sdc.toscaparser.api.parameters.Input; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -625,13 +622,13 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { if (sdcType.equals(SdcTypes.VFC) && isVNF) { return nodeTemplates.stream() .filter(x -> (x.getMetaData() != null && - sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && (x.getType().endsWith("VnfConfiguration"))) + sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && isVNFType(x)) .collect(Collectors.toList()); } else { return nodeTemplates.stream() .filter(x -> (x.getMetaData() != null && - sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && !(x.getType().endsWith("VnfConfiguration"))) + sdcType.toString().equals(x.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_TYPE))) && !isVNFType(x)) .collect(Collectors.toList()); } } @@ -705,7 +702,36 @@ public class SdcCsarHelperImpl implements ISdcCsarHelper { return false; } + @Override + public List getNodeTemplateChildren(NodeTemplate nodeTemplate) { + if (nodeTemplate == null) { + log.error("getNodeTemplateChildren - nodeTemplate - is null"); + return new ArrayList<>(); + } + + SubstitutionMappings substitutionMappings = nodeTemplate.getSubMappingToscaTemplate(); + if (substitutionMappings != null) { + List nodeTemplates = substitutionMappings.getNodeTemplates(); + if (nodeTemplates != null && nodeTemplates.size() > 0) { + + return nodeTemplates.stream() + .filter(x -> !isVNFType(x)) + .collect(Collectors.toList()); + } + else { + log.debug("getNodeTemplateChildren - SubstitutionMappings' node Templates not exist"); + } + } else + log.debug("getNodeTemplateChildren - SubstitutionMappings not exist"); + + return new ArrayList<>(); + } + /************************************* helper functions ***********************************/ + private boolean isVNFType(NodeTemplate nt) { + return nt.getType().endsWith("VnfConfiguration"); + } + private Map filterProperties(Object property, String path, FilterType filterType, String pattern, Map filterMap) { if (property instanceof Map) { diff --git a/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java b/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java index 9818a89..4ab9af3 100644 --- a/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java +++ b/src/test/java/org/openecomp/sdc/impl/ToscaParserNodeTemplateTest.java @@ -7,6 +7,7 @@ import static org.testng.Assert.assertTrue; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; @@ -555,8 +556,9 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { public void testNestedVfcByExistCvfc() { List vfcList = nestedVfcCsarHlper.getVfcListByVf("71389f8b-8671-4a43-a991-59fb621d3615"); assertNotNull(vfcList); - assertEquals(1, vfcList.size()); - assertEquals("VF_VNF", vfcList.get(0).getName()); + assertEquals(vfcList.size(), 2); + assertEquals("VFC1 DUMMY", vfcList.get(0).getName()); + assertEquals("VF_VNF", vfcList.get(1).getName()); } @Test @@ -585,7 +587,7 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { @Test public void testHasTopologyByCVFC() { List vfcList = nestedVfcCsarHlper.getVfcListByVf("71389f8b-8671-4a43-a991-59fb621d3615"); - boolean hasTopology = nestedVfcCsarHlper.hasTopology(vfcList.get(0)); + boolean hasTopology = nestedVfcCsarHlper.hasTopology(vfcList.get(1)); assertEquals(true, hasTopology); } @@ -603,4 +605,48 @@ public class ToscaParserNodeTemplateTest extends SdcToscaParserBasicTest { } //endregion + //region getNodeTemplateChildren + @Test + public void testGetNodeTemplatesListOfNodeTemplateByVF() { + List vfList = fdntCsarHelper.getServiceVfList(); + List children = fdntCsarHelper.getNodeTemplateChildren(vfList.get(0)); + assertNotNull(children); + assertEquals(3, children.size()); + + children.sort(Comparator.comparing(NodeTemplate::getName)); + + assertEquals("DNT_FW_RSG_SI_1", children.get(1).getName()); + assertEquals("VFC", children.get(1).getMetaData().getValue("type")); + assertEquals("DNT_PORT", children.get(2).getName()); + assertEquals("CP", children.get(2).getMetaData().getValue("type")); + } + + @Test + public void testGetNodeTemplatesListOfNodeTemplateByVFC() { + List vfList = nestedVfcCsarHlper.getServiceVfList(); + List vfChildren = nestedVfcCsarHlper.getNodeTemplateChildren(vfList.get(0)); + assertNotNull(vfChildren); + assertEquals(vfChildren.size(), 2); + vfChildren.sort(Comparator.comparing(NodeTemplate::getName)); + assertEquals("VFC1 DUMMY", vfChildren.get(0).getName()); + assertEquals("VF_VNF", vfChildren.get(1).getName()); + assertEquals("CVFC", vfChildren.get(1).getMetaData().getValue("type")); + + + List vfcChildren = nestedVfcCsarHlper.getNodeTemplateChildren(vfChildren.get(1)); + assertNotNull(vfcChildren); + assertEquals(vfcChildren.size(), 3); + vfcChildren.sort(Comparator.comparing(NodeTemplate::getName)); + assertEquals("Test NIC 02_wan_port", vfcChildren.get(0).getName()); + assertEquals("Test NIC_wan_port", vfcChildren.get(1).getName()); + assertEquals("VF", vfcChildren.get(2).getName()); + } + + @Test + public void testGetNodeTemplatesListOfNodeTemplateByNull() { + List children = fdntCsarHelper.getNodeTemplateChildren(null); + assertNotNull(children); + assertEquals(0, children.size()); + } + //endregion } diff --git a/src/test/resources/csars/service-nested-vfc-csar.csar b/src/test/resources/csars/service-nested-vfc-csar.csar index b141fe2f370f4a2bc226966813f16dbeca49dde1..027552031c8e9ac24c41884650fe4dddddd2e33e 100644 GIT binary patch delta 2560 zcmZXWc{J1w`^IO!PYlB_;~C4?88WtP6G|AnkbNg_(`0=t5hBYpWl2)>l_ihtRA@3| zi$u0;gGeZ38%uWbP@&h;@Auz(-{(Hp`CRAR=UnIh>t5OcdcFZ5m#82;lNt-qJ1T|% zI`NtRA8BxZkWqo8uV#fI=}dLlWx5_W^922ud;uE|1i}U>^xQK0o51b24}(A!~PzV+nEGhJ5Yp-A@Dcl=uS9mfdtxQpRYL4EE& za;atB0a|tQEXL3R1+ya6SzpxOz8)=!Ca&7{hUfW)r?t#xTi|_B?20Ho=^LR|!-e1O zZL^gy6SvHu%p+xfAr(EV-{c4g3qPk>5I`dHaC= zPtV7AcboXbvEFp%Q``pQ9!zc{G=(7_nRwh+(j&e6c@os&{lm zK8(7Af0Efz6xEQ?ii{qdCfabG*pA=QP9j=6^YAGHU75R@6*vPT`u1O)sYfy9EbtD~ z8=H3Nh^itAUvy98Y5i`E$*Y}nY!Ax(zno4DJZ$)uB3dHNz_f;n50R!gIK?H>TM*h2 zJz6QssI8%Qo?+t7%BDc`RK|R*O1+t7TDf=<19u^U+8ewdAH}WCo zqM=}rR4qk6o{-OFs{X(bCWGuH$_=UhmFiTTo8llFI5{=|dv?9M{BSjkobm`kRvw$> zV+}R7arf@tn}%8WrsfB=IF>N8EVH%@cVzQMzNYQ$pJXBY6gNxeDaqn9v$MnyX0%jq z{9?{sQxZ94_OQ9PuW}bZIS&Y?ZGhL8c~hs!f)ZvIlfsQ+)6D z80KWu4K5`rDAv5T>N8ksaF&Vk=4K$W8xmuDTw!XV6K(z9l7_plukF0?%-YKt4G^=F z z>pJ(;$i`INBezwb8@|ezf-kq!?#dH#ZbMy^QL@ENX#K~Pe{A#YvGeBL`qaiAY%<5<&2&m1z9azN z_9Tdj;7>4Hxq`3w4(Pm&J+yhn^8xiMsc@*Jbr89D?gh^e7&!Im$+v$*z}US#nM1@G z-6>HeucNuWjT+cS2Wn=<6$;5|X{NS^9?9%Cr%e|!U`4t0w$H7|u7|<294AJ2??fV( zma;Y{_pI=8#M#R}RB%wT{hdI3SKbvZE^R~Yh2?@e4hc8z+I8%$Fb-SIZ>VkMtrwn+ zq^d!z&agzeuNpIUV?|U|#BaQogeuNh8^-oUdp!_$O$bRIyKrgRysl$=i6WEc0#`#)#9uP7IsSM$2i z*+1m|vdsH+PB|6FYd~9C(6huaeD4-mR6EA^@(9Hi2P=^=f6hSfkcRg}2HH!RXSCk6 zcgehrnB5S^a1|`4^qTMy<{z!0bN^W1Epd#K5ze7;%Eg5`UQ>2n-rxQBpB5Pnfs}rQ zn|KvNk_FcP(_5!>*4fr})0HTp+fJUHL`$r}zM7)e`6gM*Nve>hF~}hu&yCPG8df%R zznq?wXP+b%)P$v>Lts_A0?c+K)oVr}UgTw59064e%Kb zotW&AeV^?ZbIlKuD<1;J3}qJzCCp$G=m^EO*Bnlxg9d1zT;)sWm|w|)%u{%%>-9VW z!!3;7c$U%;Z-7eRZI^Z}7QA(;-C*p1V!#(4)kTiSeF#}9OMWPF*^&wQ>it^b6UmEF z&*Q90QqKy{zM|8w?(kydp>+7XtcQ{sV%>FKzH<>$@#J7o%`!SCp4WH5Dc#NxePP1D z#QyElsRPM5FO8ka>5;R4Zuwu7huYrr@J)XsR_@}Iws4u{r92O#ne+Ytf0;nrDO^PG zg?bh;?t@RfvunEDYBF|i;#p*hfO?}N@tK?H3yhPZ4$RpT+XIh$$5@P;Q#a6QC_?c2 zaV?fW-+{Y6tEn6pZT!Dufj#GywW`}5)-kgkBMNI0{Drd*jok;_c{hmi(VO)Q~&9ef8uhp;UZ%00Gz71UIK#Ncc?9Q3@~GS`VyS zbFd*+e)d^lnA5HB6!{+KO2?GxuZW#eAN!LH&MrHi>)V{##u8s^bL+gNG~)M4*^ApJ zvVEAE#aS@7jl_?bbnHTDK!s{rYxwp_D%GPFzh5~DC+)ZD5D(kcTNo=fRk{~_$rj%G z6oT7=4Y-N< zTB!$Bcaps3RkW8h%j|4PYKB^y(~+W^EcAbPRoUn#(SuNWHC_dvAF!TgOM@fn4$w@N zV@*q_1C3tc00;!URIdW&zrurW>Ty5@@Eehpav;854zOl9Mjud&CJOYifx0w)kXk1S zXtIL?bw+?17r2}&3Od&zK~$|EP>BH*YYBia0Sv0u2R<5sNRlu(P%8&`od@&1_`wo7 z5|peH1Y$x!ojOB6HVllbQv%)SffI$n^*or($pW#x+c&0t8i9FUv_ zzNbro&DA;}s#*{rW&S^kgMrm(u;w_`qr78_09G9*@+|lrkbxHgmuYf9MiF?#st&GI zbAq|Ym-$?Nj5v@15 delta 2449 zcmYM0c{tPy7stm>mYBu}Q$xmz5 z{8+2=$i#0DrZO5K@vUFqloI>CnUjVIUt>t^9S*-JO%Qog+5Q68WbE^P;riQG-_l+= zNl5Hkh`Bsg9JqubAgIVwnib~aGmj|=h#YQn#d@{+HcQzua=GKJ8iX=j9HW_U*5rFpeTnYjLlSCf_rr6hfeIqtjSQm!QQ zgUc1cxO5Yi*NUz{Pb9Ll$_ZBipi*d7&z7oz)|9|NcwI?p#Iz?^fl;W^_PTJdU!0ai z8}}>3SW*9t)bn1Y%1eH{sI1ONHtEliK*vJ2T5>7Z#tx-qlWc65(c%w<(J2HFN$yLo4)S7FOsowN zh0DUTV*0)0emFFjF8Q^w!Az(9*+p z%aaDQDE{P8qL0g*^wkN>J5{#x3_<~nu*F2dK(D~BR zBt^>Y#MT<1-Lll-MFLS3o0hlzTFgCnYaj(iMf|CERzxeCsv+i(5kEf!8qu@$D?%Dk~UAJ?Hfvk{-uKk1j2ad3-T zROQ3Kmq_0=TM5q5#(?$?14$ky;-SSS`Zw`MCxl5zsWCJ2Z1{n(S0UlNP*X}13u`yI zdoqR|Y$Ygpgi6BaBA)l^KaO%X@%wVqoX^*GWwgbIO}J4|l4tV_^siVNJHCs{QXtK? z7M0w_eCV0|OdY-%B4&Yq>{9jQVsFwTuH*$3-Aoh}YY;oVY!l#8z`ABbBLm6mKVTU% z@Vu!y@>>DRf_aXw{O1Af1`50YbAHa~+|6)a^}D3G!J-1F*5^Hdh+t^74$9(Q!-E<`919TrR^|60nBbwtyKMPZ8htXL^#Hq;&MGlo#I zHfpU2(X`IW=OG=kb1A}&`@eqVvm~a5B2JGPh}TN%#VVhcboS$mhbn6AH_7ZHxnhoj zA6{Q(q_A8cWbS%Eo9frFJ=UgsUA@bd0V!7=`%d_s?2NOJ2v=3smVPGV9=Pf@D&?~o zM4R5Sh^V@o`FO_3q6sB$dyZS{V(zlNl}i6nG&<|5k|u@b36s9 z=%^q@aJu~3sTVO06-@RG*ZN*7*{>$0?n~_mLI1#X*(du5HK=_IP9!=bm7Cui zyvMO6S50?I_T02e>-DIS=-X(#k+x;CX|d5n2}0x^;c%jL?&vK?@$A83grS*cdTq2z zo)7T=xy(J$2}>hGPRE&hxzZB^i_HJTw^XNLWq!I34?gW~dGC!fj6VHc!p>SmG{swB zrcwj~5mEu!@IPMx@DQk%y$*oOER8*o zo$$Qo5ppc&F3=UsGYAa1$K#K~-|-#G{V?;HYA z|7GQW@lIu@`M|IL1YBr_gO4~UU{3oVBnOH$LBZLbrFr_`jbi=3H*~O3z*7TomTd+k zUj$Vf%z?GbpkKprAi*1~Z@>e0(!sR`OTa1v#Bp>$1GX$Mlmptc2|ynMJhNl1kqrkU zSh9fCeK3}(3o?YX!6g -- 2.16.6