From 7597d47ec48c64fe93f1fa7a114895113fc4daef Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:02:34 +0200 Subject: [PATCH 1/6] prep readme --- .../v2.0.1/Dataprovider/README.md | 15 ++++- ....completeness.dataprovider.deprecated.json | 52 ++++++++++++++++++ ...pleteness.dataprovider.deprecated.plantuml | 34 ++++++++++++ ...m.completeness.dataprovider.deprecated.png | Bin 0 -> 17985 bytes ...diagram.completeness.dataprovider.plantuml | 35 +++++++----- ...mwdi+diagram.completeness.dataprovider.png | Bin 107325 -> 114426 bytes 6 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+data.completeness.dataprovider.deprecated.json create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.plantuml create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.png diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/README.md b/testing/2_functional/completeness/v2.0.1/Dataprovider/README.md index a367413a..6d695ece 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/README.md +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/README.md @@ -4,7 +4,6 @@ The following list contains the services from the above diagram, for which completness tests are provided. The list gives some information about testing limitations (currently this applies only for the link-related services): -- /v1/provide-list-of-connected-devices - /v1/provide-list-of-device-interfaces - /v1/provide-list-of-actual-device-equipment - /v1/provide-list-of-links: @@ -19,6 +18,10 @@ The list gives some information about testing limitations (currently this applie - /v1/provide-list-of-link-ports - /v1/provide-data-of-all-link-ports - /v1/provide-device-status-metadata +- /v1/provide-cache-quality-statistics + - and optional filter for the link type can be provided in the requestBody upon call + - the completeness test will be executed without providing the optional filter +- /v1/provide-list-of-cached-devices --- @@ -30,4 +33,12 @@ Therefore the related services will not return any data, unless testers add test *Additional note*: *The examples for the complete service responses (for services under test) should have the same identation as the* schema *keyword*. *However, if the simulators are created from the OAS accordingly, the import in Mockoon will lead to empty examples, altough the examples are shown correctly in the Swagger editor.* -*Therefore, it was necessary to change the identation of response examples in the simulators to match the identation of the* properties *keyword.* \ No newline at end of file +*Therefore, it was necessary to change the identation of response examples in the simulators to match the identation of the* properties *keyword.* + + +### Deprecated services + +The below diagram shows the deprecated services, for which the related testcase collection can be found in the subfolder *_deprecated-services tests*. + +![OverviewDeprecated](./_deprecated-services%20tests/mwdi+diagram.completeness.dataprovider.deprecated.png) + diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+data.completeness.dataprovider.deprecated.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+data.completeness.dataprovider.deprecated.json new file mode 100644 index 00000000..c6496be3 --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+data.completeness.dataprovider.deprecated.json @@ -0,0 +1,52 @@ +[ + { + "mode": "debug", + "serverList": [ + { + "serverName": "dummy", + "dummyUri": "ping.openBackhaul.com" + }, + { + "serverName": "mwdi", + "server": "http://IP_ADRESS:PORT", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "YOUR_BASIC_AUTH_CODE", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + }, + { + "serverName": "mwdi in mwdi+simulator.completeness.dataprovider.deprecated", + "server": "http://localhost:3002", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + } + ], + "collectionInputList": [ + { + "collectionName": "completeness.dataprovider.deprecated", + "serverToBeApplied": "mwdi", + "mountName": "513250004", + "linkId": "101550001", + "kindOfReference": "dynamic" + }, + { + "collectionName": "completeness.dataprovider.deprecated_simulator", + "serverToBeApplied": "mwdi in mwdi+simulator.completeness.dataprovider.deprecated", + "mountName": "305250001", + "linkId": "101550001", + "kindOfReference": "static", + "suffixUrlEncodingIsRequired": true + } + ] + } +] diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.plantuml b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.plantuml new file mode 100644 index 00000000..8ae4bf18 --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.plantuml @@ -0,0 +1,34 @@ +@startuml mwdi+diagram.completeness.dataprovider.deprecated +skinparam responseMessageBelowArrow true + +title +mwdi+testcase.completeness.dataprovider.deprecated +end title + +participant "Postman" as Postman +participant "Data" as Data +participant "Collection" as Collection + +participant "/v1/provide-list-of-connected-devices" as PLOCD + + + +group Preparation + Data --\\o Postman : {servers, mount-name, linkd-id} + activate Postman + Postman --\\o Collection : {servers, mount-name, link-id} +end + +group /v1/provide-list-of-connected-devices + Collection --\\o Postman : {servers} + Postman -> PLOCD + Postman <-- PLOCD : {mount-name-list} + note right Postman #Orange + schema validation + end note + Postman --\\o Collection : {mount-name-list} +end + +deactivate Postman + +@enduml diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.png b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+diagram.completeness.dataprovider.deprecated.png new file mode 100644 index 0000000000000000000000000000000000000000..a68368f728c0e0715b307ffbcf2b1274283f173f GIT binary patch literal 17985 zcmc({XH-+|);0=u1w=tbx-^k4AksTX00HSB1f=&M5PGvv1e9K+ix7H|A|*7H-X&nD z0g)QIKeD2W~&Llh`~VCsa$S>Sc5zXC6+6! zozk!_C8iANwTl{&xhW2@a)Ob1!rkXH%#WoLl>*$JFL2n2S!O_Qc!Z3?8bz$Cq>3N4 zLZTj_*{^wZ2Da@eeu(=1QvV5KT!GTSjoBL3ajF!d-^Y~E z9#;DzoX~H3-O{Rc(yHs{YXt5-$ebagj>}x5;VjPKzt!+<1o;ZlbX!^ZauMOr!)^3x zs?3!LI_T@(bQv2v+3`1IYSJ8=cWR>52=Bf^+%`0~O*x(^rhjg#XlRP%hP z)s{d1$=3Kl0`y8-W?zcC)ph5JANh}ROHD*_LP==v&=;rPKOe;SqEAroigkdFbGn7k z)$7~o_b1+b-cFSH>ReNaC2^KQ$fe^QNdLzFME@xKB$u zFm*0_Q=r*79oN7^p>k#d&8-kA-IG@|4dgGpx|RB0qK2HFTH-MwrOFtfP6iMSJ` zVs>WL{Yts;!C5jIE#eLA15*M5*>*)aX)TY@l~j`FH?@;KZ93d-a+LCGdEdhbiA?{H z+a!0Z|Lbydd%JNcCA(j^DCJ$*3-_~bn?Jcec>BpAWxLc};?~-hUWG?l7zt&p>>Jb9X~LLM@=dQS$Ha8Hsai-`B* zxr17V#%<*2kEKl?QT5NeY_>T@=nbFU72iq&6@P+T03K6$%++b#A z&dSPK#?%WrzqzhKJaQ6FD+-@uQV4&X^gt24v(PUKE2gHR8sC0mWRw;gJ6L2;H9kI$M(cdu znCXZqi?iqOuAT~_p1F$oWZF(A z#QCP$bZkYjn%cd!YYj{Kmti=|Ts00D@AUBF?Exn{l|HY6l9Gg~yQ(SH)|t>+H^tsW zeyc@?^73+vcZF3$jbkAmIv!Grhg#wD5=ZIP43$U564HT*dvyd@HwLWj3}b0FOOq_A zc-Gb(>`1wl^3!8mLdo5qucM0#3*VMsFN53J*`3u{Jl4VxTHk&A{%7???4u$(onphh zhY4xlkVYc+w6X{+NXISNXRhThbv3akcSJ=^wb$ zKYZ(cZuA0P8xNoD-E#ClNLJF-(#lmY+!BhOTB(|h-x|!*)D~nGY;;aw$6^O^3cRfp zBj_cKP<%Qu6^E{|uoNOU616ljeIq5udsuPrZR;K))b9@EgLbxOq*yF=LjzW7agHs- zq$%k9j4mt3yy-+y2D8riRo136o{0$wtY+u;IBZ5T`fP_hZ*d#mv)Qw|nSt{m3EVO+ zWzVT7yP^Ha8{K(1LwFo*z}x)RfWHRUA3j2i)6vt*ZFQJ?7)`C@Tg&Fp;(KzmGp1}R zbiMCNReZD6tjFrWd{g)YL3oPzP!R2Zf7NT641;P6q}nu8VC_NfA(x#1#P@>mO}AVxW! zQ=Ou*ce>I*R}R@K38bzE4n%UBVZXp{fvf{J|YyypjVY51F1M9{G09@YLx9`mYw zPixj%l(_6$!H}FWQRsd)=pmV~jU&{1<#Tj=Eu*(0G3zh=DcBB+!-&-r*466tXFT*L zCYCU`6cP$S&Q(wm=B8-{Rc^Sij@N9sA0O_ayOz5X`7dCR@02jHHuA;VxOifPEb;`x z#9bq_S|VS|r;CWv7xRjXOir#uC4x?4VC&tmqoh_V-?d3styNr}imM1hhMqu9ZZ7R6 z`nUH?RZbWQhx1OOA8)hf1=*+J=0+a9iZw*%W}IXx#?UOaJ!d@T82A6r-6fts523*N z#pv|a?{BXZNa)3>p%7ck&lHdg5)p&+==Vrl7Ws)ZJ>?O-l&@{#$& zy-l3#*Vfk7n$E5`(a=f zg!8i=LO=Ww2t)_Wf)(xUe}alT)1G$mDvh4H`jp%BFP(pFcBRC#Di9>mj|p?8<9qz; z6UQJKa|gL!6UY3?{Wugy3PqRkqB*3QIXwHyx8$>%nH45 zfsS~C+X~W}n?c~qH!_k0so|`H#RC7r++BYXl63d&S;>>lMmnGM44%eAvS3&4;~js4 zu&{J7k97|P`CfF<=aRY&r3VR-RL@MX!^(G3P|!+y`EIT8C??h){sn=m&5r&CsHyrr zrU%|SBK3n2nzmW(jI2ebI!m_f|?^Bw;*?zk(b}HyV_bu{nGqw zd5|m-=J|P_SS8&YkQ|^o+utf|M%1+xAXOZYp?!_F96SDL6C?~XGCIBene;gb=*~>c z(#dv}rDu(q0@T^Lb3iTOkrpzlI(w866HITEn%>wRIn^8zFS`2PlBaS$XoYQhTlY<0 za(g&bMyTYCl3=R>GRT0gM$2n^nN9qsilBG=~Hm;-0#U+aob349x zqxjqlhNov_dbvJ+L!`)u#Vg%57<%I_-!#Y3qK*usm`r~^tiab*tzU8@!OE&Hst2(y zAmHy@mn{}CJ3nd@24_`Gsq=K{xv9(C@f`is8GBLdX{V;KfAd6A*%U{~VJ&;scpjwh z&g{uZpI_b%(^8eg!6tYb@VE;pnd4j4w7T@Ft;9Ryn?zV!?nWPoV#nP+k)1l(jpc>q zuzH*B%{aXatS!Fadz#GE=!TVr3ki-`BCHt7uT$-=Eo546RjP(Z9+-kv#DP zse02KeF&*4P#i*{u5pQ!8>BsFn_nzY2vr@QaIMu?KB}(cILb7S;gH$SwCK{Y%}a>a zf&8kO&&RQr5)Q@AmmV65G7P=gdh1Ne6;iu)T!T9{YYEjx9p!D!^^}YnXgcOjQ1M%) z+|anfV=z0{JFwL9wQS?d%boGw{*~(e=Vg{yRIqu>>x+`R6FVsJrEyJU8ZGpb$xjb{ zE61H@$-@r5?fBa_Ai2mXEf8Q;E)tI}3J6!ZwL;IMY}Ta`>Xn$}^=|*Z3I^7Gl&7Q| zk!}0cK{C2>BJ~JYLZA3r4fc4MI_dRItQ#$s>SK#Tu!vf9tXcI5zaiVUpJ6PMZsNp~ z9U@e+-Vk+`oltzb9qSC0USop~x-cE`3pX?w-ygzWbf}`LT1q$MXI-D+rA(?5PJ1A? zJ+0@_<^mTjmPmOUjnn!3*<0-Ye(m+-dFN^v;tsA-ZisFhA}6DgFS)io)!U_Zxo84$ z9NV_42~6ZQtCV{`mdTS920u~=GXsw$$9rcrsB3sd$%#fxzeK1$BXf|pgtpI29)e_4 z#iaV49FSY2Fob-z6YRX*HJ*efndP!G#_D)fxxmGWKf{WqF9P$5Ew)miu)n=qmq=6@ zfTXqZ3h@ctQjNI+Cn4Yv*Cu4 z-Z6ImyX)7ZtLKvX7nv-YGK#1#)Xip-pRUZRM+jYW#FlNQLM0+{KzA7M(lh3J(x2z< zA}c=j#Y((-6G|Dz4s0}UAPg4HUV2jLY{Xh z7lt=t1z5_Do@yh%gR#lU=S@33x}o*C(V7VZNJG~j&(rC7yy-Z|P?$1=ju-Dz5=Y5n zqf%3CXXnrwfwK=|tFi{3V4H%~lnR97(cd?RBMPeOkN4NGMMmC56Xm@}Y69*{3qEe| zgH&k7#E0*?8PGd_s&QD*X_6?Xr26(9xTrZy(=NvKE|%N)c({qQM5k{vEHrJC$Zg6OQ`Zny(&6ym2d+d7@rC;vHIP^-+ z@9C&3>b!>$Tlh=gwR&aq0M?e?_G+jKT3gd6M>RFW&n>gkEn+W;j~?7y+*3^L&XX@{ zfsn5>{*X4Wg%`luYXqqtENl>-y)Zk=6=^_Og%U{vcUCkevHm6V=ztXRcv;i%u)-?U zTWP2~b92OmYM-~wjkGd^M1}t8CraDyqM)_kOB3 zm6M9krm7O6{$z4&*(Z?ViGUYW9*`dX>%%{9{4j-G zji&|%%1VAi3{jiA(`tnVRjOC6eLjUdAE)qeXY3_7Nye=^$ZDe(1aAmMUcx;GugFmh z5nUsIB-}pZb+7l*B|I|$p}1rtg>1fd4VrQt{7KNu#E9S;)R0H&zv&D-!y%QBz`c3q z#lkNy!ZQTeO7iX(7e9tAoxenorA$mHe#7eAIsC7(hyotmftp@=!;Qa27Ipo79)dUA z#T0i4OpTGiX?nW5yL)<4NuzSAt9L11=w)SOyez);#Q!dw=8^yY{Toy3-niK-I_ZCMWF3>j&VV`( zg3o1}H|MeWTL3&V;>&7<*TZfrqXIT4=2JT%LtRToIly4?6>r@sF^o{Jd-!{;D1iSk zproXnZhaS%K<~FZRj6M+gGm$jo|~UnwzR9HF!m``OP3Iw@R%+&Ya85mpY+uY%8!<0 zU@%!8E;XovxsDf^JzUbguyQ7T0I)JuH!?qbxbsua*48#UI{E@B-QnS8pMok<@(8Oo ztLIpcyEQd@d_U?6mW<#U5z4{F#`EXPi_AyU^e4mnXl0)Ith9~ZR8d`{__#RnopG1w z>a~W0!jX-Q4Nz^cI1NGF^KjrL^}Qb1THR)NAw8e@n`v0j$THTVD_(IwFDLD36)crG zs~asQFE8&{_dAGLuKqe-aX#WAy-%cG!0=h@nTlZe4>@*9iBKoC6d@B|Z%qdYlR}=Y^~?Bh+e?QL{K;%Ww`ax;80KasGA+SFe;&H($5_EU%N4u;jHqc9ERhK4%YtT3m{i+42`pl1k>0dUFvh0MCT zI`H^AhvA*EY{8`Tm6jY_Tq_gx2Y?L&MAO;N$AJ_^k?JMY{F0KB&*ZA?`y@~5XsmxV zhitQ`l)!mmT3>a8BDo0(QuUCfM}bc*Rr_U~9zhZS`#2{2Z0?5m z4b*uVDy$bokd@WSTQvH4$O>=p{(0io>a8bu=gzW=<_;iwOC9*vVz^LT+}!a*mS10; zFOf~2(xuBFdIcwZ70FFO{Kt9mgeGwI@4*CcBP<_q-C|WQaJ|T&URJ2(m$Usp6#Fh= z$x!(H<3_P$5n>++1y#Z@Ns*D?Eewzd1PhXphnxG3N$)MK3!6%pUneC|0mlO66y{Rv z6K7{1dVXq~Fp0kHNv^iF$*exw1XrG1@_Mb8~Os z66^C@bly19FV$v7liGK6b_QLg%@-V!l*f9Ezv!0n^*!4CJ#F#sZ3G7ghj0A%QW>$E z*7quLn4B~(+u6=IBzqQ_7j98oTifE8d4$V~qVcRO2(yA^DU$w1q%dwnulyXtGP@ye z76^l+q;UXyNKdjL#f=*a6E#TW{_;q9U|`_KbNZS_M#U2X^X{Ud(lWp#>>V6#CL(fj zC@3hD6I;ahh2cguOc%foKu0Wh+RhE-H0F{tw(PwJdxS_+I>@seJ|f{zrc5CW@Sz+rkc<)d^MT z>gtM#jviDN_kp`)yp1Eea>e{`k-u?TT_(PmMzzDpEjKV@QrvwtMGd`9cLE;23913yZucZt^_5$3k`t0xT~0 zeBp;u3g<<}g*0ySw5S+bWXYaMX6Tw|_5Bi0ifZS!*+Jx4ho`JuJ1+K_dRG z(`>l(qhb&>j}c3H3=}?M?AuHj!AT#@pd9w1Y{i_ctoBR8buLvYBJY4xgPj;+2+AT) z7qHWDcHW3ohRpjdd}ru$koN}EZ{zl;T}y3vC-&Nw(C4sgf%EuafsX@JvZmux36YE) z!?30x61;RlNH6sKi&IRW#DP6Xw%~f3AfmGT-kVSFQc~=C#!JP1lo3p~s3CpJVSa3I zFpIvF37Vx0RG6b%AiM*TF6s8reu#yv>}wC*llR77zCRQY&^}(BY@FQJv9Pe%B6iC- z8+AW7KOfb9)6A+(E}#17ulTtSE-%NCw%#O=w#N*J-p|`g)BXr2FjR zVpW80iIF&Lyqf;-=SAD2KxO(*k#|=TFW_?;&$+|*>R%wbjdrxy{Jjpm7!(Oh&f>_m zLbgTF53M1^2hIc71d<;!bZObbQ@6ExZlsGq!i4cAiUo*EB8NH+9=ffy=rydVp|z-w z1qi_4B+wIS6*IF;zi=Wc(m*&NmJxGFX=oDwFg%U{IGti4Ba-_X3IJRgil7j!Q_~28 z6Pgm@FGUD~JRTSQiQ|7RPdIw+ujPWDi2ltxc&_Vjl6h1G2a)$Q(vOwlBfTldKasv( z<7r)Xb`af_Q(|m|3o|n_lbxN-Jr@7^B5AlPHi#v8OeaSz9oFUVAqQYINMF<+;j&8& zW;t9S%#SIYhItuo=D!ONl*76$p;dB#7DG-(_G@|?Xi~txGZp0Z_4Uh)S|3HDF+2OX zrC<{3ht4w)+)0>fs)>^QFE+m;$fI$BK#y$H|7HeOy6a-blT76>*QnCXj3LiFEtZsa9lIgZf0DN1vByRPP0%ys!?D95saEjwQnT_|S9djRMkjHX5i>Y|>Zu_VyUH z6zwPKYCe3BavuSnZ`GH^#mRYtr9Ek5!x>jB+&HFAO!l<;xrv=!K|80oczt!XUMJ^j ze_zJt#s)h(du-QyZ>nAVDhi=|_My8=gxQ>W<|A+(X!X_|L(Zl0fbg4Sv2aW%SDA60 zN2#ZzGdx6b#PBNZeND2gVGy5oZk$M zb^=#6kk7)IXG*O5_)pif|0|3K{?zf~5yQ0dXDht$li9kQ47ioPWlIH@%d{NK_plnXbh^_ofJ&iAUj8I46F50Wd~~TKQ2h6vd>l)fFFq3#aa2YWfRgeAk_# zkcbGVtN=QK6?RH2*_#T&k!CJb#-EFY>M@RO$ve(oqG6P zZ!MA76s2P^$97J|E?WeTGVWts=6m;Ii_@o7-`_U@`FgCHBH}^4S0v{&bg8(ktW1Uu%XbR6U%;EzAL~9+U1a+8LLu5VU(40i)yoTsIS0bW zhKB06m0w$C04KCG+)IYjd!P^gBZW!0_S-j^@_Oc+hjH9-Am;DQ?cB^T(jaakX$bWX31~)w($B*HXftutwdWO zeiSMyD~oz<JfXMMl{vDu&>1y!||VMCcJ@r$=xymbbt}(smWDq!daV)+FF9-0GDJR15F5 zdR@$I27I|JScY=dQVsslmIn<87oWTxzp88OJIkLleirD*9Kyn$?JP4BK!uUT2M*M` z4{%nsG|ty8*170lI!wzSoxZ_4Su$F9MW#K8upRixcD6s_zH*R|y|}n&?%Njb9my@l3DJGh$2G%agM!|# zx9(@8+_*|F;e%WJ@fMGQnV>J;WX?Y<_!G??e?JC(#|V8RVrqsCaosL6{KVI4vCYRo zf)B)l*ZC()uB~-?4DE|!t_uD^&}W*RNn3a{2u}rug$(2ZB?DCE6eGza10Ki~z^%I9 z|9*UcYVmFq#(W#A?i z9)Y@=lN0Yr^JRi_OMMX_>9x+%X93A5V2R!#F^j{@u)}xEq3Y(@7mlDdnE9sv>6vu! zp>jG1CL8|mkbLK)v`kJCP5|6I%B;>*1U}`y2W~abjr@;rS3OOehaS`lfp29T zbBUwQO92gr5TDpims{*V;W?i=IH={425|j|%O``tw_dR;{`Kic=W2@*=hOWqfEWqt za8P=cGSErl$en3}sy56XBMgi|!Zr)sC5^{k-Z?fC`DYc( zGG-&j(=t70Mq#MgX$wHXQ0#$HnY(tm4B))>Ads89j!6A?W%ZesKzZIv&Z>HDtJ0Rk zPT>%QO~a_l9or7mM0!V3&Ij+Z8_UW@2NnO$Dt zy2*e&-pY}T`&Exa8*B;TD;^Z^PAmVzX?kT-Ky;L?h_2N!Vb5N?3VDjICUM%**)IZx zG76=kIPN+GMdNttx1zU3H=IYxEH*a&p&{rzeiGtuOLH>Au+gu6s|Ae%0Xz<_uRr3_ zC(asjuv*)f18<>^juZ_642$f$X%aJ`HdE@2Fiq{e?X}4gci4oYx_T6Q$USu3#7ZnJ z>0(at_##^A32rS%npSzKTCgqtiYSVvY!gp!tX?2s*ChLB*NVQlv*7rp9c%QPDjUlzFA!Tsv;cTa@8$AAw9KX7VHDn za*$tdyG#1lhq>CWX%Jp8elv7Bo8MQ5?db91hvT8<19Ug4;?V_o0jT#1*44L&tfAJ7hK zHS=`13N>+}!KF3i5;wl9X?d)Q=jY`L&sewVcY;bEi;Gtm`ZJ@e_ZJIrtclxw_c5Uk ze%ZBtM_$_OxZ9{c)x#`|>d5a8XnyCh??tepa|S1A|9URV;%$gNd8C$%ZWIh8k)+L! z>L+~CYSGRWy7-lWVrmsr+qFCQnpEQXU^KBlXq*||Bx^jzmGoRBd0)?&>XATg ze6o-k0r)s`(9z%;6IC@msH5PmNa{DA>aJwdas`x!faHtcFC`j@I7;9i4_(Q=*O8u{ z&LdhC-}&DwJZs5w(con6f-7gy^aPCo`!?W*<{6>v83m9k*#^=p-(Si#b>|VhR~Tqv zIE~-K%u1H3gi?^uGgyQ9}d~fk`|!fzT@_LLjT-S)y^GTbv&CzSzk||Ms;r z6{LrqOauY?$nEi!CQt^+_)*-sXX=Q)ylH*Oh8>h2&^H>UYX>)d%mN~_$?$3W56cY7 zk(YF#{AbSKumA633~tXDZ(alWh=~ycI>zoYGs8WoA(Vjid?Syq4!Tf4vIG0Pxc*Sc zcOPzPdAIZu__moo(wSQwMJ(>Mb>|i#K_rY*xe9QoB2WW^2x!n*z#cf;*?@=IxLNyu81EetkWfkOcZk>NO(bKt)?%Sio$HU&GY;R8v{d^Q_=sZ(o3) z^NONUC49ZUDE+qf^z_uwi1x}$p?abHkxz&F-o41*1$dBn9l+Y#SQOwA0o9Lr9|!xw zj{(I6;3?$&_Pc69?eZ^l3;lSCZu494==KsH=UgK9AF?0y&JFwU;ls{aCD-G<#e$O9 z#jT|M{e51u)^;kVjE!G`%IO!ZEG;{eKs5&H_fZzF#X&aDyvdF3HIG=LZlmzK?;+>$ z^!!C^=nu=Dq_~t6u^BScTG`;Mo~ud~cwA^#Qm<2Ichvc$4X~8pL2W7Nz7;(r(_r>= z{|{1t^j}bLZ>}STRr%LupJYN@Gz_4T^@rBBwq+8NpcONV8j4EA(*U}@0R)NgMzvIlFdzbWr4|4Pa)|Gu_T7+S>A*XTa82$HG97O>B$XVmT@%Ho^TV{s96a zQAOfOV}X6qhl`1;Ndk5NFlqtn?+4%}4!)B5eLx#mKk$!ufGtk6q*DQKLJGOUi_+eV zA$%2BLQIHfMfMU`0hz<&0qTD#5vx>C_)uYHxVdccM@hk4Llo3;fI?&k&ddE> zwtxN%A>L=8^45)z^FJ?u7qEkvH;3fj0965B1AV5z74h$h2)-k%?d=Qm^Y_FwE|Ywz`!7n^7OX8DXOTvLlx1DYOvx<3xWW8oH(Ev%!4XVKgvadIt8!+>yl_Z zPE{rT-pVW3FrJ3*HckdFUYh&ljWhWdF~YTyd|h6{R}wLgZMdiKZ2B+2?T5RX z@^t?pVzSt`CYD>?3%g{~JwA(%Ci2L?baWjPDD8k0u)&=GhA>bL0}%K9E$lIZBhx^DCN`=#KGJUo z=mZjorHA_!*{qM>e{!Df1Z;Mym?x?cj@un0sruGV83)>aSy+S{lH=l9@J;R5N=4+h z6><&^`fa@q*)E^}ogsF2MBBt9VTNK>Ep-6;H+=ujDK53K=jYe#i~-KEwV*DED*8i(48FEUEZgze z>L%BB%dz7v@X;ZM?9U6vl=wUdu5|&c3VNVhOU}J~nVo(2s4(F#4uLJ8iV6$OKP~N< zNNH=|{3~5!DwXik*PlW?`0JlD;zKFEJ|+NXKW*~IH~r%)`Gnwq3gPdn>v0VDt207B z{LR34?)8sPocSkYgUHA8$8G=$`X^E&3*lB4Z;dqXhp^Oj#ro5E&vjFB-v)m@C~_Y< ztk?;pnAZDNE9R#A>zg;MsrK~Bk9?w@9xd+qUt4=9DA=~m^3Oss;R(fu4!%<-&4(Td ze-aD@_E8|*LVX%@dmCKz6o9?Eg>9{KkK)E7uPE3JMZwB?fX`0Xlc|gxtt}NS3H|5B z)LAjyd?mo7u#bQYr!}IQ&{q0v4pkW&xKcN6D=;^&O$fqJ@jcA73EFX1`xZS3QFV5- zljqjS_Q@2f|M2K&=j=Ifo!Vmf*oxu%JVNlkQQtP9nWed{aDYWV}fV#mI)M7t}~ZaiVi zt0zT8i}c~tl3Ty1D4lfXF5XhSI{InV^w;3puSdjAJ&q?HH8l@lo$srSFu(Hsa6L)~ zl~f0Flx940v8fAv>49bGZ6vf?MH}uaczzF`7#!k?tL5^nha7(eksNzj__fMwDw(#G zOh1C|z4MEopmc9o{OE1Yk*Ya(FQjL4`U>pi?)(KE+cpBJ=I4T*o)Rj2O%^iP%qoJC} zzwpl?ZgudtlQ20Cl`c)5?$yV2xs(SAWg-!`;%2l$%5OT!av#iLc+vzMERM5uwZ!MM z!!GY}9B-ybBFOpTwcEtYJErwOb>vhdVz+1aqrB!2l5h&Yi;c0BvA#!%wx&DPuUm{u z-kw|}6@9vb=r<6atH_@HAYaZSq8*gs7GpCX(jT`@vpGhNj>_HBgUy>B5q$CC{(BnO zchrwGj=nJE#hsq_p!!~+zj_e08ZhO=Q9fPC6)swX9x)#w=k}B1%zQ5E=PeU7x>!^8 z*1f0AS(IYdBafu!yfkpANT3McSJrLyUt}78!TQ--*YNS6_2@7G7+z^US$-|v}9@kz!yVN$O zaT9HYgy{bD3Xqa;q;2mM8+JQBc|atk;(q^19Wpj#a-_YtvHL;DWxOTD=H#|J{GBnj zvs%-To2e_>J4MB9(Vb#wiB@E;igi$HF_w_RN*|D>Ojy|E-k9`RL%vo&yKO$;#Q>>; zj^9b3-rz$7h!6Ol;ZvZBZ!wB`{f{F7lI|ymtkfxO2KgI=K(x4()rC)}P#t8~T91*- z36yiChSRtqWT^El4038dZyQ_iE$$tf#7pIQ=x7_+yJOWTq zic~(G=oGG9s|N@WZ|eA%772qZyDy=O02j2P*?x)(RBclKg$t_5@Lw@NB&Vc|4-O7W z1k(H`BIt<26N+Q(&~!3ewJCX7$}?rSh5pwZcsTO^7Z?a!c=>1BK}MbLORox_%9{Bv z1^vSBM8AdPgalo6^$a-y_f^Akcmg++>QhZJl7>HmN+2K51m6%jy{7umsedh7;3x~#5CVdNU`9qhAT}y0!-|JPx8sZZK(>mdsHK&a0ju(7ND3qXx3sjAXBU#@|I`M7I0FM-nP9tISUUAu9X55EHqIUOgnMePol zRv=ZEl$7i|SY20c7pMg!B&aps(uqGk=kxOmVg7ZHBbAT7r3DK zzq=PPZm%fUrQlBW1fX0FVfX{gz}H^DUq)WQ_bc|}iTbfz55+iJQc6N9S7RRyQT&iS|Lt<)#iRCp zhp}TZ@HC(Z!uflG;;^2J}5A_DIEWO!aP+9sbTC)#m-gV4fw`zZmtAyviL@e8XFkdrj%&-pEX7~d^XUjjK@)MG&k-~6D^ARBZT zE}pRJK66(FQ+n&xaqGDBZPZxhkv`1Cvim*P^||c@B9K&0`hUF#j|B_V!6`nsS`C_u zYG@8s$Ax>YZFX&&de@_i-)Op9O`aUfQCdMvS4Q9QwenSEyUKcYjp`zAPOQ+-M%Wb@ zEbV>;=7m@q=|4|>LBetFm4j&&j^Sc*I!Td$y%3uu$yB4hxbniVdFs!^Vgspj@K=1p zKuaB)>!}qyhm|;j=Z!at{g&$h(?)bc>vSOQ2gUh)Y~cc9KKx!=!!PuYSXC<)SleK_ zq2g2M>4Svg`BFw^Xbsa)-^9!)5aI)vi)$<^_8}wBt(Srb9c!@7_?0c`^M|{_{6n#N zF+t(I4HqR%o=q@U{2BGw8-LRGa9y7iR!fqv-&5;sU)IYE%{#M{L$fVBTkE#sV(-xh zUz@1MS@k;ByWR#{)g;F*+5Zb~#8K2%uKdLblgHaTg5&GHn{lQ*`7?vF72LW|f${ma zE-*6_0I#yoi!d5(dexQD#6)D6edVo@_7J z+boVCh)VsV;#a`v)F%sL2*mbL5)*5kDt71bI55O?7rU6aB;&T70y_N^A|?@M zH3kM;`|jab+|3uWyETz014I^aTn{2#NtpxOpunL}kinmuyWMynO!1k639$ChccRkc z-BRI%X}Y0i&nCUs$S9{2OTk>BZj9@X8g0uYcgou zZ=*+*(uq8i^;BMccYy@y^W}xKrzg>jPHRy`IR4I-DoMrGtxt~6l93Xt&SyFe%u-N`WK5M!Uvb2=f_H@`qu8HN^ nLp)pd@Bjbelt5$bJh`|p PLOCD - Postman <-- PLOCD : {mount-name-list} - note right Postman #Orange - schema validation - end note - Postman --\\o Collection : {mount-name-list} -end - group /v1/provide-list-of-device-interfaces Collection --\\o Postman : {servers, mount-name} Postman -> PLODI : {mount-name} @@ -102,12 +92,31 @@ end group /v1/provide-device-status-metadata Collection --\\o Postman : {servers, mount-name} Postman -> PDSM : {mount-name} - Postman <-- PDSM : {[mount-name, connection-status, changed-to-disconnected-time, added-to-device-list-time,\n last-complete-control-construct-update-time, last-control-construct-notification-update-time,\n number-of-partial-updates-since-last-complete-update, schema-cache-directory]} + Postman <-- PDSM : {metadata} note right Postman #Orange schema validation end note end +group /v1/provide-cache-quality-statistics + Collection --\\o Postman : {servers, mount-name} + Postman -> PCQS : {mount-name} + Postman <-- PCQS : {quality-statistics} + note right Postman #Orange + schema validation + end note +end + +group /v1/provide-list-of-cached-devices + Collection --\\o Postman : {servers} + Postman -> PLOCD + Postman <-- PLOCD : {mount-name-list} + note right Postman #Orange + schema validation + end note + Postman --\\o Collection : {mount-name-list} +end + deactivate Postman @enduml diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+diagram.completeness.dataprovider.png b/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+diagram.completeness.dataprovider.png index ddca1d635e9f74bc895cba438c571141866edb48..ad4599776980868a05d5c0f7f637e71e429f54ba 100644 GIT binary patch literal 114426 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
k-fhvyFZ+WW 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�eL$NGMn zeyr+;I>mw$CYin_&{=umTF~bS$NIpo(ilO{gI#H`cmY(w8aOnaYuQ}4wrx(a$JzA3 z;;UN5LYkbNC8oeTqBi^b$Ur08m6VpjLdk?QhzCQ$f+4F(b_@*m_8K4dTCwtC15E=U z>ga`Y@$qz_a89f)i<}UYhHPtD)O?fJdMm_cU~8%t)&p zWGxx=0amrN@Ers+Z#Rd*EUYj$y{O?7-F?pLaMId#%#fsg=<8w2Or$C=9j`Q62YY|5LT@pL>=IJ6nU!22D z_4zNF@98ThXtAX1{pHecSDtlAw1Pu@;VIMJN#GIr*~Z6Ed*&E*Q-IBUUN6)bsWo=f znrLR=2A?Zey^ByX8B!a!3K!022M<($9$t!Fa}>Bh+n7;|O2EHAI1CZ)U$`<$B~5kiNmn;tAifNwq8+HFfV zA*JC{gkoTKKek>7VUbuaxI{TY9wJ z=y-cgjI%o&WkA}KeSbD(;gmg5Yilq=X?tPV$+ z#evI!)?={9hc)7MXGlj=^U=^zNC2EtgZQc*uoAn!&!tX1v?R=~n!%QxqT3jeH$PRmhkD{bH#)%p}`b36eP zsrdo1fPh>nobX~tys$X)cg9+7iz#L|g@S3nLf5C9eFFtIa<*O`IR!0LS>!g!>&^8I zYxZPb2Uu1m`1ET9=WrbdZxN@Aw5Q*!)pez_65(uW!Q@Tw&0^b@!oL8N=$DxL=z~oR zOH~v)4-nnkmB^caxrZ&A_P1k^K7Gk}50&=J{u_S61~9dysKK3b-{?x@*t)%%Q@q^1 zf#1o#jvKXrR_xgF2{0r0V?QI4=_ksrqTK%lB4d0y}`|3LxkQIE<-tarIA#8dd|s?*4oQO=Zw zog`W@00Q$0=u@_q(=m86qIVp5f24u@mR?4D&UjEHk2C7t!4Eu?YP*Cyc~RJ*gIF^KF!}*df_{gfriZ z$x66RO?av9?mG9Ut~uvO6iR|AIG0~yKPg%AK~mP3OJ(2!+>P%5X4j7r+fQ;45mL#= zh{VtKGqmu~Kd8QUCS}%?_0CXeytKDP`+qdsU{~hY; zCi$SBq23{`Iu&?-*hef=RpC@R|Kfv!8uCcN1E*R+TDg$3FfTBuK+*z0#Q+wXSC08x z%p?Vs_qUhE5rgFw=Hj$?d8PZ|v&ft$MbE+^BsloW8b#H!3OmfD(PL4^ z`@#P3w0PK;xewAz;luHfi+l&#N@Lud?@n*-*1J8wm#FV|sP`xf&ROy9Ch>Rmyb>^c zrNS5HEmh`)c?hs5cfqyk&hgwk71oS{WkAR|Bou^;*E>m&XeJF;w?oGfCe7cUdF$y| z+%+a_5ZlcnaljLSplFT!)6)BUvSfx}rn--1N4=3Z6A7Qoung5ZTn7W0)+@}0oO<6k z4BjJer!F+R-^8C4tLQggLjl9eV-jAY36?mnewenuBEpEJJ(I&%femjlD$X;QP7N>_ zT{m0)m5pR^{-6#bx=@gUEnXT~fARz&xP8<5TJ)=-n?Y-}ZGzUKQQ|j3mkUrzjZLZF z!NN#ka4814Bi+i(;<@op*q{CuvT-;)1OM$Nf{I{0lAfp_&C_+NZO`~FrWDh=^RC63 zQPkY`w_#%zfrSlW)6YQ0Dv_LbLeL5f~=Xrz&>Pj;r zYspMY2o#nDF@(36mJ~#mLIZV=>;rW#Mu>|>=q}y@3wkn|ABib+lIC!U{q|~jfHAa{84=`LUcKWb_ zLBwcfs9!f*U=dHIHoITfaqm02i!RcbWx!!XO$!`8kW!p`JKB8b2bPwY_I+@eY%Ya2 z&%X3~e7)!62-Tn*t^sfu3ecmoEa$w8Qso*o&h>K^^<$M+kUBuT5^X?ud|q$-3%p3x zknC<;{}xx$Y;2jd#w|=(-^lILlqPGW_7%Ok*oHLw>-O^*6zbY50Yms<8vLIk_sxTU(1>@&5*xhWHqcQtxw7KmC$eL9$59ShN>MIm%4l4 zPBSP{9_K5XMbO%fGi?kN)LS)83GXosFb0db4>QnnUX?{ZUhgywR$w+VPQPyZC@Y(q zH~OH-fkXM=;hmkXP2)=)*;aEW`#wuyY#*sFZ{{(TNlq0CeiGd~IM|#amPiH$Z*iYf zxtRyCJliK3WN8tyJl7)~49VrmEl!Z+NFKBYvM#!%j{f^i=zcp z#6z|qED&&i!^4U1Fx;`d3LOkv9dHwLOss1a@? zlL!??9G$&=p_rHJ+raw@*VssT9o_-E4EguV@vOytFZAAh$#`&zu&(j7acg0sYa&DEC7&tvf!)j9sk z=^{NXL;Ksp2AaHleBYxGk@v8SDu-2o=IM8_Mn;VKdQd*WAH1W&251e`^ABFkbBgzS-)+K_r{x&jlZ}1}p?#QgubXS!y`x z^=|LVMZE-8tv$@Q=wIP+eyifIdtQAcrk98Ct+qmAO#Eg`$aXV2ACnS}PwQfXzP{9y zaNTNB+miJpS3$kr<=zxWM)nxHTBOv}uKE(s-3YQMyXU}ZC9k6SbDnYMTDX-6PSs;g z1}^cCReKHh0WcAA`!Z5m*gajl9>&xDNQL|#sgUcg5bfNSHhv}J(AMJ9&p4HwNpO8N ztx#!S<#}c1NPr~CuX<)}W2V7%@QXvcW|#++va)AhsioFP5U*}uFts)kgjL=e7&%^6 z;ewm3Xbq`Z>6{OS8jX6Gh6vtNy>?>QFySOvnAKcTay3uN@@Q!(nXoW3 zv+FfImvdm`Vq#48OcguoNHhnsZ+!?@o%klfDnJ%uX4K&5@SP}OUY5#b2T}PQfoqMk z?d@bA;LJNkJh&wB&K&H_n}N(nUng7cg&xKt(NOhAXc-!=wG~at8-WLpH`ta7c$4JOCr>6CyY%bZGrVhb z>ePAkBb!YAolVywq^gr=?zn;3^eal)(~$#^q#%q=afMFRg&b)B;xpUgH-Uft?-&iT zAIIp&(r+=2kQg6F)KpU)d(|_Zx0U-W4WSW<$T=g^l@WX?1@ji`Z968$<9Jqbd&T- z?2^JyoT@7;1+JH`p5V=v0o&iTrNc)Y+yF5&2EA$l0V5?mFMlWoi|F>Zc{Wcl&2u{= znV}2Z*)p_xOh(+W5>6VGp6e-p3vq~o1CzZp!|kWf*Tqh&m+Zu#0~+;2*2>wKl21}9 zrJ_*@vN6uaEl$S*l1|rA^)a$pcbJyAbritz&tsW=pGxMi-<;`tpZRtrE60f>Up?K$ z-g7-sHqH4(Ws=PPHV}yY3xrl!eIXGHSr)u5u1b~D9S@5^Y3Q-@A4qOaSxG0R3T_&e zIM8#S6aBLH!N-_Na&w6|>|5~mq);<5FVWw1Z78?SzyKjFtk~4F3&QpW0~ps%Bn$EV z8Xp$Iln9P8<OQPe;LOQM^ZakVHu0f-|$QfZ#Qowq;1|Eq*u=FLGu%@zddvP>y zm%{she^mgz|8GICU5N+VzR!Pmz^48AIpRc&6PsS%@*lY4GtFyyrnNJs#dE z#F^vZFRlK`h2RIh&0}R79dipu6PTV2o(RkgW~FTd)4l%O@w$PHjfFKYGqZ(>wwaBs zsR@&gxv5<!D^bUr`mBthA`u=QtGYV;Oz z2i?8TNEQd(IxQT|Q!N%N=5yub<9%mOClw!}{%<Y(p!V$oYAA|Nl{wfAdeqHCIYZF7rdEhM=izR%s{cLn#jjGVe!Eq@;O~r zcD~ist^UvbN?1dg@OwSB@&%dPA;(85x=q{l~ zzHJ`8cAg;bwht|Bm}zXE%Tl;hR5u}GqD#CX75hB_%@aluC$CyOZikt#kbJ|tSY(^~ zmUT$*n;_ex;tQ&zA4R3yNg;mnj2ff$y$oKTi*g=c$g27vSwoN*eDa~XW*^duqZifHyqQ(e;k{p+7)FZi0P+EWaJHdmjEO!qPXAv`o97riYciakS{dITuRZK6%5; z3sHnhN=x!DX){PNs483-ds$q_z2EPbMHdmiNu7J^FvB&Ta8f1RUrU|r$>|sJ$sao% zW#8`(=1J(<|)Y zbP59vx`|-i4{_aPA-u(IWIk5o4UwFYzNBp;9K)3o_=8zozbH;@r(0-6g(zGh_LX^# z!7J|UC-0))DfBgpurw2Th*TM%;_htInw~rtWBJ3ogz6Yp6it}m{!RH?!XIcnycc+) zj~>W7^vw?v1`tm~(4tHF`witUV%={DVAy=loVpUD(?x^0;la|b-Lvf*GxpWnv7noU z%|O*hruLoiZPsd0<7<^S@naHC5-`(xJP0b#@*rS^cn4Rt>fV!LHd0@>Sh;B^%HK?B zaqrrYh*tpjV8Lvc>8{;y`rc0XltuDfSDM;J$5v8*0lXuv@)C$2;Om9h6&qYA0bfrq zDF`3__K7VSaroPPm^|e0cP-=0GL ze|zAIk2~6viTmxMZs;*8EvK2dx;3x53XhNdRXfwj==%DLCZ@GQCqN$ueHn{E>&QM* z>B-_VVyFc6D<#ST?bsHV&deei!gz1miQqbt_^#zP?tO{7r+s6P%vyqW^F8b>{5dHp zDP?74Sy`5qZ_c&|?wKh67_e?3z<;x&?NsAMtX&)vLoKm1RK_PE9md6|+JXwaTSq~B zyDbAY&z`Vc@;PL#J0pt2P__q=xt|c_#;dtK5u{Z+upfUq9aQ?i{)d7Ck=P@XCH6mSvB%}_Sx_#%)CB~??%$F>~4;-tezNU{CVfh*QiO<|;yZ+0+yP(u-vokJ8OSP5jggnK^+ zW|-5oFL!h%^Gi?#dLogMBtD~jcb0`>UtqQ0Yb?Tk2om3&rlvHV;DEtsu^OJJ3};l! zUk`zhe)#OCKR^1OnW@Obo1B}ZMWxuraDDwfQ*olh{=KPi|LneXMmprWRYXLDYh=0W z-X>yj2p*DnuBU>~p9^$o0jnCFfwFrjTS3#rjPwif^Gw3}iHhWyR6PEC?m3Fp$k5Qx z#AKiX4i8>jSTHp(FfcP)9LCb|`DInTHx2>Q`g%=Uixm7+!2Yo8*xi_e@2^FPwEGI~ z8rVcU*U`~Y{y_`f5e<&yvtRreV;dA79}foEeWroAg1?yTu7sAuh`V-iS($)@CtO?+ zf`8U$J%z71{2n{Hr?(dpALTe1QkV|m;NW;ewWmeitxwRNAWaAr#H_b#XlQ7Ursg!y z=D6hMXlu18g=N#!_-QVJnJ0iUDQEup9xXI7%tE0UoYg-DGb`Vj1mnq=jwW6*M+xgK z^%&G!1XRVF_2niNTA#Au@tY(Sua{`k7TaZO^Lrn+-alIN-uGJB6*dgnpyO18rKeN0W%*)Gjr>bgb3TD-rX^U&M)x&gO z%x9b#a)9oy_?nk2gp14C z#hQ2~kUj?s^3?vHQ~B{}4PB&9`ihsB2%p{j8SIcn6~V~xt6b!rVJ+TVR z8o!GSCn8?(;^g3XL`cDFV*uK3J=JV#W_DpszbP~@+au9TiJ{nZ2)BYYY{;NAhIw>q zvJ5j5UU!vc>XUUtSX_CFsrAGHSz**U_9pciSrp47PeO+)ti|+h&#-J%kUvK~hwY`! zv!1I&dfscTi3n1+60P4C?fp1UaRCpH4dO`0-BhjyWNfMWx_byd2?LMIwuO9B*?OCJj=eJn zg%c;g>&j@2wo@$vf*}>}{Web#CJVdvW#kSYRDfO7GpS`UmRT`>7)2TL470nT-TdY( zQDud3cRFJ)6l|rkD%{}jRFyM z^%)NZ{L)Zl3YM=jCzr=O2*`I+lk@U8RoRlKt4C*LqBumwg2tuBJXNHYV-sl|HXKvROL%b zPR|Ji*1z{;>D2iGM6p$Sm;6U{wzN1bFIvKxM(VpoFt50zd0qN{3_Rcmzuex ziYW@Y-kagaY(H*r%&ITfP&-eXrlva=mciyhaK>1048cz6y58z1E&ac#0jo?uPc%f7 zSHjhf)-Y=xgLFgOTv%9GiSrVj6Ycx^`nr#CyDk5=%^b|ni9Ov|u;KA$x7eeNLfk+i zBPH`#Aq!AL;e z8ZG1rlI=Pt*bdz{AeVvaH_O%&~@fM zIKT5r0fHT&+MkQ@-G>eiRzPMJDzIBv5dXCHgWx-)k4rvIV9`-R;1jpn#4|1^Sw*^7 zHEfk{m8lLr6!>K5@giQdFdkwSN}XQsSKjtW#-B#gUsjSl-~*vv;EE65VzXpj8G4nR zkbn6_@!+>rdw9X~o|bN{9aOiG3;xE7c*yb4+asZRg@!(bx5YzmdxbI>h6Wh*t$4by zq#*1EZKWf57l)je6bi^y7K^6lswl%U2{_B$o$j}vKPKsKA;~_#A)*dGl<2V}l0#CA zb75O39TnWe%gfubAP*@^nm#7Uev(77lC#O8{hB52Jx85?qaG*&zFWh*D8F+E-EY68 z-hQ6D=~B0@X#3Az$id`cj{;l!lmFVv_uL(zr^s~Z ziXy=fb0`Qa2+KnhAZ2MrLpB7*Ktuj)@|DN9(Gug71kC{O(VYIUQj>PRfI&TyEC>pqpaMzww4pPu>zAB@zkyJCmid#=m1;Oa-dNbW#@kv7Q9wj0`| zvCn!+>;0jn&ufHWT1@leQSXlVCcRA4ws8K@s}FbD?463uz;-HaVMeH=u6-doJ>cgQ z-$vQska_Auu?W>58Jjhj?C#b6O}x#!I)sD_#jlASgr4aVywsKu?+ru*WHFCWZ{33P zS3L3kPPF>ACpcj2d0}UVMZ><@)(g4uw}fMAv)3bEHV8jPmZ}h%MV;q)@_E|ZgbYrR zY}2hEBpS&+q!ez|jaX-)V zep(#tmXGUMsv_E*v3l$ofg8SWk!^+^YLWy6^Ty;zXx-G_TczFg2mGW2KhB3^q!Y8p zn~H^#5xBlh!(&p`X@2(2*uvh!H7sR?yYoSY(|Oy#EO-{jc@H9Ke#?$T8LGV=8UWFh zR^V>|zS~~*OfVZLjBCj=X!RZ5uJvk{;&YwvkyA`pckb5EA{TJ7Svk81rj6HmGoi|; zs_`8WEe10Tr8IBEbssZqe)g_3^hPq*g*~+nb98OHr=iB(@CB;hC%r1*7A9E zY8z=Id)A`~IV*N&%SRarr(PQHnzZ;(FmFLaN8SzZ4Pi-5$HAb}heIkiv31yO(iNvl zbW<3%eg31761B1{M!-YZ+VtH>{(-_o$ptFZZ~yJ7>% zF(W+#A2@CCR_+4kOC@r>I)IYNte5Z+vMRLWF-<`x_6GY&BbPJhbyQ{TDzGn5Ji=bS zIPBN@Fq;^+2}P9GPWa z*g0=;7vdMI6+WtO+OxcFS}-_s(m7m&e`efPT7+LGQ*OWS!}nO3fg3#J z9qNIs^VZWz2E6N&O69BGEVQ|>hH{8(+Z6Ossus5FEK&1(MI?*sM(3IqyliX4vx2DD zd>@VFlOXN(j+YWJ-&y5s4XqM?GjavWx~^(-icV8AFl#6oQNu3Rc9}UmxA9q7Qn>5p zy%7THnbz2kZCC;x{;NYTs-9~01!VKXlq5pitm zz60r5+Fq8G-j@A@(N}YW_Hco4?U)(b$ZgMk5q7ud>)%1Xr{ZEWadA*o>-SzkFEf$r zEe`BJ{We)=Y{!D|t&t2nRt_j}=CVz5?817stLA1wTsCd7n9kE|r$KC?lG9uNNkSeI zQE7?U5y7<2CuBA=kpq3Pj0}$7&c9TpJYE%y3>cKYY5=Qy5;Yb)At_e57P0K*<6O^; zIffRN4-;aTh?vOlUqobI!jxTi4rHY}n!jG${H@~VZ(XO@upL?pr?7Y>5J?@mzWxAx zk^8OwkC&LU3dmL0KPPWqRNV2z<;ODo`_z%FJ#^&Af1SH=2SIV<;5Xdd4RFVMm|_N| z1gS7Qj;o$AOP&a$)`SQefXe?2C%e!R6h8#>n zRJ`rn80^%XBu(6p2sYW>iesMKfh?#|+S;i+i%G`FC@Z9dV;X~w{uhBvtBJmp^xZX< zmDg10aUm)rpL{NKe;Zr$w(VYp4Z324HbEi=|H(l$|9^!P;vcT~BmK0f_>BnWboQh(zX<!il*}-(H!qVd#J1l= z@7yLk^x~1s6<_RI{qvi6`=4%!58aH*6_n#$kAmD4Xh&W<+%kU|_D6xNTz2zxAc?_e zXLn)s-ahz@bKP)e`buU^v=R)<9{O}cd$XqEZn1+!i2m*qg zOpGwhQGAhIR&1ZJaP$%>G)tE_XS|1QPgNnA&7+`p+XlU~KZw{{RD;|GNR1tY({^9I z6{0GknuM`fZ|S}|zYMj3f*P#$XOpNPjA_#RyYx0P-BeAmqUH9Znn7HecvmA3o-L=Y$48_B_2wE3bmu z>W$I$)P=V+1?M8n@8dGfGh84#y?mNRWtD_3ZX={E8rv8=A)#jXM9+EHaon%A+nWzw_*F)#+RO~glZ-7H(5~2 z(O8z15khJ2a+2#4aqpvgrlMmDI%8cKc8X!n@w!o4SifCAfe@?Da}^#8tWV&mFBdG^ z(8oL($B4$v`CEDjMN`tIGvhOo$3ch}{(g}xJ6CrA6T1V$Qhvnz85@wk!ZQ_@I#(~I zOh?e@1ZJ7^WTVZ~K%)q|my$xuZWp~)f`gfR zjdc56V+@9(s(P72@+8drDbsMH>V>8K#R_$s)(UYdIt(`_1H@e4a<2*+9=y`fjw)B= zOh%A%o1N7k8NFA5-D9*L#%v&wXJ7TY zZ>tPr_kFTmBUi-Y1Bf(giS$r%Vw78AgondB^G;MC+%hZR#78S-|KdBCU=k`ep-)K9 z`;4(LJcZg=+xT!#|Do7h{KIE6rVD8?tLo@#LOq-B;Y?W*>bK}&I;r0fg@Z~C!H_kuU1jFHxL6yorut=gbcZSxiJEyw2$cji|? z0wm$uj}J4$!aCrLH8vy2PyVJ)eVo7dq++TTg6kOsTRa&GZjc{cew?ok* zNdOlQp4|j9@aHV0tbnL;bw=OUkHT+7fZMr^t^C-#&)nHBDOM0)n+vsTN^bupR5wH# z=9~|YCG=By$o8YfPle0sO!FyD4H!bW=AB4WnEisU+xl}C_nGl}Dl-FvGa@uhf4G~t z{x~5i6H+!Wv$JT=M=Qa@&M$CnOd*9*0aQ>7BvF^z+GVd5#llXdpvWR3(~D1sWtc_|-?NM%%u6s3}z!Of4( zbf?yOuxB#~w~kI0o6Z?osdb{Le6F9AvTS%$d^W|V7o|bw@pc! zZ(*HPM@ln)KJ3p#3Xu+`o67R5D{B)9x0*gpk{>`Rjsq}lhdU^7JXs8cd$5DPu*Ao; z(d!^t{n*I`U48ovty@|w<(NeZ47XHk4?Jcc<>qTfa!6>9q4E``M?$QB_fec&U6;nlW zUzb@I=E}sO7zlT&!%+>T|I1cFtFVoIOWW*yww;2Y&P`&QOhWPKE;uA3b_}ZePt4Su zI;_U?oXmQu>gCzlG?6PCrOz7tZpXKxakPT%Mi;f0 zlV&DN)L)ja6Bj0Bz)I*i5z4J0bRTdCKMQ}N$GEcnfA9H^YMaRFsCh?4`)`a`<@nN_Wy)Qkrvp{>dt_(oz}=V?#7y!YoP&+melXffL&$At}4N8r&uEMK=}oa za+*#0KcIG4m5Zz<%C`0w-kNFc^<|s8#0b5!e8X!q{oRWg>!|FvRsi4gHg}y<(>`Hj z_Y2RH9sBMxj_rvH<$8OAs*!%|q64V+JK8=ljs0;9FXVL9$#;+W@3&p#y2!5^+{b!6 z8DSRm)&|0S2Jag`+3hC`qtQekINlJPB!qOG<$N4?DdCp$8@v~dueFa~e(&%i_J+wB z%5N+{X{)BIr@Vo8eeGHBi|U({*A35*zdFq(0c1H#v22mUhh5Kld-}=MN{=5e&&!2e zdJ3~)myT_4cz}0*@+-@O=a&d0aF4t0@GVm+k?s#1>4*E0fArsi9rY*Fv|i+spp{n# zt$GDMocEZhP|yA4584q=<%I7CX2rx*Sw1XAkea%noU{P( z?#^lG_Ddc=b{r#kBzBJb0U}LDqhUDhxv`P2Jmm3J+?ae&u0A1pLR)D0zQ>vvZilDa z+Sv5O%*w#782;?(ErNrdHm5vDXCrY-iH_C=^hVT9qdrcAQ%#wDtd@xSc1fX@Uha4Q zlq?U4naOaOxU0Rp+Q6LQE;a;IUgo0l%L>9)a4}i%FA*;qPk5X?T2x>aun2wfQmBoL zjARio>bTR*oXo~c(>X<%#OB3;Tba1U|F->)TSAfKL>a|3=?(a-_QVqMTHKn8% z)AKuxzN2MQFJxg*FYOugg}SZQ)56zds0PcN?K!ae(7j%oAoa^ga}yK(rP8%Xm(_Z| z6viUu=qFe&ot~!F7!l7V19S7G9BM$V8=09=a+?k4_zEbN(T{C(Yf)*=?My|H)RdC3T%e}F6$RJqRCtuBZDZeP9@F)iiIJzycUZMiYq>C3+5etY zE%VveWQCN`D(?)=_Bh?(Z#Oy9&yQ zZ&z}WGF!I@Y@wGuq34O3nwk{oS%u4NrXuW7H+O!@-i``^^g7=GyXdq&ZJb^-3EI!> zcBfnqSB^g0wj3^Z14a3a{^sXYPU* z7Zu&>LrhQX%G1Di8nlGly}i9V@31ndWIuZM@tWMBGd6YXo9@_E!`&0Dec+rV3 zg{9rCt(V-;>j}^@AeF}YY1h_xB~AY3#bR%;3$Wlfk(? z)2%Tv%+D9r0sz+!gj4sJJ+>h*BSKGM^3PK#c1jdXBo{u?$2@s`6a%jtUdP2i3rzyG zz!lPp?V4AA;7jqZR0A*2xG7YB=I@-Ftg&B)7J{7qTrf+iQIoqwxNPB@$nxHJe~((@4jXd+wsoPYll7# z$2im(`S;d`29EL0Gl^`)A+&9r54WBK%EUeZxdRuVKX6>+0s)#Q<9`8Pc=WfMGVmbg zC#wD~_9goyBXB|>kk$t&XNHD``ouJ&zw6(0&GI675(RmlY1kfL8tDhbj)vKjx|A#u zxWIXfK>Ng3ArHuLTX~p?pc%5gH5`c1V*q?98$jCS{1MCg0#{~oga`am+ zSnD-~62mcumJ_Mld{2}zG+ie{^lPP=(Term3po~S-uu)RF8y_!cY zveZaQ+=A1Y6;8ee`(&{a{Qd#pdKebB`uge*V4;})7*o?gZdQ21O>yPw=sOy5 z+qtxY+7<%lE0qxB`3yfz zn1m|Zn;VTB`zew~sdzP6GZ_KgDG}V}n&`2CBI~J^C@MWlUYk3Sj1D zSVF}dk}HP^Ld^H&-Mw~YtfKGFIR<;w@~PQmk?mX;u&R`{G*)>MW@wb;gUqtaT7G}o zo;NX(gVTJd6f_cypPqX8c*-rxcUGLG%T_YB?5Qm2A8LHd_ZCZVtefT*NRXPvHZzk= zVZ#n%-t!8zeiX8H@EnuPT5t0HzP?crppsJ!Zmj^LglGkl)v*4a_2i>&w#g;MEY3WU zWP~l{pK$Ic$jJimbbfl8XFqVghO7`Jo?8*IKO>#kzzH%%DWAtG!8i>$DSm1;l}#NbA_eQ#@tu$}0(L{Fim z&MwLyiAYd@q=*H!mN5JR;NB*&+1c7^*mf#_kTd3MWNM0;k%p^o76F5da;`zEh~VnS z*QW`QsaXW?x5cV?WnS;4pm;cNf%w%w^RPF9UPno(yE>-wwym9=;P#K#atTtVATSqM z>(?isce^Vz!FH(w2A~jjeUEp;=t*vEz2L=}nIv~9>}pVjy3&o5Jj@^n<1S$m3bo0y zuyrPUHbRfHpcr}?`!e%}!}TghPEaTT)HMJD;-%$i^(gbm{NiFHudNY4_)+dL?@4K; zBd_hdf?4&VQY|pkSWs{N#&V8Txx&pgJUx6t1BW4WB2FJvB!5BQ)+Q(AAzO=s{cUZR zx#C;UoW@-UDyU$wh)(@`(w8G36CNZ;M}_wawJQ)C8yl11a)HqDts&Aa4w(8%C zrWVNv;WRCt=je?8^X)MTwWCyf>J4O2RTsvwudh#2h$jLn^03HI0<{a-qb(RTikJ#RiXCVP?__XGwUlkS?{Ia!YuDhz^;o# zH%p5qBW|Vr;wpFk3ThNp~w zj#o0`e%_JG6bDsgyI1W~dj6$Pvas0yD5mZz2#5R4%Ydi-TGc3|{{@UR;J^q<@h2F0 ztM5TwZrFZ1A+~P-4CPYxFF>y-nJqszcfP+M!_0RABnG3qY7;0=Vn*b8DrRr1AU_{e zQ1{ha5LBZh{1kL?V~ho12>rUV?HE7nkmV4eV91 zpIaENh^B~5QOXcpYh)iwAazR_pW9U7!5O36Nj1qPaa{Xgu`Q$^Q`a+g-n_So$!#4} zPFldoiE?^~eG_?aCf2_zLrW`L?JwJ5Cy9+x(4}xYG{3gCHqjv;q^ZQ4WDM$s79d<| zgPJlDl!ef)Kin&UL+rveo=k_8(asbl&wIdh=1nQ7B{-vSd9V0s;m%|jFz(?x0MZ4s zT0Vn`wZ6W-3v>M+_$2(h(=j4GB+TZ8BOco-HO6mg0dQ}dnh~wZ_ru49*1gRI5uc$( zD-dFTHh;586L_}L3Wh?att#Nqa|-ql9VCqK~#JyfAKO|76gjGKAia&e$& zZK{Qk9W>)g3qNpbeSUZ1^o8oVvwLKni2!-nE#!53yjxyEGOD4NqSoo(xoX@gU2EoB zu|WqEKC=TrP}ukamPBdatNX+1dH}r+)_srRgC)MW-4oQl-oX6ETz5+-XUe=2$h4%U zL!e^PD5X}?bcDIUZsEwHgZQ$FYm&bd?+ow|`@rWH7QD+{Z5o4FnSsSGtBkSj`}d12 zh})xmLlFJ&OT<-eLDEiv)#Xy#e*dpckZ{)U^{s9cERn=fw#Y;!IrQ&y`M- z4CPnzuzuQdL5yl7x6Oe0byNYkOV0zOLP0@skG$<)AqH9=;(INPtEL^KW1g)6>#A_v z&ba6>KHdEWG{@s!d%Wb_>@08BACEVZ1)MkEP>p$_aFEC+pai4cW+N@#lB$wZnG7fz z3QgWnNGEe003UwPwe)X#5(F>LKW<9|>gQKR*Uz^h7H=CB=ADM!RvpMhji@noy9( zcD4h2Pz0a-g(arMe~Y>xR^?gWqZXpRwgR>m;r0xtTS|`>cDEZKvYl-i?VD(2tE>j5 z5|h#Dcdhn4!pRAzHu#vwdUh=uk$oSm4KEq_0{H0DhAE^oU-TXWgkP?0*?2kKb{9AQRg%?p|%X zHa$CAe1t7Bu9%scQfyux1J=G@*bKBR;HK%Iz#hKm&g`P?uvDXrKXnoJw!anN$)J7% z+_pT(@;3?oiT2_S=-_0M-#i{imXwZq-K8W`1-_9!LO*vAsuvHya1;Rk^sGLiLhX&o z-%JWh33AK_(9Z`$J}#{qm{n5Zyko($klP+9NlQ$u`^kX?Kf}l$4>*~rkFz|-3PrlS0X?^^34dkRvye}sRZS3v$ zOo0;^5AR!4F1-%G*T?X9E;Ix&Z}kgr6pnEph!nWyzx;8d>U@A6E(rTBqeM~DS~OztuD2;{01s{Wi8Ixg zPvVY>_WiyzfI`6}ST2(w%e(;j8QI(w?+{W#Ws(Cct+Sw55Wv zAuTRA_IXK8(<@Rz-O&lXQU?gPaa_#^YFMU7sxC*s;fq*TPI^-c>{b&=BbZ)EIJS-k zIZp&CF_mwRo+Y{se2`ez6*M>C`IA%90k0~rJW}b7FRm%4ysBEe1jp`ay8}{sqzIg6 zs881@Irn%sBeq4aE``3x#oXLnSwq64OnG!It>pP+)1K7uV zCfaR8{=50goBJ&e_r>jG>KW(ZvB~nV(*51Js!0JXdaarH>C|B?d~uC@oPMl|5bDyz z+5P4nKu^s4TQ#Iw=i9-lob&D4Qf-e-R&qu?Nf?wfjXINAEC+47iCeJEKnXzI&3Hq# zR5<3dJO;=yY?`_2T?v;NaV;@ihr^(7w_r^m{eiB%pBe^dM6?0R^*_OYT@gYn5q$Bs zCLFUtwZH7y8W>8aG!r;5A28A1-yf5Pi}<5~2^r&nsd<+l3%C_mw>G9AmsSSXz>b0% z`dKW)>D=)yq`F!?HRp8Y$eFtppzRUrc!zla%zhEd0d$Ff^&7SJP5Kw^oR3I{+-FWx zI$TdekwNdeP2;8+@MM+MfHHqSRTtF6$<6IawFM56fkQe`tDkF_NfpV`XiFchpb6cU zU$>rfc6P3+2FEkl6d^Ihk@iE5Bb`;e?I|8K+1sg}@2B zD#x_Qv-c%sehCR#UsKs|hpa#mGi$BU4RFOC{FtF7EU_i$v*!>HucjZCwF5VYE-PK} zE5`Cj=JN3L@%JRqtpGVGI=AOhJFZOc?v@)q7qd)BNSIowqw+1s=P2IJ#`?ATiiT;} z?d+5C=&6YA+8jMX-Uf@m&>IDNwIsmRbYCkb$}(QhgJC%&Mg#IE!ij^T17b?+H~aWAXH~@sFtC zGO`F=K*hi5`(1EVfraxsuD)k3SLRPhOJhtO2{ld^rR&~sR9ycKm~LU9$bjGm7Dbva zMLHPB$uM)ll|*K@mG?8us^|gG@rf8J%yd0%6pmgV-2u`LGuXrzySh3$H~=8iD6xa3 z;%F<^N%p9-YW+PuJg&RzK-my%bis)^PJml&#i|zjg+<8w<2Nt^Au_epAtgKYR>R@U zj0%W3J(nFOA-|7JpaN5)W@Sp_E8i@Jkjg&u+jaAxoOx_TJXz`ifmiwWJUcOj$N)Nj z@waOXq#d606tboAJ+rAxpMd6oOQ6^50PFyCG`8cS5&tY*qG`7l+%-+3=1j-czr5k4 zUjW%lo1gJKP5}bS1x3K87th2~olgUfb<;1tmERpen2r#9@z?ix&b7nQ!*`b+eJZLKescPmaZ&)2KT_rSKI6KHiHSO(7lV6>ZH?tGohJcuw|+|`3lK@9a|;R% z9$V!>03-+HQil~BSsk8d+%4=I&kU-45g*M4vV4(kqX$5_o0}{EY#MMx#QcL#_30E3 zv;=3e*Cw0Z!^1&NL+`9rH3DU&hP{Pn3}G<(<>iT$lsA-b>0beT zi0AJT!$}YhEE!`Cj2~9gziH{U0EJ{f)Wr#8FZIWA5Y9?R5*sfu3RJcDIc; z+V0nl)AKJ3yPd+{8FnsC&Q7s}6t?3X$9}GDVd226!)n&QGKLWF=^aUOU@zD$4yafW z;D9D5+tyZm;Vz&+*B<4r*pUo|#DhxNqpS{BAG`PpK_>qEQMw_~XkLgc6PPCrvSUrUtsPVzXWPiP^4r1qtLn>PzIuXK$8n5 z45IU!e;Y%y!qppqn)0B|@7P;08(R8X2-GnshjD}GmFxy4V?)Dti#0uc zeaY3po#fAO{At5)+EXnLp$56yd#UD39Wx-FY}eHOtwG9xS@SV?PpN-~6%e&vfD-0F zF0=yS6fgP6U-S*cZnP?I9A0~(D2-ccvGnRS}VWf}0AmtUyH|L#9 zLAZZCosEl|TRN1(u-=cxylexB*KtKbm{#B){|d(OV{Bn{&%gk`^X5FLtUw^03Aq}3 zlxIMrzr4)?E`!8!GOf}?X`_%sir|9|SlZN8ApcaI&5Vnysd-QB{?}K&01^z0A;hK+X%DD%+|3il#yGq8ax|gq zG~nAUo+eF!6`%TK?zd2nIvWK>%c1o#DP|9jU80o?y`o3Y%7zD|oXcKz;!bP z@e!Y?@R`fU3UosSPX|`{XqSBIDiMe zz>e&T-S+jlgU9)En`C`-)vB$df}?RSK*3=;_Yi+tX+?vRpFl`HaI@Uw$_5`R7{q1P zllj&1k7qqVbHc@}dq_`uoq2%eah+Fw2H5`#j4J;b(UpNb^s!*bX>P=mYN*8CJZk6A zxia>B{voJ&mZ|z4Mz=ibl_bFAfG!nZ#ru!R^;D?61%y}dspO#=WWc)t{<~xJdA;Ny zxSYb+IOQNEl3n?A5EVrfY7q(rUuU{*xTK8@cnH3a0G5>lPvx_xzh)sEi~_fX3=J>* zUgZI-@~<+FTyEiYCA90`WS&R%TWY_Nc`S}BFV?ES@?ulpJ|i&A4NVf6;FkzT*reg_eIBNCJy~F_5IC|HVLJ?{jD% z0n*V3FxylDRL0*rG^Dwjw=3~xN?4&0C^eC`T`Dx(oa?d<(YuhNCEIoHSRz<{|3tBh z%s;iACCnhx6<}qHaM%Smaje*ISmLyrn*3#R%ZUsJ0y=5wB(_bh!j|KZf@PeY<2I0~ zo@Pt$nl~O9Qi^YCs$rW70sAx7Ky!?T^5%Gyb|9*^6f4{yyw1ZlbL?3Dm@g&SN|GySRpV7fYmf}a9Qmbrb9>h>>&j_q>|)k0yJ ztlGZda)bVX0rk~Z;4mmeUcxQ1!~LUJ0S-V#nHd|uH`B)5ZZaGM+)%7&GQ~Wg&aGQL zQ)b&QZy%mnl*RWX=r42LDp@M;9~z1*LxHLJD~3xbRpe&{G6c8-<`EyU)~8;5Ie^+{ zXUh?Iokw=capkfDJtV5EqJP530cVZUYceu12^Vm-1N;&PJAE^b$Bg!*6k|ROgt&~P zq@+inUk(651EmK75Erl`W-CFe6oKsEu@J&#s;Z=2}%D(d;c!D`*d-ho%<{)bIJ)|CiM#P&0rXqIf6mU$PX~ z1-Q}_7wzx+fUu9NZ;x`qXbM89DYCEC?HyO4X%|)0)@HvsIVE15&`;QWNeeb#=(hf` z4!`e5euf73m;IW6`8iwQdH+~K6!SpdmMOdS2G*}VG zaFyz><+;pVIas6pf4)HrhQRj*8|ohUe@8;lT^Km_WjEcAr61lhI7z1db6`8cA>zcO zRn1ZX8g2$xV`nA8J~x^Tqw=NJGc1MwTW6`Q;7S%s3j5VhrnMSMzGo@avRyZz;hQ*~ z+VcVhn*(0k&&(W;3XY;5`>^o7KjpY?^iM)SFa@Dzc9( zx|__%8^SBiJ5NXI#D_B)P0$CL9bdx(bB9NI@K z^ZCv(CSaO#?9h@UmF&Y|?2F@-#qO@$bfpGc1w&yyYfyWd!M_{#9($&;`X?J$$HebJ1ltS$x2QwFbfJFaE@-^rOW@U{i zFPP405jS78H<_<?#x^Ro$+|AhCnlnllv_l;bJgFMF=$pjbK{iA4`p6TLsT5akB1 z4^zYU>?$kpo6#plVjPF{-EGaVZO%l}L#vvs*)6vjBiA&wnI%#+EKDM3f|j&ypC@1Y zqCf1Mww&sqw`=`AfwU1=^T)DKa|BTm{d2piz=>BZp%nTrNe|gVKQ@4mzouWR^qfC; z5fh@1aLh>W!m0_6!A4Q)%50%L%LdwLx+UmtbCqF>76d}$^RC}S{S!2#IGxBle zjA#YXohAvId%lt*#-zeep}8KJGJN-@)DGryTuI?K``Ta~;&Q)+t*ATYT`ZV9zsy-{tOLnoJ*zi?gzf)875Mo$ z^^N*QmT|Q1tuOHhS(*$38ziRPxBhs>KNnZ+`(YVtMpE~BX1C4;Y8Sbya z6^(YXh(14IqaRK_SDswq0JbEuASVD%lV^=?2SFgY$VvAuCL#`o<9FhPt z-cbc)e!^dkif7|t>oG8!kB{*RZ|4F)DfQR0K131?(;^MiH{at~NE(2E9sbu-HMGi| z1&9`OO{hDZ6Z?}wQYwEkA7-&UeBVFj__>!)Doe(k}NWN=oA=O%dgqlP_m9?&@@LgrAgQOEM%K>{6y>C+ zn*rQ#yA zS&YHNlcAXB0)TEOcsTJL5T87fxZ`q16pB>lcrJpJN&Q=eIP?4tZ~%!23j@d!8WvVy zK1@k6y}0N@H2_q*TAj85p80SzxZAbrmTiZYWFXG-j5bHF08#mLm z3e$=r?TbAMA!;U6gcgxCL@Ff|%JQ_ygwkdgMP)6d>`Msc5eXqXk$unl;CI~*mDJ4p z{eAy<-}z@scs|R0-{+j`T-SA2PaQwrj9SEM@Xf8WXU`h6>q1!bmgYD3R%dj{?!=@WR56R1y^MF`9N@`!eJz^Y8l6E|?K$vhi$IHAaADWS z%=S#69`mdCuer_pt@>mBFCPMgVCmK!NtRz;I@-t?rFunFb2?6U=a4WjRK2}e(+Ud) zpgLiz9Y4;UbR>22Oz^MQM7yRuXgqNkK>tV`*O*mn_GPqP98_hbgURuGOJtVo-#;(+ z`DX>{08NK4E3x9###%U&UIjp-_5+{Y7a;lu(ar%gpTA23otx-GnU_fpfGFu+C6sBY zws@q|u~k9LA04qrut2E}4L$h8OhEsVz%Kr0|FQ+v48}P>3M>xS;o6!OfyHLWuP@@w zlyX(&BxEXQIN98sQ#yJrXW#>MvlIarf~5hjf42q^JC2Ty3Pz&E($LT_zszwR4C=@V z<2+zV9$BOx@SJ#F=Gihfd@{Ll7oVagHvdX8T^&d&J3&Uy6p3+E!D|1jV$EiUeF z3~&(<5y?&9b*GMeS|`2nf?(9wK(HpnKofob>gxL}FRom?cyZv|^#ie3R>T?;(nE2x zPdl5|3=a)0)>@ofigp9g%wsTv#7@q-!71!4czMz-jGnSoid;n9xddibi6w289NAl)zJ{zyFKm2~OtWr4eLXx`=J$-z( z`m-Z%N;H-#`AJojl(6M~*emxOi}Ca`E7^dZ!uZ^OIgStHS1wL`u~AbceOEphYR&(g zN9W(BSo44bx`LNmmsj^Ilha<4 zseSu*zi=KI84<|2LVnf(KdWcGiZjZtD>Bo!*+(i$;w*cmHRIae~KHA zjgTPtK<5oLEum0doU1Ctw~8L;Ar7af5?`rd3eIlx+*ixd)!+1_ipZ#mT6(Q4b!W($ zj=hn~(0!T#WgGc@wO=V&3e(0n1`I_vPVfR54(p9CSq6reuaE#;dhCOk1k@r;{usNFp*;mB z`dUl#SXs3z{@DKs`XTRLYs8yToBDGDH4c93GX7xjJnHqOzkj&@`542rNvgtoc+hd0 z{L>g1WD+~m7)Q6ZNxz&N&I0i{u;&%_%n6hpX=>Z%3(C0t{yIjTfiy6JkBllw`PcohGZA@6p zXMSj~hk7V)N0r9MmhhCyckgb#H6+cjYs)eovQUOph2o|a1CW^hp1$TDmKVl2!<|kP zQPe338r6IvEYar)ecus+b}I1E{t8Q-!4prz!&y#9pk-HGefUeX^Mb9-LM)n8u@%eg zyv^u$``r15baOwsI#(W53rkD)^`Y%}0gt~o?}~XoTsLYl%?2f%`usM`CJyKC5PDQ z!~VmPeNnNpe09*PFY6nGWX%-0`?iMt^3=v3Qrr5+u?FS9F`-CbytbWi$SMg(U4cu& zf)|dq8SRIisura@M-Bzf@zra2w(aJFJt@N#9lnz1glI#q;Wle%LvW6WsT%qallBUH zBQ3pvL2n2bwLI)VN(3dd`?E<�mvV3k&#Vhw9b_2l{eH5oNHQ$G{+-Fd95EmdD*< zWx}gZxvSazWv!801Ja?KiRAfSqr{jy5`B<9$T*ZkcW&XS*TV5-OG8S%(:(zk0| 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

mRp#RT(rS5(EnFJzk_Z!30|L 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 From 0fddd081fca487a67dd980b2526686b5cfe062f0 Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:04:11 +0200 Subject: [PATCH 2/6] split schema --- ...roWaveDeviceInventory+json.deprecated.json | 16 +++++++++++ ...roWaveDeviceInventory+yaml.deprecated.yaml | 10 +++++++ .../schema/MicroWaveDeviceInventory+json.json | 28 +++++++++---------- .../schema/MicroWaveDeviceInventory+yaml.yaml | 23 ++++++++------- 4 files changed, 51 insertions(+), 26 deletions(-) create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+json.deprecated.json create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+yaml.deprecated.yaml diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+json.deprecated.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+json.deprecated.json new file mode 100644 index 00000000..e41056ef --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+json.deprecated.json @@ -0,0 +1,16 @@ +{ + "/v1/provide-list-of-connected-devices": { + "type": "object", + "required": [ + "mount-name-list" + ], + "properties": { + "mount-name-list": { + "type": "array", + "items": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+yaml.deprecated.yaml b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+yaml.deprecated.yaml new file mode 100644 index 00000000..7ec2988c --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/schema/MicroWaveDeviceInventory+yaml.deprecated.yaml @@ -0,0 +1,10 @@ + + /v1/provide-list-of-connected-devices: + type: object + required: + - mount-name-list + properties: + mount-name-list: + type: array + items: + type: string diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json index a572f93d..ec762e01 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json @@ -1,18 +1,4 @@ { - "/v1/provide-list-of-connected-devices": { - "type": "object", - "required": [ - "mount-name-list" - ], - "properties": { - "mount-name-list": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, "/v1/provide-list-of-device-interfaces": { "type": "object", "required": [ @@ -361,5 +347,19 @@ } } } + }, + "/v1/provide-list-of-cached-devices": { + "type": "object", + "required": [ + "mount-name-list" + ], + "properties": { + "mount-name-list": { + "type": "array", + "items": { + "type": "string" + } + } + } } } \ No newline at end of file diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml index 89c2eed3..836130d5 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml @@ -1,14 +1,3 @@ - - /v1/provide-list-of-connected-devices: - type: object - required: - - mount-name-list - properties: - mount-name-list: - type: array - items: - type: string - /v1/provide-list-of-device-interfaces: type: object required: @@ -249,4 +238,14 @@ number-of-partial-updates-since-last-complete-update: type: integer schema-cache-directory: - type: string \ No newline at end of file + type: string + + /v1/provide-list-of-cached-devices: + type: object + required: + - mount-name-list + properties: + mount-name-list: + type: array + items: + type: string From 23417ca2d2c45068ec0052e034772ae288a87593 Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 12:13:27 +0200 Subject: [PATCH 3/6] deprecated simulator --- ....completeness.dataprovider.deprecated.yaml | 1703 +++++++++++++++++ 1 file changed, 1703 insertions(+) create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.deprecated.yaml diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.deprecated.yaml b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.deprecated.yaml new file mode 100644 index 00000000..71b266f2 --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.deprecated.yaml @@ -0,0 +1,1703 @@ +openapi: 3.0.0 +info: + title: MWDI_2.0.1+simulator.completeness.dataprovider.deprecated + version: 1.0.0 + +paths: +######################################################################################################################## +# Service Layer - Individual Part +# MWDI_2.0.1+simulator.completeness.dataprovider.deprecated in static reference mode +######################################################################################################################## + + /v1/provide-list-of-connected-devices: + post: + operationId: provideListOfConnectedDevices + summary: 'Provides list of devices that are connected to the controller' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + responses: + '200': + description: 'List of connected devices provided' + content: + application/json: + schema: + type: object + required: + - mount-name-list + properties: + mount-name-list: + type: array + items: + type: string + example: + mount-name-list: + - '305251234' + - '105258888' + headers: + life-cycle-state: + $ref: '#/components/headers/life-cycle-state' + +######################################################################################################################## +# Common Components +######################################################################################################################## +components: + parameters: + user: + name: user + in: header + required: true + schema: + type: string + example: 'User Name' + description: 'User identifier from the system starting the service call' + originator: + name: originator + in: header + required: true + schema: + type: string + minLength: 3 + example: 'Resolver' + description: > + 'Identification for the system consuming the API, as defined in + [/core-model-1-4:control-construct/logical-termination-point={uuid}/layer-protocol=0/http-client-interface-1-0:http-client-interface-pac/http-client-interface-configuration/application-name]' + x-correlator: + name: x-correlator + in: header + required: true + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + description: 'Empty string accepted from external applications.' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses' + trace-indicator: + name: trace-indicator + in: header + required: true + schema: + type: string + pattern: '^([0-9]+)(\.([0-9]+))*$' + description: 'Empty string accepted from external applications.' + example: '1.3.1' + description: 'Sequence of request numbers along the flow' + customer-journey: + name: customer-journey + in: header + required: true + schema: + type: string + example: 'Unknown value' + description: 'Holds information supporting customer’s journey to which the execution applies' + mountName: + name: mountName + in: path + required: true + schema: + type: string + example: '222250001' + description: 'The mountName of the device that is addressed by the request' + uuid: + name: uuid + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within the device' + uuid1: + name: uuid1 + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Another instance identifier that is unique within the device' + localId: + name: localId + in: path + required: true + schema: + type: string + example: 'LP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within its list' + fields: + name: fields + in: query + required: false + schema: + type: string + example: 'node(node-id;netconf-node-topology:connection-status)' + description: 'Query parameter to filter ressources according to RFC8040 fields filter spec' + responses: + responseForErroredServiceRequests: + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + headers: + x-correlator: + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + responseForErroredOamRequests: + description: 'Response in case of errored OaM requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + '429': + description: 'Response in case too many requests need to be executed in parallel or too many requests have been received within a time period. The maximum number of parallel requests is defined in an IntegerProfile with the service name as a prefix and MaxNumberOfParallelRequests as a suffix. Some time period to elapse for throttling incomming requests is defined in an IntegerProfile with the service name as a prefix and ThrottlingPeriod as a suffix' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 429 + maximum: 429 + format: int32 + message: + type: string + enum: + - 'Too many requests' + '460': + description: 'Response in case the mountName provided in the request is not found in the list of connected devices' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 460 + maximum: 460 + format: int32 + message: + type: string + enum: + - 'Not connected. Requested device is currently not in connected state at the controller' + '461': + description: 'Response in case the (parent) topology object provided in the request (body or path) is not found in the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 461 + maximum: 461 + format: int32 + message: + type: string + enum: + - 'Not available. The topology (parent) object is currently not found in the cache.' + '470': + description: 'Response in case the resource specified in the request does not exist within the connected device' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 470 + maximum: 470 + format: int32 + message: + type: string + enum: + - 'Resource not existing. Device informs about addressed resource unknown' + '471': + description: 'Response in case the (child) topology object specified in the request (body or path) does not exist within the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 471 + maximum: 471 + format: int32 + message: + type: string + enum: + - '(Child) topology object not existing. Cache informs about addressed resource unknown.' + '502': + description: 'Response in case the server is acting as a gateway or proxy and received an invalid response from the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 502 + maximum: 502 + format: int32 + message: + type: string + enum: + - 'Bad Gateway' + '530': + description: 'Response in case the referenced resource exists (e.g. device connected and resource exists in internal datatree), but response data is either not available, lost during transmission, incomplete or corrupted' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 530 + maximum: 530 + format: int32 + message: + type: string + enum: + - 'Data invalid. Response data not available, incomplete or corrupted' + '531': + description: 'Response in case the server is acting as a gateway or proxy and was unable to authenticate at the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 531 + maximum: 531 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Authentication at upstream server failed.' + '532': + description: 'Response in case the server is acting as a gateway or proxy and was unable to connect to the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 532 + maximum: 532 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Upstream server not responding.' + '533': + description: 'Response in case the referenced resource for an connected device does not exist at the controller.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 533 + maximum: 533 + format: int32 + message: + type: string + enum: + - 'Resource unknown. The resource for the connected device does not exist at the Controller.' + headers: + x-correlator: + schema: + type: string + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + life-cycle-state: + schema: + type: string + enum: + - 'EXPERIMENTAL' + - 'OPERATIONAL' + - 'DEPRECATED' + - 'OBSOLETE' + - 'UNKNOWN' + - 'NOT_YET_DEFINED' + example: 'EXPERIMENTAL' + schemas: + errorDescription: + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + genericRepresentation: + type: object + required: + - response-value-list + - consequent-action-list + properties: + response-value-list: + type: array + items: + type: object + required: + - field-name + - value + - datatype + properties: + field-name: + type: string + description: > + 'Field name + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/field-name]' + value: + type: string + description: > + 'Field value + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-configuration/value]' + datatype: + type: string + description: > + 'Field datatype + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/datatype]' + consequent-action-list: + type: array + items: + type: object + required: + - label + - request + - display-in-new-browser-window + properties: + label: + type: string + description: > + 'Label that shall be presented on the button + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/label]' + request: + type: string + description: > + 'Request that shall be called, when button gets pressed + from + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-protocol}] + :// + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/ipv-4-address} + or + {/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/domain-name}] + : + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-port}] + [{/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-configuration/consequent-operation-reference}]' + input-value-list: + type: array + items: + type: object + required: + - field-name + properties: + field-name: + type: string + description: > + 'Name of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/name]' + unit: + type: string + description: > + 'Unit of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/unit]' + display-in-new-browser-window: + type: boolean + description: > + 'True in case Request shall be represented in a new browser window + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/display-in-new-browser-window]' + logicalTerminationPoint: + type: object + required: + - uuid + - ltp-direction + - client-ltp + - server-ltp + - layer-protocol + properties: + uuid: + type: string + ltp-direction: + type: string + client-ltp: + type: array + uniqueItems: true + items: + type: string + server-ltp: + type: array + uniqueItems: true + items: + type: string + layer-protocol: + type: array + minItems: 1 + maxItems: 1 + items: + oneOf: + - description: 'operation server' + type: object + required: + - local-id + - layer-protocol-name + - operation-server-interface-1-0:operation-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-server-interface-1-0:operation-server-interface-pac: + type: object + required: + - operation-server-interface-capability + - operation-server-interface-configuration + properties: + operation-server-interface-capability: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-server-interface-configuration: + type: object + required: + - life-cycle-state + properties: + life-cycle-state: + type: string + - description: 'http server' + type: object + required: + - local-id + - layer-protocol-name + - http-server-interface-1-0:http-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-server-interface-1-0:http-server-interface-pac: + type: object + required: + - http-server-interface-capability + properties: + http-server-interface-capability: + type: object + required: + - application-name + - release-number + - data-update-period + properties: + application-name: + type: string + release-number: + type: string + data-update-period: + type: string + - description: 'tcp server' + type: object + required: + - local-id + - layer-protocol-name + - tcp-server-interface-1-0:tcp-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-server-interface-1-0:tcp-server-interface-pac: + type: object + required: + - tcp-server-interface-configuration + properties: + tcp-server-interface-configuration: + type: object + required: + - description + - local-protocol + - local-address + - local-port + properties: + description: + type: string + local-protocol: + type: string + local-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + local-port: + type: integer + - description: 'operation client' + type: object + required: + - local-id + - layer-protocol-name + - operation-client-interface-1-0:operation-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-client-interface-1-0:operation-client-interface-pac: + type: object + required: + - operation-client-interface-configuration + - operation-client-interface-status + properties: + operation-client-interface-configuration: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'elasticsearch client' + type: object + required: + - local-id + - layer-protocol-name + - elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac: + type: object + required: + - elasticsearch-client-interface-configuration + - elasticsearch-client-interface-status + properties: + elasticsearch-client-interface-configuration: + type: object + required: + - index-alias + properties: + index-alias: + type: string + elasticsearch-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'http client' + type: object + required: + - local-id + - layer-protocol-name + - http-client-interface-1-0:http-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-client-interface-1-0:http-client-interface-pac: + type: object + required: + - http-client-interface-configuration + properties: + http-client-interface-configuration: + type: object + required: + - application-name + - release-number + properties: + application-name: + type: string + release-number: + type: string + - description: 'tcp client' + type: object + required: + - local-id + - layer-protocol-name + - tcp-client-interface-1-0:tcp-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-client-interface-1-0:tcp-client-interface-pac: + type: object + required: + - tcp-client-interface-configuration + properties: + tcp-client-interface-configuration: + type: object + required: + - remote-protocol + - remote-address + - remote-port + properties: + remote-protocol: + type: string + remote-address: + type: object + properties: + ip-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + remote-port: + type: integer + forwardingDomain: + type: object + required: + - uuid + - forwarding-construct + properties: + uuid: + type: string + forwarding-construct: + type: array + items: + type: object + required: + - uuid + - name + - fc-port + properties: + uuid: + type: string + name: + type: array + items: + type: object + required: + - value-name + - value + properties: + value-name: + type: string + value: + type: string + fc-port: + type: array + items: + type: object + required: + - local-id + - port-direction + - logical-termination-point + properties: + local-id: + type: string + port-direction: + type: string + logical-termination-point: + type: string + + CONTROL_CONSTRUCT: + type: object + required: + - uuid + - alarms-1-0:alarm-pac + - equipment + - firmware-1-0:firmware-collection + - profile-collection + - logical-termination-point + properties: + uuid: + type: string + alarms-1-0:alarm-pac: + $ref: '#/components/schemas/ALARM_PAC' + equipment: + type: array + items: + $ref: '#/components/schemas/EQUIPMENT' + firmware-1-0:firmware-collection: + $ref: '#/components/schemas/FIRMWARE_COLLECTION' + profile-collection: + $ref: '#/components/schemas/PROFILE_COLLECTION' + forwarding-domain: + type: array + items: + $ref: '#/components/schemas/FORWARDING_DOMAIN' + logical-termination-point: + type: array + items: + $ref: '#/components/schemas/LOGICAL_TERMINATION_POINT' + + ALARM_PAC: + type: object + required: + - alarm-capability + - alarm-configuration + - current-alarms + - alarm-event-records + properties: + alarm-capability: + $ref: '#/components/schemas/ALARM_CAPABILITY' + alarm-configuration: + $ref: '#/components/schemas/ALARM_CONFIGURATION' + current-alarms: + $ref: '#/components/schemas/CURRENT_ALARMS' + alarm-event-records: + $ref: '#/components/schemas/ALARM_EVENT_RECORDS' + ALARM_CAPABILITY: + type: object + ALARM_CONFIGURATION: + type: object + CURRENT_ALARMS: + type: object + ALARM_EVENT_RECORDS: + type: object + + EQUIPMENT: + type: object + required: + - uuid + properties: + uuid: + type: string + connector: + type: array + items: + $ref: '#/components/schemas/CONNECTOR' + contained-holder: + type: array + items: + $ref: '#/components/schemas/CONTAINED_HOLDER' + expected-equipment: + type: array + items: + $ref: '#/components/schemas/EXPECTED_EQUIPMENT' + actual-equipment: + type: object + CONNECTOR: + type: object + required: + - local-id + properties: + local-id: + type: string + CONTAINED_HOLDER: + type: object + required: + - local-id + properties: + local-id: + type: string + EXPECTED_EQUIPMENT: + type: object + required: + - local-id + properties: + local-id: + type: string + ACTUAL_EQUIPMENT: + type: object + + FIRMWARE_COLLECTION: + type: object + required: + - firmware-component-list + properties: + firmware-component-list: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_LIST' + FIRMWARE_COMPONENT_LIST: + type: array + items: + type: object + required: + - local-id + - firmware-component-pac + properties: + local-id: + type: string + firmware-component-pac: + type: object + required: + - firmware-component-capability + - firmware-component-status + properties: + firmware-component-capability: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_CAPABILITY' + firmware-component-status: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_STATUS' + FIRMWARE_COMPONENT_CAPABILITY: + type: object + FIRMWARE_COMPONENT_STATUS: + type: object + + PROFILE_COLLECTION: + type: object + required: + - profile + properties: + profile: + type: array + items: + $ref: '#/components/schemas/PROFILE' + PROFILE: + oneOf: + - description: 'co-channel-profile' + type: object + required: + - uuid + - profile-name + - co-channel-profile-1-0:co-channel-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'co-channel-profile-1-0:PROFILE_NAME_TYPE_CO_CHANNEL_PROFILE' + co-channel-profile-1-0:co-channel-profile-pac: + type: object + required: + - co-channel-profile-capability + - co-channel-profile-configuration + properties: + co-channel-profile-capability: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CAPABILITY' + co-channel-profile-configuration: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CONFIGURATION' + - description: 'policing-profile' + type: object + required: + - uuid + - profile-name + - policing-profile-1-0:policing-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'policing-profile-1-0:PROFILE_NAME_TYPE_POLICING_PROFILE' + policing-profile-1-0:policing-profile-pac: + type: object + required: + - policing-profile-capability + - policing-profile-configuration + properties: + policing-profile-capability: + $ref: '#/components/schemas/POLICING_PROFILE_CAPABILITY' + policing-profile-configuration: + $ref: '#/components/schemas/POLICING_PROFILE_CONFIGURATION' + - description: 'qos-profile' + type: object + required: + - uuid + - profile-name + - qos-profile-1-0:qos-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'qos-profile-1-0:PROFILE_NAME_TYPE_QOS_PROFILE' + qos-profile-1-0:qos-profile-pac: + type: object + required: + - qos-profile-capability + - qos-profile-configuration + properties: + qos-profile-capability: + $ref: '#/components/schemas/QOS_PROFILE_CAPABILITY' + qos-profile-configuration: + $ref: '#/components/schemas/QOS_PROFILE_CONFIGURATION' + - description: 'scheduler-profile' + type: object + required: + - uuid + - profile-name + - scheduler-profile-1-0:scheduler-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'scheduler-profile-1-0:PROFILE_NAME_TYPE_SCHEDULER_PROFILE' + scheduler-profile-1-0:scheduler-profile-pac: + type: object + required: + - scheduler-profile-capability + - scheduler-profile-configuration + properties: + scheduler-profile-capability: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CAPABILITY' + scheduler-profile-configuration: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CONFIGURATION' + - description: 'wred-profile' + type: object + required: + - uuid + - profile-name + - wred-profile-1-0:wred-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-profile-1-0:PROFILE_NAME_TYPE_WRED_PROFILE' + wred-profile-1-0:wred-profile-pac: + type: object + required: + - wred-profile-capability + - wred-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_PROFILE_CONFIGURATION' + - description: 'wred-template-profile' + type: object + required: + - uuid + - profile-name + - wred-template-profile-1-0:wred-template-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-template-profile-1-0:PROFILE_NAME_TYPE_WRED_TEMPLATE_PROFILE' + wred-template-profile-1-0:wred-template-profile-pac: + type: object + required: + - wred-template-profile-capability + - wred-template-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CONFIGURATION' + CO_CHANNEL_PROFILE_CAPABILITY: + type: object + CO_CHANNEL_PROFILE_CONFIGURATION: + type: object + POLICING_PROFILE_CAPABILITY: + type: object + POLICING_PROFILE_CONFIGURATION: + type: object + QOS_PROFILE_CAPABILITY: + type: object + QOS_PROFILE_CONFIGURATION: + type: object + SCHEDULER_PROFILE_CAPABILITY: + type: object + SCHEDULER_PROFILE_CONFIGURATION: + type: object + WRED_PROFILE_CAPABILITY: + type: object + WRED_PROFILE_CONFIGURATION: + type: object + WRED_TEMPLATE_PROFILE_CAPABILITY: + type: object + WRED_TEMPLATE_PROFILE_CONFIGURATION: + type: object + + LOGICAL_TERMINATION_POINT: + type: object + required: + - uuid + - layer-protocol + properties: + uuid: + type: string + ltp-augment-1-0:ltp-augment-pac: + $ref: '#/components/schemas/LTP_AUGMENT_PAC' + embedded-clock: + type: array + items: + $ref: '#/components/schemas/EMBEDDED_CLOCK' + layer-protocol: + type: array + items: + $ref: '#/components/schemas/LAYER_PROTOCOL' + LTP_AUGMENT_PAC: + type: object + EMBEDDED_CLOCK: + type: object + LAYER_PROTOCOL: + oneOf: + - description: 'air-interface' + type: object + required: + - local-id + - layer-protocol-name + - air-interface-2-0:air-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'air-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER' + air-interface-2-0:air-interface-pac: + $ref: '#/components/schemas/AIR_INTERFACE_PAC' + - description: 'ethernet-container' + type: object + required: + - local-id + - layer-protocol-name + - ethernet-container-2-0:ethernet-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ethernet-container-2-0:LAYER_PROTOCOL_NAME_TYPE_ETHERNET_CONTAINER_LAYER' + ethernet-container-2-0:ethernet-container-pac: + $ref: '#/components/schemas/ETHERNET_CONTAINER_PAC' + - description: 'hybrid-mw-structure' + type: object + required: + - local-id + - layer-protocol-name + - hybrid-mw-structure-2-0:hybrid-mw-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'hybrid-mw-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_HYBRID_MW_STRUCTURE_LAYER' + hybrid-mw-structure-2-0:hybrid-mw-structure-pac: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_PAC' + - description: 'mac-interface' + type: object + required: + - local-id + - layer-protocol-name + - mac-interface-1-0:mac-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'mac-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_MAC_LAYER' + mac-interface-1-0:mac-interface-pac: + $ref: '#/components/schemas/MAC_INTERFACE_PAC' + - description: 'pure-ethernet-structure' + type: object + required: + - local-id + - layer-protocol-name + - pure-ethernet-structure-2-0:pure-ethernet-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'pure-ethernet-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_PURE_ETHERNET_STRUCTURE_LAYER' + pure-ethernet-structure-2-0:pure-ethernet-structure-pac: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_PAC' + - description: 'vlan-interface' + type: object + required: + - local-id + - layer-protocol-name + - vlan-interface-1-0:vlan-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'vlan-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_VLAN_LAYER' + vlan-interface-1-0:vlan-interface-pac: + $ref: '#/components/schemas/VLAN_INTERFACE_PAC' + - description: 'wire-interface' + type: object + required: + - local-id + - layer-protocol-name + - wire-interface-2-0:wire-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'wire-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_WIRE_LAYER' + wire-interface-2-0:wire-interface-pac: + $ref: '#/components/schemas/WIRE_INTERFACE_PAC' + - description: 'ip-interface' + type: object + required: + - local-id + - layer-protocol-name + - ip-interface-1-0:ip-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ip-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_IP_LAYER' + ip-interface-1-0:ip-interface-pac: + $ref: '#/components/schemas/IP_INTERFACE_PAC' + - description: 'tdm-container' + type: object + required: + - local-id + - layer-protocol-name + - tdm-container-2-0:tdm-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'tdm-container-2-0:LAYER_PROTOCOL_NAME_TYPE_TDM_CONTAINER_LAYER' + tdm-container-2-0:tdm-container-pac: + $ref: '#/components/schemas/TDM_CONTAINER_PAC' + FORWARDING_DOMAIN: + type: object + required: + - uuid + properties: + uuid: + type: string + fc: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT' + FORWARDING_CONSTRUCT: + type: object + required: + - uuid + properties: + uuid: + type: string + fc-port: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT_PORT' + FORWARDING_CONSTRUCT_PORT: + type: object + required: + - local-id + properties: + local-id: + type: string + LINK: + oneOf: + - description: 'generic' + type: object + required: + - uuid + - layer-protocol-name + - link-direction + - forwarding-domain + - link-port + properties: + uuid: + type: string + layer-protocol-name: + type: string + link-direction: + type: string + enum: + - 'core-model-1-4:FORWARDING_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNDEFINED_OR_UNKNOWN' + forwarding-domain: + type: array + items: + type: string + link-port: + type: array + items: + $ref: '#/components/schemas/LINK_PORT' + - description: 'minimum for rest' + type: object + required: + - uuid + - layer-protocol-name + - end-point-list + properties: + uuid: + type: string + layer-protocol-name: + type: string + end-point-list: + type: array + items: + type: object + required: + - control-construct + - logical-termination-point + - layer-protocol + properties: + control-construct: + type: string + logical-termination-point: + type: string + layer-protocol: + type: string + LINK_PORT: + oneOf: + - description: 'generic' + type: object + required: + - local-id + - link-port-direction + - logical-termination-point + properties: + local-id: + type: string + link-port-direction: + type: string + enum: + - 'core-model-1-4:PORT_DIRECTION_INPUT' + - 'core-model-1-4:PORT_DIRECTION_OUTPUT' + - 'core-model-1-4:PORT_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_UNIDENTIFIED_OR_UNKNOWN' + logical-termination-point: + type: string + + AIR_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-historical-performances + additionalProperties: false + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-current-performance + - air-interface-historical-performances + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-current-performance: + $ref: '#/components/schemas/AIR_INTERFACE_CURRENT_PERFORMANCE' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + AIR_INTERFACE_CAPABILITY: + type: object + AIR_INTERFACE_CONFIGURATION: + type: object + AIR_INTERFACE_STATUS: + type: object + AIR_INTERFACE_CURRENT_PERFORMANCE: + type: object + AIR_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + + ETHERNET_CONTAINER_PAC: + oneOf: + - description: 'cache' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-historical-performances + additionalProperties: false + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-current-performance + - ethernet-container-historical-performances + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-current-performance: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CURRENT_PERFORMANCE' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + ETHERNET_CONTAINER_CAPABILITY: + type: object + ETHERNET_CONTAINER_CONFIGURATION: + type: object + ETHERNET_CONTAINER_STATUS: + type: object + ETHERNET_CONTAINER_CURRENT_PERFORMANCE: + type: object + ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES: + type: object + + HYBRID_MW_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-historical-performances + additionalProperties: false + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-current-performance + - hybrid-mw-structure-historical-performances + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-current-performance: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + HYBRID_MW_STRUCTURE_CAPABILITY: + type: object + HYBRID_MW_STRUCTURE_CONFIGURATION: + type: object + HYBRID_MW_STRUCTURE_STATUS: + type: object + HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE: + type: object + HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + MAC_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + - description: 'live' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + MAC_INTERFACE_CAPABILITY: + type: object + MAC_INTERFACE_CONFIGURATION: + type: object + MAC_INTERFACE_STATUS: + type: object + + PURE_ETHERNET_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-historical-performances + additionalProperties: false + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-current-performance + - pure-ethernet-structure-historical-performances + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-current-performance: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + PURE_ETHERNET_STRUCTURE_CAPABILITY: + type: object + PURE_ETHERNET_STRUCTURE_CONFIGURATION: + type: object + PURE_ETHERNET_STRUCTURE_STATUS: + type: object + PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE: + type: object + PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + VLAN_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + additionalProperties: false + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + - description: 'live' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + VLAN_INTERFACE_CAPABILITY: + type: object + VLAN_INTERFACE_CONFIGURATION: + type: object + + WIRE_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-historical-performances + additionalProperties: false + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-current-performance + - wire-interface-historical-performances + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-current-performance: + $ref: '#/components/schemas/WIRE_INTERFACE_CURRENT_PERFORMANCE' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + WIRE_INTERFACE_CAPABILITY: + type: object + WIRE_INTERFACE_CONFIGURATION: + type: object + WIRE_INTERFACE_STATUS: + type: object + WIRE_INTERFACE_CURRENT_PERFORMANCE: + type: object + WIRE_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + IP_INTERFACE_PAC: + type: object + required: + - ip-interface-capability + - ip-interface-configuration + - ip-interface-status + properties: + ip-interface-capability: + $ref: '#/components/schemas/IP_INTERFACE_CAPABILITY' + ip-interface-configuration: + $ref: '#/components/schemas/IP_INTERFACE_CONFIGURATION' + ip-interface-status: + $ref: '#/components/schemas/IP_INTERFACE_STATUS' + IP_INTERFACE_CAPABILITY: + type: object + IP_INTERFACE_CONFIGURATION: + type: object + IP_INTERFACE_STATUS: + type: object + + TDM_CONTAINER_PAC: + type: object + required: + - tdm-container-capability + - tdm-container-configuration + - tdm-container-status + properties: + tdm-container-capability: + $ref: '#/components/schemas/TDM_CONTAINER_CAPABILITY' + tdm-container-configuration: + $ref: '#/components/schemas/TDM_CONTAINER_CONFIGURATION' + tdm-container-status: + $ref: '#/components/schemas/TDM_CONTAINER_STATUS' + TDM_CONTAINER_CAPABILITY: + type: object + TDM_CONTAINER_CONFIGURATION: + type: object + TDM_CONTAINER_STATUS: + type: object + + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: operation-key + basicAuth: + type: http + scheme: basic From d8c5e7c0c58addefc1b63b709ba6442bf110a865 Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 13:09:20 +0200 Subject: [PATCH 4/6] schemas --- Z_WIP/services.yaml | 185 ++++++++++++++++++ .../schema/MicroWaveDeviceInventory+json.json | 54 ++++- .../schema/MicroWaveDeviceInventory+yaml.yaml | 39 +++- ...entory+simu.completeness.dataprovider.yaml | 41 ++-- 4 files changed, 295 insertions(+), 24 deletions(-) create mode 100644 Z_WIP/services.yaml diff --git a/Z_WIP/services.yaml b/Z_WIP/services.yaml new file mode 100644 index 00000000..b90a6918 --- /dev/null +++ b/Z_WIP/services.yaml @@ -0,0 +1,185 @@ + /v1/provide-device-status-metadata: + post: + operationId: provideDeviceStatusMetadata + summary: 'Provides metadata status of devices from deviceMetadataList' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - description: 'Mount-name list filter' + type: object + properties: + mount-name-list: + type: array + items: + type: string + example: + mount-name-list: + - '305251234' + - '105258888' + responses: + '200': + description: 'Device status metadata provided' + content: + application/json: + schema: + type: object + required: + - device-status-metadata + properties: + device-status-metadata: + type: array + items: + required: + - mount-name + - connection-status + - changed-to-disconnected-time + - added-to-device-list-time + - last-complete-control-construct-update-time-attempt + - last-successful-complete-control-construct-update-time + - last-control-construct-notification-update-time + - number-of-partial-updates-since-last-complete-update + - schema-cache-directory + - device-type + - vendor + properties: + mount-name: + type: string + connection-status: + type: string + enum: + - 'connected' + - 'disconnected' + changed-to-disconnected-time: + type: string + added-to-device-list-time: + type: string + last-complete-control-construct-update-time-attempt: + type: string + last-successful-complete-control-construct-update-time: + type: string + last-control-construct-notification-update-time: + type: string + number-of-partial-updates-since-last-complete-update: + type: integer + schema-cache-directory: + type: string + device-type: + type: string + vendor: + type: string + example: + device-status-metadata: + - mount-name: '305251234' + connection-status: 'connected' + changed-to-disconnected-time: '' + added-to-device-list-time: '2024-10-10T14:00:00+01:00' + last-complete-control-construct-update-time-attempt: '2024-10-10T14:00:05+01:00' + last-successful-complete-control-construct-update-time: '2024-10-10T14:00:05+01:00' + last-control-construct-notification-update-time: '2024-10-10T15:17:00+01:00' + number-of-partial-updates-since-last-complete-update: 7 + schema-cache-directory: 'hua' + device-type: 'RTN950' + vendor: 'Huawei' + headers: + life-cycle-state: + $ref: '#/components/headers/life-cycle-state' + + /v1/provide-cache-quality-statistics: + post: + operationId: provideCacheQualityStatistics + summary: 'Provides quality statistics for the cache' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + group-by: + type: string + enum: + - 'device-type' + responses: + '200': + description: 'Cache quality statistics provided' + content: + application/json: + schema: + type: object + required: + - cache-quality-statistics + properties: + cache-quality-statistics: + type: array + items: + required: + - device-type + - attribute-mismatches + - attribute-class-mismatches + - weighted-score + properties: + device-type: + type: string + attribute-mismatches: + type: integer + attribute-class-mismatches: + type: integer + weighted-score: + type: integer + example: + cache-quality-statistics: + - device-type: 'AGS20' + attribute-mismatches: 18 + attribute-class-mismatches: 2 + weighted-score: 31 + - device-type: 'MLTN' + attribute-mismatches: 5 + attribute-class-mismatches: 3 + weighted-score: 19 + headers: + life-cycle-state: + $ref: '#/components/headers/life-cycle-state' + + /v1/provide-list-of-cached-devices: + post: + operationId: provideListOfCachedDevices + summary: 'Provides list of devices for which MWDI has a ControlConstruct in its cache' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + responses: + '200': + description: 'List of cached devices provided' + content: + application/json: + schema: + type: object + required: + - mount-name-list + properties: + mount-name-list: + type: array + items: + type: object + properties: + mount-name: + type: string + example: + mount-name-list: + - '305251234' + - '105258888' + headers: + life-cycle-state: + $ref: '#/components/headers/life-cycle-state' \ No newline at end of file diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json index ec762e01..981dbd5f 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+json.json @@ -308,10 +308,13 @@ "connection-status", "changed-to-disconnected-time", "added-to-device-list-time", - "last-complete-control-construct-update-time", + "last-complete-control-construct-update-time-attempt", + "last-successful-complete-control-construct-update-time", "last-control-construct-notification-update-time", "number-of-partial-updates-since-last-complete-update", - "schema-cache-directory" + "schema-cache-directory", + "device-type", + "vendor" ], "properties": { "mount-name": { @@ -321,8 +324,7 @@ "type": "string", "enum": [ "connected", - "connecting", - "unable-to-connect" + "disconnected" ] }, "changed-to-disconnected-time": { @@ -331,7 +333,10 @@ "added-to-device-list-time": { "type": "string" }, - "last-complete-control-construct-update-time": { + "last-complete-control-construct-update-time-attempt": { + "type": "string" + }, + "last-successful-complete-control-construct-update-time": { "type": "string" }, "last-control-construct-notification-update-time": { @@ -342,6 +347,12 @@ }, "schema-cache-directory": { "type": "string" + }, + "device-type": { + "type": "string" + }, + "vendor": { + "type": "string" } } } @@ -361,5 +372,38 @@ } } } + }, + "/v1/provide-cache-quality-statistics": { + "type": "object", + "required": [ + "cache-quality-statistics" + ], + "properties": { + "cache-quality-statistics": { + "type": "array", + "items": { + "required": [ + "device-type", + "attribute-mismatches", + "attribute-class-mismatches", + "weighted-score" + ], + "properties": { + "device-type": { + "type": "string" + }, + "attribute-mismatches": { + "type": "integer" + }, + "attribute-class-mismatches": { + "type": "integer" + }, + "weighted-score": { + "type": "integer" + } + } + } + } + } } } \ No newline at end of file diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml index 836130d5..44cc685f 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/schema/MicroWaveDeviceInventory+yaml.yaml @@ -214,10 +214,13 @@ - connection-status - changed-to-disconnected-time - added-to-device-list-time - - last-complete-control-construct-update-time + - last-complete-control-construct-update-time-attempt + - last-successful-complete-control-construct-update-time - last-control-construct-notification-update-time - number-of-partial-updates-since-last-complete-update - schema-cache-directory + - device-type + - vendor properties: mount-name: type: string @@ -225,13 +228,14 @@ type: string enum: - 'connected' - - 'connecting' - - 'unable-to-connect' + - 'disconnected' changed-to-disconnected-time: type: string added-to-device-list-time: type: string - last-complete-control-construct-update-time: + last-complete-control-construct-update-time-attempt: + type: string + last-successful-complete-control-construct-update-time: type: string last-control-construct-notification-update-time: type: string @@ -239,6 +243,10 @@ type: integer schema-cache-directory: type: string + device-type: + type: string + vendor: + type: string /v1/provide-list-of-cached-devices: type: object @@ -249,3 +257,26 @@ type: array items: type: string + + /v1/provide-cache-quality-statistics: + type: object + required: + - cache-quality-statistics + properties: + cache-quality-statistics: + type: array + items: + required: + - device-type + - attribute-mismatches + - attribute-class-mismatches + - weighted-score + properties: + device-type: + type: string + attribute-mismatches: + type: integer + attribute-class-mismatches: + type: integer + weighted-score: + type: integer \ No newline at end of file diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.yaml b/testing/2_functional/completeness/v2.0.1/Dataprovider/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.yaml index ee59b6ca..9d528774 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.yaml +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/simulators/MicroWaveDeviceInventory+simu.completeness.dataprovider.yaml @@ -420,7 +420,7 @@ paths: type: string responses: '200': - description: 'Table with device status metadata provided' + description: 'Device status metadata provided' content: application/json: schema: @@ -436,10 +436,13 @@ paths: - connection-status - changed-to-disconnected-time - added-to-device-list-time - - last-complete-control-construct-update-time + - last-complete-control-construct-update-time-attempt + - last-successful-complete-control-construct-update-time - last-control-construct-notification-update-time - number-of-partial-updates-since-last-complete-update - schema-cache-directory + - device-type + - vendor properties: mount-name: type: string @@ -447,13 +450,14 @@ paths: type: string enum: - 'connected' - - 'connecting' - - 'unable-to-connect' + - 'disconnected' changed-to-disconnected-time: type: string added-to-device-list-time: type: string - last-complete-control-construct-update-time: + last-complete-control-construct-update-time-attempt: + type: string + last-successful-complete-control-construct-update-time: type: string last-control-construct-notification-update-time: type: string @@ -461,16 +465,23 @@ paths: type: integer schema-cache-directory: type: string - example: - device-status-metadata: - - mount-name: '305251234' - connection-status: 'connected' - changed-to-disconnected-time: '' - added-to-device-list-time: '2024-10-10T14:00:00+01:00' - last-complete-control-construct-update-time: '2024-10-10T14:00:05+01:00' - last-control-construct-notification-update-time: '2024-10-10T15:17:00+01:00' - number-of-partial-updates-since-last-complete-update: 7 - schema-cache-directory: 'hua' + device-type: + type: string + vendor: + type: string + example: + device-status-metadata: + - mount-name: '305251234' + connection-status: 'connected' + changed-to-disconnected-time: '' + added-to-device-list-time: '2024-10-10T14:00:00+01:00' + last-complete-control-construct-update-time-attempt: '2024-10-10T14:00:05+01:00' + last-successful-complete-control-construct-update-time: '2024-10-10T14:00:05+01:00' + last-control-construct-notification-update-time: '2024-10-10T15:17:00+01:00' + number-of-partial-updates-since-last-complete-update: 7 + schema-cache-directory: 'hua' + device-type: 'RTN950' + vendor: 'Huawei' headers: life-cycle-state: $ref: '#/components/headers/life-cycle-state' From 17caa6af77d82d12dec515836158c0f60124154f Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 13:17:52 +0200 Subject: [PATCH 5/6] added testcase collection for deprecated service --- ....completeness.dataprovider.deprecated.json | 687 ++++++++++++++++++ 1 file changed, 687 insertions(+) create mode 100644 testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+testcase.completeness.dataprovider.deprecated.json diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+testcase.completeness.dataprovider.deprecated.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+testcase.completeness.dataprovider.deprecated.json new file mode 100644 index 00000000..42b3f35f --- /dev/null +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/_deprecated-services tests/mwdi+testcase.completeness.dataprovider.deprecated.json @@ -0,0 +1,687 @@ +{ + "info": { + "name": "mwdi+testcase.completeness.deprecated", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "UserInput", + "item": [ + { + "name": "for loading user input", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "console.clear();\r", + "logger.struc(\"==========================================================================================\");\r", + "logger.struc(\"===== mwdi+testcase.completeness.dataprovider.deprecated ==========================\");\r", + "logger.struc(\"==========================================================================================\");\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Loading Input Data from File\r", + "****************************************************************************************/\r", + "var inputFromFile;\r", + "try {\r", + " inputFromFile = data\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Input data could not be loaded.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Environmental Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.environment.clear();\r", + "\r", + " let mode;\r", + " mode = inputFromFile.mode;\r", + " // Mode to be applied while running this testcase collection \r", + " // \"analysis\" -> human does detailed analysis of response bodies etc.\r", + " // \"testing\" -> automated approval based on binary result\r", + " // \"debugging\" -> support for programming the testcase collection\r", + "\r", + " let logLevel;\r", + " switch(mode) {\r", + " case \"debugging\":\r", + " logLevel = \"debug\";\r", + " break;\r", + " case \"analysis\":\r", + " logLevel = \"log\";\r", + " break;\r", + " case \"testing\":\r", + " logLevel = \"error\";\r", + " break;\r", + " default:\r", + " logLevel = \"debug\";\r", + " };\r", + " // Level of detail of the logging; find more info in pre-request script on the collection's level\r", + "\r", + " let serverList = [];\r", + " serverList = inputFromFile.serverList;\r", + " // list of addresses of applications, controllers etc.\r", + " // serverName : key attribute for identifying the servers\r", + " // dummyUri : http address that shall be addressed by bare processing Requests\r", + " // server : part of the URI that is comprised from protocol, IP address and TCP port\r", + " // pathToControlConstruct : part of the URI that is identical for all Requests that are addressing into the device's data tree\r", + " // authorizationCode : authentication that has to be sent in case of BasicAuth protection (e.g. OpenDaylight NBI)\r", + " // operationKey : ApiKey that has to be sent in case of addressing a MW SDN application (e.g. MicroWaveDeviceInventory)\r", + " // userName : user header to be sent in case of addressing a MW SDN application\r", + " // originator : originator header to be sent in case of addressing a MW SDN application\r", + " // xCorrelator : x-correlator header to be sent in case of addressing a MW SDN application\r", + " // traceIndicator : trace-indicator header to be sent in case of addressing a MW SDN application\r", + " // customerJourney : customer-journey header to be sent in case of addressing a MW SDN application\r", + "\r", + " let collectionInputList = [];\r", + " collectionInputList = inputFromFile.collectionInputList;\r", + " // list of inputs to individual test case collections\r", + " // serverToBeApplied : server that shall be addressed in the respective request/test case\r", + " // mountName : mountName of the device that is to be validated\r", + " // uuid of the object that is to be validated\r", + " // localId of the object that is to be validated\r", + " // linkId : linkName of the link that is to be validated\r", + " // linkPort : id of the linkPort that is to be validated\r", + "\r", + " pm.environment.set(\"mode\", mode);\r", + " pm.environment.set(\"logLevel\", logLevel);\r", + " pm.environment.set(\"serverList\", serverList);\r", + " pm.environment.set(\"collectionInputList\", collectionInputList);\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Environment variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Collection Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.collectionVariables.clear()\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Collection variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Local Variables and Preparing the Request\r", + "****************************************************************************************/\r", + "try {\r", + " let uri;\r", + " let dummyServerInfo;\r", + " dummyServerInfo = ExtractServerInformation(inputFromFile.serverList, \"dummy\");\r", + " uri = dummyServerInfo.dummyUri;\r", + "\r", + " pm.variables.clear();\r", + "\r", + " pm.variables.set(\"uri\", uri);\r", + "\r", + " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", + " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Local variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Functions\r", + "****************************************************************************************/\r", + "function ExtractServerInformation(serverList, searchedServerName) {\r", + " try {\r", + " for(let i=0; i log -> info -> warn -> error -> struc -> none", + "// It creates \"logger\" global variable which can be used anywhere in nested collection scripts", + "", + "const logLevels = [\"debug\", \"log\", \"info\", \"warn\", \"error\", \"struc\", \"none\"];", + "", + "const shouldLog = (level) => {", + " return logLevels.indexOf(level) >= logLevels.indexOf(pm.environment.get(\"logLevel\"));", + "};", + "", + "logger = {", + " debug: (message, ...optionalParams) => {", + " shouldLog(\"debug\") && console.log(message, ...optionalParams);", + " },", + " log: (message, ...optionalParams) => {", + " shouldLog(\"log\") && console.log(message, ...optionalParams);", + " },", + " info: (message, ...optionalParams) => {", + " shouldLog(\"info\") && console.log(message, ...optionalParams);", + " },", + " warn: (message, ...optionalParams) => {", + " shouldLog(\"warn\") && console.log(message, ...optionalParams);", + " },", + " error: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.error(message, ...optionalParams);", + " },", + " struc: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.log(message, ...optionalParams);", + " },", + "};", + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file From fb9a2051ec2be36630e382ba3f00d1b164d3054b Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:25:22 +0200 Subject: [PATCH 6/6] update testcases --- ...di+testcase.completeness.dataprovider.json | 1045 +++++++++++------ ...entory+simu.completeness.dataprovider.yaml | 168 ++- 2 files changed, 797 insertions(+), 416 deletions(-) diff --git a/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+testcase.completeness.dataprovider.json b/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+testcase.completeness.dataprovider.json index 7f4e22d7..fc237c59 100644 --- a/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+testcase.completeness.dataprovider.json +++ b/testing/2_functional/completeness/v2.0.1/Dataprovider/mwdi+testcase.completeness.dataprovider.json @@ -203,7 +203,7 @@ "name": "dataprovider.Completeness", "item": [ { - "name": "/v1/provide-list-of-connected-devices", + "name": "/v1/provide-list-of-device-interfaces", "event": [ { "listen": "test", @@ -257,19 +257,35 @@ "var reference;\r", "try {\r", " reference = {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"mount-name-list\"\r", - " ],\r", - " \"properties\": {\r", - " \"mount-name-list\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", - " \"type\": \"string\"\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"logical-termination-point-list\"\r", + " ],\r", + " \"properties\": {\r", + " \"logical-termination-point-list\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"uuid\",\r", + " \"local-id\",\r", + " \"layer-protocol-name\"\r", + " ],\r", + " \"properties\": {\r", + " \"uuid\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"local-id\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"layer-protocol-name\": {\r", + " \"type\": \"string\"\r", " }\r", + " }\r", " }\r", - " }\r", - " };\r", + " }\r", + " }\r", + " };\r", "\r", "} catch (error) {\r", " logger.error(\"! reference could not be defined.\")\r", @@ -279,13 +295,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-list-of-connected-devices could be executed\", function () {\r", + " pm.test(\"/v1/provide-list-of-device-interfaces could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-list-of-connected-devices could be executed\")\r", + " logger.log(\" - ok: /v1/provide-list-of-device-interfaces could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-list-of-connected-devices provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-list-of-device-interfaces provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -350,7 +366,7 @@ "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/provide-list-of-connected-devices ================================================\");\r", + "logger.struc(\"\\n===== /v1/provide-list-of-device-interfaces ================================================\");\r", "\r", "\r", "/****************************************************************************************\r", @@ -365,6 +381,8 @@ " collectionInputList = pm.environment.get(\"collectionInputList\");\r", " collectionInfo = ExtractCollectionInput(collectionInputList, \"completeness.dataprovider\");\r", "\r", + " mountName = collectionInfo.mountName;\r", + "\r", " let serverList;\r", " serverList = pm.environment.get(\"serverList\");\r", " let serverToBeApplied;\r", @@ -387,7 +405,7 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/provide-list-of-connected-devices\";\r", + " servicePath = \"/v1/provide-list-of-device-interfaces\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", @@ -395,7 +413,10 @@ " let uri = server + servicePath;\r", "\r", " let requestBody;\r", - " requestBody = '{}';\r", + " requestBody = ''\r", + " + '{ '\r", + " + '\"mount-name\": \"' + mountName + '\"'\r", + " + ' }';\r", "\r", "\r", " pm.variables.clear();\r", @@ -467,7 +488,7 @@ "header": [], "body": { "mode": "raw", - "raw": "", + "raw": "{{requestBody}}", "options": { "raw": { "language": "json" @@ -484,7 +505,7 @@ "response": [] }, { - "name": "/v1/provide-list-of-device-interfaces", + "name": "/v1/provide-list-of-actual-device-equipment", "event": [ { "listen": "test", @@ -540,26 +561,29 @@ " reference = {\r", " \"type\": \"object\",\r", " \"required\": [\r", - " \"logical-termination-point-list\"\r", + " \"top-level-equipment\",\r", + " \"actual-equipment-list\"\r", " ],\r", " \"properties\": {\r", - " \"logical-termination-point-list\": {\r", + " \"top-level-equipment\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"string\"\r", + " }\r", + " },\r", + " \"actual-equipment-list\": {\r", " \"type\": \"array\",\r", " \"items\": {\r", " \"type\": \"object\",\r", " \"required\": [\r", " \"uuid\",\r", - " \"local-id\",\r", - " \"layer-protocol-name\"\r", + " \"equipment-type-name\"\r", " ],\r", " \"properties\": {\r", " \"uuid\": {\r", " \"type\": \"string\"\r", " },\r", - " \"local-id\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"layer-protocol-name\": {\r", + " \"equipment-type-name\": {\r", " \"type\": \"string\"\r", " }\r", " }\r", @@ -576,13 +600,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-list-of-device-interfaces could be executed\", function () {\r", + " pm.test(\"/v1/provide-list-of-actual-device-equipment could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-list-of-device-interfaces could be executed\")\r", + " logger.log(\" - ok: /v1/provide-list-of-actual-device-equipment could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-list-of-device-interfaces provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-list-of-actual-device-equipment provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -647,7 +671,7 @@ "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/provide-list-of-device-interfaces ================================================\");\r", + "logger.struc(\"\\n===== /v1/provide-list-of-actual-device-equipment ================================================\");\r", "\r", "\r", "/****************************************************************************************\r", @@ -686,7 +710,7 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/provide-list-of-device-interfaces\";\r", + " servicePath = \"/v1/provide-list-of-actual-device-equipment\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", @@ -786,7 +810,7 @@ "response": [] }, { - "name": "/v1/provide-list-of-actual-device-equipment", + "name": "/v1/provide-list-of-parallel-links", "event": [ { "listen": "test", @@ -840,38 +864,19 @@ "var reference;\r", "try {\r", " reference = {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"top-level-equipment\",\r", - " \"actual-equipment-list\"\r", - " ],\r", - " \"properties\": {\r", - " \"top-level-equipment\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", - " \"type\": \"string\"\r", - " }\r", - " },\r", - " \"actual-equipment-list\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"uuid\",\r", - " \"equipment-type-name\"\r", - " ],\r", - " \"properties\": {\r", - " \"uuid\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"equipment-type-name\": {\r", - " \"type\": \"string\"\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"parallel-link-list\"\r", + " ],\r", + " \"properties\": {\r", + " \"parallel-link-list\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"string\"\r", + " }\r", " }\r", - " }\r", " }\r", - " }\r", - " }\r", - " };\r", + " };\r", "\r", "} catch (error) {\r", " logger.error(\"! reference could not be defined.\")\r", @@ -881,13 +886,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-list-of-actual-device-equipment could be executed\", function () {\r", + " pm.test(\"/v1/provide-list-of-parallel-links could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-list-of-actual-device-equipment could be executed\")\r", + " logger.log(\" - ok: /v1/provide-list-of-parallel-links could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-list-of-actual-device-equipment provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-list-of-parallel-links provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -952,7 +957,7 @@ "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/provide-list-of-actual-device-equipment ================================================\");\r", + "logger.struc(\"\\n===== /v1/provide-list-of-parallel-links ================================================\");\r", "\r", "\r", "/****************************************************************************************\r", @@ -961,14 +966,13 @@ "var mountName = \"\";\r", "var serverInfo = {};\r", "var dummyServerInfo = {};\r", + "var linkId = \"\";\r", "try {\r", " let collectionInfo;\r", " let collectionInputList;\r", " collectionInputList = pm.environment.get(\"collectionInputList\");\r", " collectionInfo = ExtractCollectionInput(collectionInputList, \"completeness.dataprovider\");\r", "\r", - " mountName = collectionInfo.mountName;\r", - "\r", " let serverList;\r", " serverList = pm.environment.get(\"serverList\");\r", " let serverToBeApplied;\r", @@ -976,6 +980,9 @@ " serverInfo = ExtractServerInformation(serverList, serverToBeApplied);\r", " dummyServerInfo = ExtractServerInformation(serverList, \"dummy\")\r", "\r", + " linkId = collectionInfo.linkId;\r", + "\r", + "\r", "} catch (error) {\r", " logger.error(\"! Input data could not be loaded.\")\r", "}\r", @@ -991,7 +998,7 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/provide-list-of-actual-device-equipment\";\r", + " servicePath = \"/v1/provide-list-of-parallel-links\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", @@ -1001,10 +1008,12 @@ " let requestBody;\r", " requestBody = ''\r", " + '{ '\r", - " + '\"mount-name\": \"' + mountName + '\"'\r", + " + '\"link-id\": \"' + linkId + '\"'\r", " + ' }';\r", "\r", "\r", + "\r", + "\r", " pm.variables.clear();\r", "\r", " pm.variables.set(\"uri\", uri);\r", @@ -1091,7 +1100,7 @@ "response": [] }, { - "name": "/v1/provide-device-status-metadata", + "name": "/v1/provide-list-of-links", "event": [ { "listen": "test", @@ -1145,55 +1154,19 @@ "var reference;\r", "try {\r", " reference = {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"device-status-metadata\"\r", - " ],\r", - " \"properties\": {\r", - " \"device-status-metadata\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"mount-name\",\r", - " \"connection-status\",\r", - " \"changed-to-disconnected-time\",\r", - " \"added-to-device-list-time\",\r", - " \"last-complete-control-construct-update-time\",\r", - " \"last-control-construct-notification-update-time\",\r", - " \"number-of-partial-updates-since-last-complete-update\",\r", - " \"schema-cache-directory\"\r", - " ],\r", - " \"properties\": {\r", - " \"mount-name\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"connection-status\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"changed-to-disconnected-time\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"added-to-device-list-time\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"last-complete-control-construct-update-time\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"last-control-construct-notification-update-time\": {\r", - " \"type\": \"string\"\r", - " },\r", - " \"number-of-partial-updates-since-last-complete-update\": {\r", - " \"type\": \"integer\"\r", - " },\r", - " \"schema-cache-directory\": {\r", - " \"type\": \"string\"\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"link-list\"\r", + " ],\r", + " \"properties\": {\r", + " \"link-list\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"string\"\r", + " }\r", " }\r", - " }\r", " }\r", - " }\r", - " }\r", - " };\r", + " };\r", "\r", "} catch (error) {\r", " logger.error(\"! reference could not be defined.\")\r", @@ -1203,13 +1176,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-device-status-metadata could be executed\", function () {\r", + " pm.test(\"/v1/provide-list-of-links could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-device-status-metadata could be executed\")\r", + " logger.log(\" - ok: /v1/provide-list-of-links could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-device-status-metadata provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-list-of-links provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -1274,7 +1247,7 @@ "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/provide-device-status-metadata ================================================\");\r", + "logger.struc(\"\\n===== /v1/provide-list-of-links ================================================\");\r", "\r", "\r", "/****************************************************************************************\r", @@ -1289,8 +1262,6 @@ " collectionInputList = pm.environment.get(\"collectionInputList\");\r", " collectionInfo = ExtractCollectionInput(collectionInputList, \"completeness.dataprovider\");\r", "\r", - " mountName = collectionInfo.mountName;\r", - "\r", " let serverList;\r", " serverList = pm.environment.get(\"serverList\");\r", " let serverToBeApplied;\r", @@ -1313,7 +1284,7 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/provide-device-status-metadata\";\r", + " servicePath = \"/v1/provide-list-of-links\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", @@ -1321,12 +1292,7 @@ " let uri = server + servicePath;\r", "\r", " let requestBody;\r", - " requestBody = ''\r", - " + '{ '\r", - " + '\"mount-name-list\": [' \r", - " '\"' + mountName + '\"'\r", - " + ']'\r", - " + ' }';\r", + " requestBody = '{}';\r", "\r", "\r", " pm.variables.clear();\r", @@ -1398,7 +1364,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{{requestBody}}", + "raw": "", "options": { "raw": { "language": "json" @@ -1415,7 +1381,7 @@ "response": [] }, { - "name": "/v1/provide-list-of-parallel-links", + "name": "/v1/provide-list-of-link-ports", "event": [ { "listen": "test", @@ -1469,20 +1435,31 @@ "var reference;\r", "try {\r", " reference = {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"parallel-link-list\"\r", - " ],\r", - " \"properties\": {\r", - " \"parallel-link-list\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", - " \"type\": \"string\"\r", - " }\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"link-port-list\"\r", + " ],\r", + " \"properties\": {\r", + " \"link-port-list\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"object\",\r", + " \"properties\": {\r", + " \"link-uuid\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"link-ports\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"string\"\r", + " }\r", " }\r", + " }\r", " }\r", - " };\r", - "\r", + " }\r", + " }\r", + " };\r", + "\r", "} catch (error) {\r", " logger.error(\"! reference could not be defined.\")\r", "}\r", @@ -1491,13 +1468,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-list-of-parallel-links could be executed\", function () {\r", + " pm.test(\"/v1/provide-list-of-link-ports could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-list-of-parallel-links could be executed\")\r", + " logger.log(\" - ok: /v1/provide-list-of-link-ports could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-list-of-parallel-links provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-list-of-link-ports provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -1529,7 +1506,6 @@ " logger.error(\"! validation could not be completely executed.\")\r", "}\r", "\r", - "\r", "/****************************************************************************************\r", "* Setting Collection Variables\r", "****************************************************************************************/\r", @@ -1562,7 +1538,7 @@ "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/provide-list-of-parallel-links ================================================\");\r", + "logger.struc(\"\\n===== /v1/provide-list-of-link-ports ================================================\");\r", "\r", "\r", "/****************************************************************************************\r", @@ -1585,9 +1561,6 @@ " serverInfo = ExtractServerInformation(serverList, serverToBeApplied);\r", " dummyServerInfo = ExtractServerInformation(serverList, \"dummy\")\r", "\r", - " linkId = collectionInfo.linkId;\r", - "\r", - "\r", "} catch (error) {\r", " logger.error(\"! Input data could not be loaded.\")\r", "}\r", @@ -1603,7 +1576,7 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/provide-list-of-parallel-links\";\r", + " servicePath = \"/v1/provide-list-of-link-ports\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", @@ -1611,12 +1584,7 @@ " let uri = server + servicePath;\r", "\r", " let requestBody;\r", - " requestBody = ''\r", - " + '{ '\r", - " + '\"link-id\": \"' + linkId + '\"'\r", - " + ' }';\r", - "\r", - "\r", + " requestBody = '{}';\r", "\r", "\r", " pm.variables.clear();\r", @@ -1688,7 +1656,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{{requestBody}}", + "raw": "", "options": { "raw": { "language": "json" @@ -1705,7 +1673,7 @@ "response": [] }, { - "name": "/v1/provide-list-of-links", + "name": "/v1/provide-data-of-all-links", "event": [ { "listen": "test", @@ -1759,19 +1727,127 @@ "var reference;\r", "try {\r", " reference = {\r", - " \"type\": \"object\",\r", - " \"required\": [\r", - " \"link-list\"\r", - " ],\r", - " \"properties\": {\r", - " \"link-list\": {\r", - " \"type\": \"array\",\r", - " \"items\": {\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"core-model-1-4:link\"\r", + " ],\r", + " \"properties\": {\r", + " \"core-model-1-4:link\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"oneOf\": [\r", + " {\r", + " \"description\": \"generic\",\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"uuid\",\r", + " \"layer-protocol-name\",\r", + " \"link-direction\",\r", + " \"forwarding-domain\",\r", + " \"link-port\"\r", + " ],\r", + " \"properties\": {\r", + " \"uuid\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"layer-protocol-name\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"link-direction\": {\r", + " \"type\": \"string\",\r", + " \"enum\": [\r", + " \"core-model-1-4:FORWARDING_DIRECTION_BIDIRECTIONAL\",\r", + " \"core-model-1-4:FORWARDING_DIRECTION_UNIDIRECTIONAL\",\r", + " \"core-model-1-4:FORWARDING_DIRECTION_OMNIDIRECTIONAL\",\r", + " \"core-model-1-4:FORWARDING_DIRECTION_UNDEFINED_OR_UNKNOWN\"\r", + " ]\r", + " },\r", + " \"forwarding-domain\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", " \"type\": \"string\"\r", + " }\r", + " },\r", + " \"link-port\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"oneOf\": [\r", + " {\r", + " \"description\": \"generic\",\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"local-id\",\r", + " \"link-port-direction\",\r", + " \"logical-termination-point\"\r", + " ],\r", + " \"properties\": {\r", + " \"local-id\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"link-port-direction\": {\r", + " \"type\": \"string\",\r", + " \"enum\": [\r", + " \"core-model-1-4:PORT_DIRECTION_INPUT\",\r", + " \"core-model-1-4:PORT_DIRECTION_OUTPUT\",\r", + " \"core-model-1-4:PORT_DIRECTION_BIDIRECTIONAL\",\r", + " \"core-model-1-4:PORT_DIRECTION_OMNIDIRECTIONAL\",\r", + " \"core-model-1-4:PORT_DIRECTION_UNIDENTIFIED_OR_UNKNOWN\"\r", + " ]\r", + " },\r", + " \"logical-termination-point\": {\r", + " \"type\": \"string\"\r", + " }\r", + " }\r", + " }\r", + " ]\r", + " }\r", + " }\r", + " }\r", + " },\r", + " {\r", + " \"description\": \"minimum for rest\",\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"uuid\",\r", + " \"layer-protocol-name\",\r", + " \"end-point-list\"\r", + " ],\r", + " \"properties\": {\r", + " \"uuid\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"layer-protocol-name\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"end-point-list\": {\r", + " \"type\": \"array\",\r", + " \"items\": {\r", + " \"type\": \"object\",\r", + " \"required\": [\r", + " \"control-construct\",\r", + " \"logical-termination-point\",\r", + " \"layer-protocol\"\r", + " ],\r", + " \"properties\": {\r", + " \"control-construct\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"logical-termination-point\": {\r", + " \"type\": \"string\"\r", + " },\r", + " \"layer-protocol\": {\r", + " \"type\": \"string\"\r", + " }\r", + " }\r", + " }\r", " }\r", + " }\r", " }\r", + " ]\r", " }\r", - " };\r", + " }\r", + " }\r", + " };\r", "\r", "} catch (error) {\r", " logger.error(\"! reference could not be defined.\")\r", @@ -1781,13 +1857,13 @@ " if (uri != dummyUri) {\r", " logger.log(\"Analysis:\");\r", "\r", - " pm.test(\"/v1/provide-list-of-links could be executed\", function () {\r", + " pm.test(\"/v1/provide-data-of-all-links could be executed\", function () {\r", " pm.expect(responseCode).to.equal(200)\r", " });\r", " if (responseCode == 200) {\r", - " logger.log(\" - ok: /v1/provide-list-of-links could be executed\")\r", + " logger.log(\" - ok: /v1/provide-data-of-all-links could be executed\")\r", " } else {\r", - " logger.log(\" - FAIL: /v1/provide-list-of-links provided \" + responseCode + \" instead of 200\")\r", + " logger.log(\" - FAIL: /v1/provide-data-of-all-links provided \" + responseCode + \" instead of 200\")\r", " }\r", "\r", " if (Object.keys(responseObject).length != 0) {\r", @@ -1819,6 +1895,329 @@ " logger.error(\"! validation could not be completely executed.\")\r", "}\r", "\r", + "/****************************************************************************************\r", + "* Setting Collection Variables\r", + "****************************************************************************************/\r", + "\r", + "/****************************************************************************************\r", + "* Functions\r", + "****************************************************************************************/\r", + "function ExtractServerInformation(serverList, searchedServerName) {\r", + " try {\r", + " for (let i = 0; i < serverList.length; i++) {\r", + " if (serverList[i].serverName == searchedServerName) {\r", + " return serverList[i]\r", + " }\r", + " }\r", + " } catch (error) {\r", + " logger.error(\"! serverList not found or faulty\");\r", + " return {}\r", + " }\r", + " logger.warn(\"Server could not be found in serverList.\");\r", + " return {}\r", + "}\r", + "\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "logger.struc(\"\\n===== /v1/provide-data-of-all-links ================================================\");\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Loading Input Data\r", + "****************************************************************************************/\r", + "var mountName = \"\";\r", + "var serverInfo = {};\r", + "var dummyServerInfo = {};\r", + "var linkId = \"\";\r", + "try {\r", + " let collectionInfo;\r", + " let collectionInputList;\r", + " collectionInputList = pm.environment.get(\"collectionInputList\");\r", + " collectionInfo = ExtractCollectionInput(collectionInputList, \"completeness.dataprovider\");\r", + "\r", + " let serverList;\r", + " serverList = pm.environment.get(\"serverList\");\r", + " let serverToBeApplied;\r", + " serverToBeApplied = collectionInfo.serverToBeApplied;\r", + " serverInfo = ExtractServerInformation(serverList, serverToBeApplied);\r", + " dummyServerInfo = ExtractServerInformation(serverList, \"dummy\")\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Input data could not be loaded.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Processing\r", + "****************************************************************************************/\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Local Variables and Preparing the Request\r", + "****************************************************************************************/\r", + "try {\r", + " let servicePath;\r", + " servicePath = \"/v1/provide-data-of-all-links\";\r", + "\r", + " let server;\r", + " server = serverInfo.server;\r", + "\r", + " let uri = server + servicePath;\r", + "\r", + " let requestBody;\r", + " requestBody = '{}';\r", + "\r", + "\r", + " pm.variables.clear();\r", + "\r", + " pm.variables.set(\"uri\", uri);\r", + " pm.variables.set(\"requestBody\", requestBody);\r", + " \r", + " pm.request.headers.upsert({ key: \"Authorization\", value: serverInfo.authorizationCode });\r", + " pm.request.headers.upsert({ key: \"operation-key\", value: serverInfo.operationKey });\r", + " pm.request.headers.upsert({ key: \"user\", value: serverInfo.userName });\r", + " pm.request.headers.upsert({ key: \"originator\", value: serverInfo.originator });\r", + " pm.request.headers.upsert({ key: \"x-correlator\", value: serverInfo.xCorrelator });\r", + " pm.request.headers.upsert({ key: \"trace-indicator\", value: serverInfo.traceIndicator });\r", + " pm.request.headers.upsert({ key: \"customer-journey\", value: serverInfo.customerJourney });\r", + "\r", + " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", + " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Local variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Functions\r", + "****************************************************************************************/\r", + "function ExtractServerInformation(serverList, searchedServerName) {\r", + " try {\r", + " for(let i=0; i