From 280a868950cacdbba9c17cc9f959c68943c470f2 Mon Sep 17 00:00:00 2001 From: "Olivia.Zhan" Date: Sat, 13 Jul 2019 13:52:28 +0800 Subject: [PATCH] Add csit case for NSD Content Issue-ID: INT-1015 Signed-off-by: Olivia.Zhan Change-Id: Ie57a58719632ff4be134cde6bea6de277e8cde6e --- plans/vfc-nfvo-catalog/sanity-check/testplan.txt | 3 +- tests/vfc/nfvo-catalog/NSDContent.robot | 106 +++++++++++++++++++++++ tests/vfc/nfvo-catalog/files/ns_vgw.csar | Bin 0 -> 3047 bytes tests/vfc/nfvo-catalog/files/vgw.csar | Bin 23182 -> 24116 bytes 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 tests/vfc/nfvo-catalog/NSDContent.robot create mode 100644 tests/vfc/nfvo-catalog/files/ns_vgw.csar diff --git a/plans/vfc-nfvo-catalog/sanity-check/testplan.txt b/plans/vfc-nfvo-catalog/sanity-check/testplan.txt index 49b8e6c4..56c96d38 100644 --- a/plans/vfc-nfvo-catalog/sanity-check/testplan.txt +++ b/plans/vfc-nfvo-catalog/sanity-check/testplan.txt @@ -7,6 +7,7 @@ vfc/nfvo-catalog/VNFPackages.robot vfc/nfvo-catalog/IndividualVNFPackage.robot vfc/nfvo-catalog/VNFPackageContent.robot vfc/nfvo-catalog/PNFDescriptors.robot +vfc/nfvo-catalog/IndividualPnfDescriptor.robot vfc/nfvo-catalog/NSDescriptors.robot vfc/nfvo-catalog/IndividualNSDescriptor.robot -vfc/nfvo-catalog/IndividualPnfDescriptor.robot +vfc/nfvo-catalog/NSDContent.robot diff --git a/tests/vfc/nfvo-catalog/NSDContent.robot b/tests/vfc/nfvo-catalog/NSDContent.robot new file mode 100644 index 00000000..cea69b18 --- /dev/null +++ b/tests/vfc/nfvo-catalog/NSDContent.robot @@ -0,0 +1,106 @@ +*** Settings *** +Resource ../../common.robot +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json +Library HttpLibrary.HTTP + +*** Variables *** +${catalog_port} 8806 +${vnf_packages_url} /api/vnfpkgm/v1/vnf_packages +${ns_descriptors_url} /api/nsd/v1/ns_descriptors + +#json files +${request_json} ${SCRIPTS}/../tests/vfc/nfvo-catalog/jsons/CreateNsdInfoRequest.json +${request_csar} ${SCRIPTS}/../tests/vfc/nfvo-catalog/files/ns_vgw.csar + +#global variables +${nsdId} + +*** Test Cases *** +Create new Network Service Descriptor Resource for pre-condition + Log Create new Network Service Descriptor Resource for pre-condition + ${json_value}= json_from_file ${request_json} + ${json_string}= string_from_json ${json_value} + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + Set Request Body ${json_string} + ${resp}= Post Request web_session ${ns_descriptors_url} ${json_string} + Should Be Equal As Strings 201 ${resp.status_code} + ${response_json} json.loads ${resp.content} + Should Be Equal As Strings CREATED ${response_json['nsdOnboardingState']} + ${nsdId}= Convert To String ${response_json['id']} + Set Global Variable ${nsdId} + +Check Precondition + Log Check Precondition + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Get Request web_session ${vnf_packages_url} + Should Be Equal As Strings 200 ${resp.status_code} + ${response_json} json.loads ${resp.content} + Should Be Equal As Strings ONBOARDED ${response_json[0]['onboardingState']} + +Upload NSD Content as Zip file + Log Upload NSD Content as Zip file + [Documentation] The objective is to test the upload of an NSD Content in Zip format + Create Session web_session http://${CATALOG_IP}:${catalog_port} + ${headers} Create Dictionary Accept=application/json + &{fileParts}= Create Dictionary + Create Multi Part ${fileParts} file ${request_csar} + Log ${fileParts} + ${resp}= Put Request web_session ${ns_descriptors_url}/${nsdId}/nsd_content files=${fileParts} headers=${headers} + Log ${resp.status_code} + Should Be Equal As Strings 204 ${resp.status_code} + Log Received 204 Accepted as expected + +GET NSD Content + Log GET NSD Content + [Documentation] The objective is to test the retrieval of the NSD Content + ${headers} Create Dictionary Content-Type=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Get Request web_session ${ns_descriptors_url}/${nsdId}/nsd_content + Should Be Equal As Strings 200 ${resp.status_code} + +Check Postcondition + Log Check Postcondition + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Get Request web_session ${ns_descriptors_url}/${nsdId} + Should Be Equal As Strings 200 ${resp.status_code} + ${response_json} json.loads ${resp.content} + Should Be Equal As Strings ONBOARDED ${response_json['nsdOnboardingState']} + +POST NSD Content - Method not implemented + Log POST NSD Content - Method not implemented + [Documentation] The objective is to test that POST method is not allowed to create new Network Service Descriptor content + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Post Request web_session ${ns_descriptors_url}/${nsdId}/nsd_content + Should Be Equal As Strings 405 ${resp.status_code} + +PATCH NSD Content - Method not implemented + Log PATCH NSD Content - Method not implemented + [Documentation] The objective is to test that PATCH method is not allowed to update a Network Service Descriptor content + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Patch Request web_session ${ns_descriptors_url}/${nsdId}/nsd_content + Should Be Equal As Strings 405 ${resp.status_code} + +DELETE NSD Content - Method not implemented + Log DELETE NSD Content - Method not implemented + [Documentation] The objective is to test that DELETE method is not allowed to delete a Network Service Descriptor content + ${headers} Create Dictionary Content-Type=application/json Accept=application/json + Create Session web_session http://${CATALOG_IP}:${catalog_port} headers=${headers} + ${resp}= Delete Request web_session ${ns_descriptors_url}/${nsdId}/nsd_content + Should Be Equal As Strings 405 ${resp.status_code} + +*** Keywords *** +Create Multi Part + [Arguments] ${addTo} ${partName} ${filePath} ${contentType}=${None} ${content}=${None} + ${fileData}= Run Keyword If '''${content}''' != '''${None}''' Set Variable ${content} + ... ELSE Get Binary File ${filePath} + ${fileDir} ${fileName}= Split Path ${filePath} + ${partData}= Create List ${fileName} ${fileData} ${contentType} + Set To Dictionary ${addTo} ${partName}=${partData} \ No newline at end of file diff --git a/tests/vfc/nfvo-catalog/files/ns_vgw.csar b/tests/vfc/nfvo-catalog/files/ns_vgw.csar new file mode 100644 index 0000000000000000000000000000000000000000..0eb32e72ae29fa0e7c56d9740f8eea685de4e468 GIT binary patch literal 3047 zcmaKu2{=@3AI8U)B_`ST5Xzn`Ly1&mH)NlZ!Pv4JBSyx)M`G-vWXQf|NklXlYeryod7Qpv|8~#QA$HTvGbfgOP zf;-tmZQ0lq-dlBOwq`ZqW+bK$oBRruQnqs~sB5)WH&3>uC4^u!Fkb`*13@;`KE6o{bQVz zjpx4T!Qq5@B}R*XojfgYuianWZ zwXL!x#dw;mvE}v34ivM~F!HH3pF3#z8MXS%#<}4QT8SwyZ-ammyG}1x)#>*i;FTPw z_d*MLtf{o)hZ|GMvjzneY@&B25bf=#*+a2Aeus}ar&LNio46~1Zn`Yd=g+5^B#8If zlS`(h=Zy~zb4=cOHq$>fsC}!GGqGNY7HO(ea-{T7v$j~T7x6KopWH{Gaeg$FgI48>yyJaOyQ^0Sef%*3_4mI5)D%4==fIdys2 zwJdkR+%YqWJ|N8s4_)Gklo133B$sb8_1Y<3sy+%r|F!naPOz50)POn&Wre85Vi!FH z4LXBTU{()OE(?vMXr zcT=O60NKx-MalMuD=Ef=^%Sa554~G;+2p4M)uRs#O(e`cI_;yY5}850_NXhHLT%*? z1W)y*NSF`>TUDHZ4F8;*OdoxuN42W>esM^^Wt>KXfl<2ooUaOo@bVtP^2#Lg1Z$78 z1;nqr>0Y>!afM!KA@VK-Ho`2_T+Ol9(#4xCb-uTO!T*S#d;UWvP=RMn6GX#RoKHNb zt>*RUl|KzSAy2w4A@8&MNO&Z16kK-A#%!LM=3!gSZgb$u!fc47IXt2I(Y{X35Z@yc z-!U$cckUb_z~N&l*BOnJ9$7FJcXSxqyab6W_s-b!(U*Cn;L0{rr)n?3if7&O7$!RJ zxj_&wQ_;&VpPn{mCfG&M=_b26PPWC%Gk(T?dUMSvey+)cz~bE9OmG9YxMZ=b8Y)7| zea3ex?xXc9*Hb5$5jdeUprioy`ILRwxdKdf^6ouMRrfZ4VjMh&beOynT22ip+&BeZ zs9WE{URoX^zdl}z5Tt!4Eh!q0v-f3~tbD<@z%#~s<1ABd!={;s3p-_Z;{=+6t7Dqq zpa-21*uRz9CK){>mQu{DYQVN2zxP4a*uTuCHnU4)LH^;>@)GxIsau8}*KtSX&p(S}U!qx+JY{;e%_n~7$?tW{fsr3>r`r!KQ zCtx-5^$-zUrNO0>Sm4W~K~%qI*<@Ag0A*Wg(IQVyamz->lwx0DkdgCB{$Tt|Yu-OU zCR#1nnTY4!G!@NwFI4nKwpDptJlxsB2r)6+ef_)0~v#wpzHuV!OMtw6j zNy&4F$&2FY+t~swqi!2j^-=1USy+oFsq5R19Xv&)s#&ImaeI!17F3tt|G{-aO;kp5 z$@T36Tc|z~U6$liMev2f^!emQdG{(%Tb_)T;5R(r5{kmq)^&oiR-I?YyRL}mORt1l ziDK98xxv0(#@@9;1?X%~yT=`As06zTN7B5qE%ANIEwhg0()Vuw>ctAWQfjD~)ZrXW z%PZ-7c0EGLZf3$xV(k$YT=SuSWw){PhxA%GXebq;>G*4Q?Sw?{#lnyVL=1)j76meL9-;) zlE?DhL_S!w>2<2ocAK0OXUFN+FW?zU$ycr6g?^Ux>xHWfN>0=dW%FC0vRpZA`}Bzc z2=@uA+Mrfd28h^)jK!6K&$J@#XXn!g2~kTlVNPm|)R^Q3vO(HUO=pdmQIfpDXC%@j zjd&&|yF6V6iAdQ!i_#Mo#W*^rVmV()G(3(vqF@v8OVGaX zDk}J}xp^kodChPXWp>|R4#!TI%6?LLN4epf_y}C*GgjH@hwIB1Rz@UQt?avzCTKhgSG!77I{)+nkF9lNYuEy&sMFoi^R|1^89_JW1Qz{0oF~ B9~S@s literal 0 HcmV?d00001 diff --git a/tests/vfc/nfvo-catalog/files/vgw.csar b/tests/vfc/nfvo-catalog/files/vgw.csar index 79e0d2012d09784fef48c89ae3ef6e0240d0f08c..927812a7635c919a8cdf280adeb7eab846635967 100644 GIT binary patch literal 24116 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 H2lww^dkU52 literal 23182 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 W6)W&0VFm_1AbbKmS9nSYhz9@^r6-sG -- 2.16.6