From 7d9a8742d4bf5f0d98003b6836b09f6ff17b0331 Mon Sep 17 00:00:00 2001 From: MD IRSHAD SHEIKH Date: Sat, 22 May 2021 22:45:54 +0530 Subject: [PATCH] Added CSIT for Macroflow with HELM Issue-ID: SO-3585 Signed-off-by: MD IRSHAD SHEIKH Change-Id: I3eb3ec1005f19fc109e28b1e709bdc0d32f1180a --- .../controller/MultiCloudController.java | 32 ++-- .../src/main/resources/application.yaml | 2 +- .../macro_helm_zipped_sdc_csar.tar.gz | Bin 0 -> 88510 bytes plans/so/macroflow/config/env | 1 + .../cnf-adapter/onapheat/override.yaml | 56 +++++++ .../openstack-adapter/onapheat/override.yaml | 4 +- plans/so/macroflow/docker-compose.local.yml | 3 + plans/so/macroflow/docker-compose.yml | 42 ++++- plans/so/macroflow/testplan.txt | 1 + tests/so/sanity-check/data/MacroflowWithHelm.json | 183 +++++++++++++++++++++ .../data/serviceBasicVfCnfWithHelm.json | 170 +++++++++++++++++++ tests/so/sanity-check/macroflow.robot | 30 +++- tests/so/sanity-check/macroflow_helm.robot | 45 +++++ 13 files changed, 537 insertions(+), 32 deletions(-) create mode 100755 plans/so/macroflow/config/distribution-test-zip/macro_helm_zipped_sdc_csar.tar.gz create mode 100644 plans/so/macroflow/config/override-files/cnf-adapter/onapheat/override.yaml create mode 100644 tests/so/sanity-check/data/MacroflowWithHelm.json create mode 100644 tests/so/sanity-check/data/serviceBasicVfCnfWithHelm.json create mode 100644 tests/so/sanity-check/macroflow_helm.robot diff --git a/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/java/org/onap/so/multicloudsimulator/controller/MultiCloudController.java b/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/java/org/onap/so/multicloudsimulator/controller/MultiCloudController.java index c99e246e..8361f240 100644 --- a/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/java/org/onap/so/multicloudsimulator/controller/MultiCloudController.java +++ b/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/java/org/onap/so/multicloudsimulator/controller/MultiCloudController.java @@ -30,14 +30,13 @@ import org.onap.so.multicloudsimulator.beans.MulticloudRequest; import org.springframework.http.ResponseEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.GetMapping; import java.io.IOException; import java.io.InputStream; @@ -45,22 +44,22 @@ import java.io.InputStream; import static org.onap.so.multicloudsimulator.utils.Constants.BASE_URL; @RestController -@RequestMapping(path = BASE_URL) public class MultiCloudController { public static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override"; private static final Logger LOGGER = LoggerFactory.getLogger(MultiCloudController.class); - @PostMapping(value = "/v1/instance") + @PostMapping("/v1/instance") public ResponseEntity createInstance(@RequestBody MulticloudInstanceRequest req) { - System.out.println("MultiCloud createInstance "); + LOGGER.info("MultiCloud createInstance "); final InstanceResponse InstanceResponse = new InstanceResponse(); - LOGGER.info("Calling createInstance"); - return ResponseEntity.ok(InstanceResponse); + LOGGER.info("Calling v1 instance method"); + return ResponseEntity.ok(req); } - @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload", produces = { MediaType.APPLICATION_JSON }) + @GetMapping(value = BASE_URL + "/{cloud-owner}/{cloud-region-id}/infra_workload", + produces = { MediaType.APPLICATION_JSON }) public ResponseEntity getInstance(@PathVariable("cloud-owner") String cloudOwner, @PathVariable("cloud-region-id") String cloudRegionId, @RequestParam(value = "depth", required = false, defaultValue = "0") Integer depth, @@ -76,8 +75,9 @@ public class MultiCloudController { return ResponseEntity.ok(output); } - @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload", consumes = { MediaType.APPLICATION_JSON, - MediaType.APPLICATION_XML }, produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @PostMapping(value = BASE_URL + "/{cloud-owner}/{cloud-region-id}/infra_workload", + consumes = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }, + produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public ResponseEntity postCreateInstance(@RequestBody final MulticloudCreateResponse inputRequest, @PathVariable("cloud-owner") final String cloudOwner, @PathVariable("cloud-region-id") final String cloudRegionId, @@ -94,8 +94,8 @@ public class MultiCloudController { return ResponseEntity.status(201).body(inputRequest); } - @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", produces = { - MediaType.APPLICATION_JSON }) + @GetMapping(value = BASE_URL + "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", + produces = {MediaType.APPLICATION_JSON }) public ResponseEntity getInstanceName(@PathVariable("cloud-owner") final String cloudOwner, @PathVariable("cloud-region-id") final String cloudRegionId, @PathVariable("workload-id") final String workloadId, @RequestParam(value = "depth", required = false, defaultValue = "0") final Integer depth, @@ -112,9 +112,9 @@ public class MultiCloudController { return ResponseEntity.ok(output); } - @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", consumes = { - MediaType.APPLICATION_JSON, - MediaType.APPLICATION_XML }, produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @PostMapping(value = BASE_URL + "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", + consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }, + produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public ResponseEntity postCreateInstanceName(@RequestBody final MulticloudRequest inputRequest, @PathVariable("cloud-owner") final String cloudOwner, @PathVariable("workload-id") String workloadId, @PathVariable("cloud-region-id") final String cloudRegionId, diff --git a/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/resources/application.yaml b/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/resources/application.yaml index 393d1b7b..c24b9dc1 100644 --- a/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/resources/application.yaml +++ b/plans/so/integration-etsi-testing/so-simulators/multicloud-simulator/src/main/resources/application.yaml @@ -1,5 +1,5 @@ server: - port: 9996 + port: 9015 tomcat: max-threads: 4 ssl-enable: false diff --git a/plans/so/macroflow/config/distribution-test-zip/macro_helm_zipped_sdc_csar.tar.gz b/plans/so/macroflow/config/distribution-test-zip/macro_helm_zipped_sdc_csar.tar.gz new file mode 100755 index 0000000000000000000000000000000000000000..c06f4907293eb6c8449760aeb50b3b07035e8499 GIT binary patch literal 88510 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μ9(vN2p6>`5GH{klj%Bo` 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�V`pZUEU4&o6x*J^A|zR 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

Ed~z zx_tE))e78{txegjt(vYTNB*zS)^D#ax^I>OUlsgcp(^i+x5T5xwQ-WNcm#t`9*Sz#5;%3GK)O8h-VqgNE#Kn$%9}8HP zT??M;9a>w2^+Z0%*0)xmZY$`W4blT+Sx6P7QCG`9QNrvCF&tI`fS`YA^0aftn9%3K zs~b{im!@Zc9&~Y}#IY=U>=JBgatP&M;!g5d zfD%6dU=WDyqJ`GQMr*hrTxrfGe9d%j?9j;XkGQex$mw8IyXWZBjD3A6;u501^%amgQIFmqt z87h{bwQh>@)eI0kGGZScI>#};dz1#)+9G29PpZfrU z=BUj9OaHuDGZ|8I-FZ2IN|UKc`+$d)4>RL%a#VZ3T#+#I&HKbiy(3SmArZhKx z89n=X&v*)oQjX&85zv_&4+$?IuBIZBoC|1E*bE#JM%9)fQJdcvf%drTXiv#~WCSc$ zcH{x63(U*tTb}Fo8@!N>zDM$d_y_Lj5Tm!pNMfwvQ-k_;{{Gl}q9l8reXfg+ z&fNtKah$zU_U{Id1HFrgBMJA>p;qg%Pf`9C^P?xT8xPna=oq?R-8vo zzXq0V?o0`$KF)u-YnAFn2gq-nA$&;##|aQ6;p=-7SzQxaH|nnto_rf0G?}vb_3kfG zWcuit-1DtgpP<$ae*KH}%$H`ryQv9{L}H? i*&slz_W-xqdGx!^Ez18sqNujeSY)8BO27sN;C}!b+<)-^ literal 0 HcmV?d00001 diff --git a/plans/so/macroflow/config/env b/plans/so/macroflow/config/env index f5453e95..86a88274 100644 --- a/plans/so/macroflow/config/env +++ b/plans/so/macroflow/config/env @@ -4,4 +4,5 @@ TAG=1.8.0-STAGING-latest TIME_OUT_DEFAULT_VALUE_SEC=1200 PROJECT_NAME=macroflowintegrationtesting DEFAULT_NETWORK_NAME=macroflowintegrationtesting_default +CNF_ADAPTER_IMAGE_VERSION=1.8.2 MARIADB_VERSION=10.5.8 diff --git a/plans/so/macroflow/config/override-files/cnf-adapter/onapheat/override.yaml b/plans/so/macroflow/config/override-files/cnf-adapter/onapheat/override.yaml new file mode 100644 index 00000000..27425833 --- /dev/null +++ b/plans/so/macroflow/config/override-files/cnf-adapter/onapheat/override.yaml @@ -0,0 +1,56 @@ +# Copyright 2020 Huawei Technologies Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +logging: + path: logs + +server: + port: 8090 + tomcat: + max-threads: 50 + +mso: + auth: BEA8637716A7EB617DF472BA6552D22F68C1CB17B0D094D77DDA562F4ADAAC4457CAB848E1A4 + msoKey: 07a7159d3bf51a0e53be7a8f89699be7 + logPath: ./logs/cnf + msb-ip: multicloud-k8s + msb-port: 9015 + msb-scheme: http +spring: + security: + usercredentials: + - + username: apihBpmn + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPMN-Client + - + username: sdncaBpmn + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPMN-Client + - + username: poBpmn + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPMN-Client + - + username: wmaBpmn + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: BPMN-Client + - + username: sniro + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: SNIRO-Client + - + username: mso_admin + password: '$2a$10$Fh9ffgPw2vnmsghsRD3ZauBL1aKXebigbq3BB1RPWtE62UDILsjke' + role: ACTUATOR diff --git a/plans/so/macroflow/config/override-files/openstack-adapter/onapheat/override.yaml b/plans/so/macroflow/config/override-files/openstack-adapter/onapheat/override.yaml index 7e2afa85..1b5e9966 100644 --- a/plans/so/macroflow/config/override-files/openstack-adapter/onapheat/override.yaml +++ b/plans/so/macroflow/config/override-files/openstack-adapter/onapheat/override.yaml @@ -93,8 +93,8 @@ mso: auth: BEA8637716A7EB617DF472BA6552D22F68C1CB17B0D094D77DDA562F4ADAAC4457CAB848E1A4 msoKey: 07a7159d3bf51a0e53be7a8f89699be7 logPath: ./logs/openstack - msb-ip: multicloud-simulator - msb-port: 9996 + msb-ip: multicloud-k8s + msb-port: 9015 msb-scheme: http workflow: endpoint: http://bpmn-infra:8081/sobpmnengine diff --git a/plans/so/macroflow/docker-compose.local.yml b/plans/so/macroflow/docker-compose.local.yml index a796b379..34a5419b 100644 --- a/plans/so/macroflow/docker-compose.local.yml +++ b/plans/so/macroflow/docker-compose.local.yml @@ -15,6 +15,9 @@ services: ################################################################################ openstack-adapter: image: onap/so/openstack-adapter:${TAG} +################################################################################ + so-cnf-adapter: + image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/so-cnf-adapter:${TAG} ################################################################################ sdc-controller: image: onap/so/sdc-controller:${TAG} diff --git a/plans/so/macroflow/docker-compose.yml b/plans/so/macroflow/docker-compose.yml index 5b6bfb23..1bd3fb11 100644 --- a/plans/so/macroflow/docker-compose.yml +++ b/plans/so/macroflow/docker-compose.yml @@ -135,6 +135,36 @@ services: user: root entrypoint: /bin/sh -c '/app/wait-for.sh -q -t "300" request-db-adapter:8083 -- "/app/start-app.sh"' ################################################################################ + so-cnf-adapter: + image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/so-cnf-adapter:${CNF_ADAPTER_IMAGE_VERSION} + ports: + - "8090:8090" + volumes: + - ${TEST_LAB_DIR}/volumes/so/ca-certificates/onapheat:/app/ca-certificates + - ${CONFIG_DIR_PATH_MACRO}/override-files/cnf-adapter/onapheat:/app/config + environment: + - APP=so-cnf-adapter + - JVM_ARGS=-Xms64m -Xmx512m + - DB_HOST=mariadb + - DB_PORT=3306 + - DB_USERNAME=so_user + - DB_PASSWORD=so_User123 + - DB_ADMIN_USERNAME=so_admin + - DB_ADMIN_PASSWORD=so_Admin123 + hostname: + so-cnf-adapter.so.testlab.onap.org + depends_on: + - mariadb + - catalog-db-adapter + - request-db-adapter + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" + user: root + entrypoint: /bin/sh -c '/app/wait-for.sh -q -t "300" request-db-adapter:8083 -- "/app/start-app.sh"' +#################################################################################### sdc-controller: image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/sdc-controller:${TAG} ports: @@ -164,7 +194,7 @@ services: max-size: "30m" max-file: "5" user: root - entrypoint: /bin/sh -c 'mkdir -p /distribution-test-zip/unzipped && tar -xvzf /distribution-test-zip/macro_zipped_sdc_csar.tar.gz -C /distribution-test-zip/unzipped && chmod 777 -R /distribution-test-zip/ && /app/wait-for.sh -q -t "300" request-db-adapter:8083 -- "/app/start-app.sh"' + entrypoint: /bin/sh -c 'mkdir -p /distribution-test-zip/unzipped && tar -xvzf /distribution-test-zip/macro_zipped_sdc_csar.tar.gz -C /distribution-test-zip/unzipped && tar -xvzf /distribution-test-zip/macro_helm_zipped_sdc_csar.tar.gz -C /distribution-test-zip/unzipped && chmod 777 -R /distribution-test-zip/ && /app/wait-for.sh -q -t "300" request-db-adapter:8083 -- "/app/start-app.sh"' ################################################################################ bpmn-infra: image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/bpmn-infra:${TAG} @@ -294,17 +324,17 @@ services: max-size: "30m" max-file: "5" ################################################################################# - multicloud-simulator: + multicloud-k8s: image: simulators/multicloud-simulator:latest ports: - - "9996:9996" + - "9015:9015" environment: - - APP=MULTICLOUD-SIMULATOR + - APP=multicloud-k8s - JVM_ARGS=-Xms64m -Xmx512m hostname: - multicloud-simulator + multicloud-k8s depends_on: - - mariadb + - mariadb logging: driver: "json-file" options: diff --git a/plans/so/macroflow/testplan.txt b/plans/so/macroflow/testplan.txt index 00a8d8b7..3e4ff102 100644 --- a/plans/so/macroflow/testplan.txt +++ b/plans/so/macroflow/testplan.txt @@ -1,3 +1,4 @@ # Test suites are relative paths under [integration/csit.git]/tests/. # Place the suites in run order. so/sanity-check/macroflow.robot +so/sanity-check/macroflow_helm.robot diff --git a/tests/so/sanity-check/data/MacroflowWithHelm.json b/tests/so/sanity-check/data/MacroflowWithHelm.json new file mode 100644 index 00000000..bea4ad95 --- /dev/null +++ b/tests/so/sanity-check/data/MacroflowWithHelm.json @@ -0,0 +1,183 @@ +{ + "requestDetails": { + "modelInfo": { + "modelInvariantId": "12f78123-0fe3-4691-8621-152b1aeb740b", + "modelType": "service", + "modelName": "vfw_k8s_demo_CNF_e2e_native_2", + "modelVersion": "1.0", + "modelVersionId": "623d4032-89ec-4f14-a655-31943fb002fa", + "modelUuid": "623d4032-89ec-4f14-a655-31943fb002fa", + "modelInvariantUuid": "12f78123-0fe3-4691-8621-152b1aeb740b" + }, + "requestInfo": { + "productFamilyId": "1234", + "source": "VID", + "instanceName": "INSTANCE_vfw_k8s_demo_CNF_e2e_native_2", + "suppressRollback": false, + "requestorId": "demo" + }, + "subscriberInfo": { + "globalSubscriberId": "DemoCustomer" + }, + "cloudConfiguration": { + "tenantId": "693c7729b2364a26a3ca602e6f66187d", + "cloudOwner": "CloudOwner", + "lcpCloudRegionId": "EtsiCloudRegion" + }, + "requestParameters": { + "subscriptionServiceType": "vCPE", + "userParams": [ + { + "Homing_Solution": "none" + }, + { + "service": { + "instanceParams": [], + "instanceName": "INSTANCE_vfw_k8s_demo_CNF_e2e_native_2", + "resources": { + "vnfs": [ + { + "modelInfo": { + "modelName": "VF_vfw_k8s_demo_CNF_e2e_native_2", + "modelVersionId": "9b6c36da-e4bb-4d58-b22e-5f0198a1813e", + "modelInvariantUuid": "d65aeed1-1980-44dd-bdeb-ee78ea5ab842", + "modelVersion": "1.0", + "modelCustomizationId": "28aeaced-a71c-48ce-a3ae-58ab9eb4dd9f", + "modelInstanceName": "VF_vfw_k8s_demo_CNF_e2e_native_2" + }, + "cloudConfiguration": { + "tenantId": "693c7729b2364a26a3ca602e6f66187d", + "cloudOwner": "CloudOwner", + "lcpCloudRegionId": "EtsiCloudRegion" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-Demonstration" + }, + "productFamilyId": "1234", + "instanceName": "VF_vfw_k8s_demo_CNF_e2e_native_2", + "instanceParams": [ + { + "sdnc_model_name": "vFW_CNF_CDS", + "sdnc_model_version": "7.1.0", + "sdnc_artifact_name": "vnf" + } + ], + "vfModules": [ + { + "modelInfo": { + "modelName": "VfVfwK8sDemoCnfE2eNative2..helm_vpkg..module-2", + "modelVersionId": "b3e97d36-8e10-411f-a682-8551844e04ea", + "modelInvariantUuid": "f753b92d-2a70-488d-b53a-300435d6a455", + "modelVersion": "1", + "modelCustomizationId": "30ce403e-99cc-43c2-8782-15499895d157" + }, + "instanceName": "vf_vfw_k8s_demo_cnf_e2e_native_20..VfVfwK8sDemoCnfE2eNative2..helm_vpkg..module-2", + "instanceParams": [ + { + "k8s-rb-profile-name": "vfw-cnf-cds-base-profile", + "k8s-rb-profile-namespace": "vfirewall", + "sdnc_model_name": "vFW_CNF_CDS", + "sdnc_model_version": "7.1.0", + "vf_module_label": "helm_vpkg" + } + ] + }, + { + "modelInfo": { + "modelName": "VfVfwK8sDemoCnfE2eNative2..helm_base_template..module-4", + "modelVersionId": "bb944b26-d331-4e01-9e1a-47355b162bc8", + "modelInvariantUuid": "12ac8bc6-330a-4071-a34b-65aab99539ec", + "modelVersion": "1", + "modelCustomizationId": "95db0408-b8df-44fb-8199-37394c1085d8" + }, + "instanceName": "vf_vfw_k8s_demo_cnf_e2e_native_20..VfVfwK8sDemoCnfE2eNative2..helm_base_template..module-4", + "instanceParams": [ + { + "k8s-rb-profile-name": "vfw-cnf-cds-base-profile", + "k8s-rb-profile-namespace": "vfirewall", + "sdnc_model_name": "vFW_CNF_CDS", + "sdnc_model_version": "7.1.0", + "vf_module_label": "helm_base_template" + } + ] + }, + { + "modelInfo": { + "modelName": "VfVfwK8sDemoCnfE2eNative2..helm_vfw..module-3", + "modelVersionId": "79cfcc33-1456-438b-b362-a2a8587a80f8", + "modelInvariantUuid": "e46c710f-ad4b-49a5-bbae-4e0f16fc4a98", + "modelVersion": "1", + "modelCustomizationId": "b87081da-c8e0-4c20-aefa-2da23c998502" + }, + "instanceName": "vf_vfw_k8s_demo_cnf_e2e_native_20..VfVfwK8sDemoCnfE2eNative2..helm_vfw..module-3", + "instanceParams": [ + { + "k8s-rb-profile-name": "vfw-cnf-cds-base-profile", + "k8s-rb-profile-namespace": "vfirewall", + "sdnc_model_name": "vFW_CNF_CDS", + "sdnc_model_version": "7.1.0", + "vf_module_label": "helm_vfw" + } + ] + }, + { + "modelInfo": { + "modelName": "VfVfwK8sDemoCnfE2eNative2..helm_vsn..module-1", + "modelVersionId": "efa8355e-d011-4f90-b17a-3542d2cf8321", + "modelInvariantUuid": "502a434b-f718-4332-a8d2-2e689f8ceb22", + "modelVersion": "1", + "modelCustomizationId": "0dc8a6d0-fe90-4f77-bf2a-4dcd4b82f548" + }, + "instanceName": "vf_vfw_k8s_demo_cnf_e2e_native_20..VfVfwK8sDemoCnfE2eNative2..helm_vsn..module-1", + "instanceParams": [ + { + "k8s-rb-profile-name": "vfw-cnf-cds-base-profile", + "k8s-rb-profile-namespace": "vfirewall", + "sdnc_model_name": "vFW_CNF_CDS", + "sdnc_model_version": "7.1.0", + "vf_module_label": "helm_vsn" + } + ] + }, + { + "modelInfo": { + "modelName": "VfVfwK8sDemoCnfE2eNative2..base_template_dummy_ignore..module-0", + "modelVersionId": "67b3b9a9-23cf-4212-a482-3fb5d9521247", + "modelInvariantUuid": "f7b40081-9ddc-4885-a409-5f57685c4a46", + "modelVersion": "1", + "modelCustomizationId": "c25ecd21-31a6-4a9d-8bc1-945570f7d2aa" + }, + "instanceName": "vf_vfw_k8s_demo_cnf_e2e_native_20..VfVfwK8sDemoCnfE2eNative2..base_template_dummy_ignore..module-0", + "instanceParams": [ + {} + ] + } + ] + } + ] + }, + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "623d4032-89ec-4f14-a655-31943fb002fa", + "modelInvariantId": "12f78123-0fe3-4691-8621-152b1aeb740b", + "modelName": "vfw_k8s_demo_CNF_e2e_native_2", + "modelType": "service" + } + } + } + ], + "aLaCarte": false, + "usePreload": false + }, + "project": { + "projectName": "etsiCsitProject" + }, + "owningEntity": { + "owningEntityId": "f2e1071e-3d47-4a65-94d4-e473ec03326a", + "owningEntityName": "OE-Demonstration" + } + } + } diff --git a/tests/so/sanity-check/data/serviceBasicVfCnfWithHelm.json b/tests/so/sanity-check/data/serviceBasicVfCnfWithHelm.json new file mode 100644 index 00000000..c1775f94 --- /dev/null +++ b/tests/so/sanity-check/data/serviceBasicVfCnfWithHelm.json @@ -0,0 +1,170 @@ +{ + "distributionID": "538da916-d1fc-4616-81d3-a4ccc07b5ee3", + "serviceName": "vfw_k8s_demo_CNF_e2e_native_2", + "serviceVersion": "1.0", + "serviceUUID": "623d4032-89ec-4f14-a655-31943fb002fa", + "serviceDescription": "service", + "serviceInvariantUUID": "12f78123-0fe3-4691-8621-152b1aeb740b", + "resources": [ + { + "resourceInstanceName": "VF_vfw_k8s_demo_CNF_e2e_native_2", + "resourceName": "VF_vfw_k8s_demo_CNF_e2e_native_2", + "resourceVersion": "1.0", + "resoucreType": "VF", + "resourceUUID": "9b6c36da-e4bb-4d58-b22e-5f0198a1813e", + "resourceInvariantUUID": "d65aeed1-1980-44dd-bdeb-ee78ea5ab842", + "resourceCustomizationUUID": "28aeaced-a71c-48ce-a3ae-58ab9eb4dd9f", + "category": "Generic", + "subcategory": "Abstract", + "artifacts": [{ + "artifactName": "vf_vfw_k8s_demo_cnf_e2e_native_20_modules.json", + "artifactType": "VF_MODULES_METADATA", + "artifactURL": "/unzipped_sdc_csar/vf_vfw_k8s_demo_cnf_e2e_native_20_modules.json", + "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI\u003d", + "artifactDescription": "Auto-generated VF Modules information artifact", + "artifactTimeout": 120, + "artifactUUID": "86224a10-c17e-42c9-9809-f3c31ba1b781", + "artifactVersion": "1" + }, + { + "artifactName": "helm_base_template.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/helm_base_template.env", + "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "368f90d2-2b5e-4987-a35a-248b77d7aa0a", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vfw.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/helm_vfw.env", + "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "47cdc1c7-07b6-4121-b49c-521658ac7f9a", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vpkg.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/helm_vpkg.env", + "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "da36f872-ce07-4f1f-95e5-5d9f836b2fb4", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "base_template_dummy_ignore.yaml", + "artifactType": "HEAT", + "artifactURL": "/unzipped_sdc_csar/base_template_dummy_ignore.yaml", + "artifactChecksum": "ZjI3NTdkZWViNTEzY2NhZjg4MmQ3OTcxZjcyMmNmNDY\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 30, + "artifactVersion": "1", + "artifactUUID": "54f0f7f4-600d-473a-869f-bd86a3a57d52", + "generatedArtifact": { + "artifactName": "base_template_dummy_ignore.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/base_template_dummy_ignore.env", + "artifactChecksum": "MTFhYjczYTdlMDU5MmE4N2FlMzhkM2RmMjIxZmY4ZmM\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "098499f4-aad8-4398-b02b-ae9f18cc2770", + "generatedFromUUID": "54f0f7f4-600d-473a-869f-bd86a3a57d52" + }, + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vsn.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/helm_vsn.env", + "artifactChecksum": "MTA2MjAxNDAyMmY0NmMwYTlmMDMyN2FjZDUxODkzNWI\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "756c8891-9120-42b2-948f-4831c248b5a3", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_base_template.tgz", + "artifactType": "HELM", + "artifactURL": "/unzipped_sdc_csar/helm_base_template.tgz", + "artifactChecksum": "YmVkODgxMzUzMzJlZmYzNzg0ZDViMjNlYmJiMmVlZmY\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 30, + "artifactVersion": "1", + "artifactUUID": "4affda27-3aac-4d12-bc09-d7539cafc122", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "base_template_dummy_ignore.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/unzipped_sdc_csar/base_template_dummy_ignore.env", + "artifactChecksum": "MTFhYjczYTdlMDU5MmE4N2FlMzhkM2RmMjIxZmY4ZmM\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 0, + "artifactVersion": "2", + "artifactUUID": "098499f4-aad8-4398-b02b-ae9f18cc2770", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vsn.tgz", + "artifactType": "HELM", + "artifactURL": "/unzipped_sdc_csar/helm_vsn.tgz", + "artifactChecksum": "NmJmODE3NzY5YWRjNDYxZjI4ZGYyZjU1ZDY3ZDJkMWE\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 30, + "artifactVersion": "1", + "artifactUUID": "c9e8dce1-43f0-4100-973c-0eb576b3270c", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vfw.tgz", + "artifactType": "HELM", + "artifactURL": "/unzipped_sdc_csar/helm_vfw.tgz", + "artifactChecksum": "MGNhNjAxYjNkOTUyYzBiOTJjNzIzMWVjN2FkZTg3ZWU\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 30, + "artifactVersion": "1", + "artifactUUID": "6d46bee9-d724-4332-b6e8-3133af774b6b", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "helm_vpkg.tgz", + "artifactType": "HELM", + "artifactURL": "/unzipped_sdc_csar/helm_vpkg.tgz", + "artifactChecksum": "NjQ0MDA1OTI5Nzk1NjJmZGJjYjZlZTk0MzY1NjhmZjk\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 30, + "artifactVersion": "1", + "artifactUUID": "dfc44bf0-ffec-4b70-9226-da4ca7801f79", + "relatedArtifactsInfo": [] + } + +] + } + + + ], + "serviceArtifacts": [ + { + "artifactName": "service-VfwK8sDemoCnfE2eNative2-csar.csar", + "artifactType": "TOSCA_CSAR", + "artifactURL": "/unzipped_sdc_csar/service-VfwK8sDemoCnfE2eNative2-csar.csar", + "artifactChecksum": "ZTRhOGI0M2UxN2ZhYjQ0ODI5ZDZhZTExZTFkMGU3N2Y\u003d", + "artifactDescription": "TOSCA definition package of the asset", + "artifactTimeout": 0, + "artifactUUID": "623d4032-89ec-4f14-a655-31943fb002fa", + "artifactVersion": "1" + } + ], + "workloadContext": "Production" +} + diff --git a/tests/so/sanity-check/macroflow.robot b/tests/so/sanity-check/macroflow.robot index cd3a5b55..53424d04 100644 --- a/tests/so/sanity-check/macroflow.robot +++ b/tests/so/sanity-check/macroflow.robot @@ -5,16 +5,16 @@ Library OperatingSystem Library json *** Variables *** -${SLEEP_INTERVAL_SEC}= 60 +${SLEEP_INTERVAL_SEC}= 30 +${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}= 48 # Represents the maximum number of attempts that will be made before a timeout. It sleeps for SLEEP_INTERVAL_SEC seconds before retry. *** Test Cases *** Distribute Service Template Create Session sdc_controller_session http://${REPO_IP}:8085 ${data}= Get Binary File ${CURDIR}${/}data${/}serviceBasicVfCnfnotification.json &{headers}= Create Dictionary Authorization=Basic bXNvX2FkbWluOnBhc3N3b3JkMSQ= resource-location=/distribution-test-zip/unzipped/ Content-Type=application/json Accept=application/json - ${resp}= Post Request sdc_controller_session /test/treatNotification/v1 data=${data} headers=${headers} + ${resp}= POST On Session sdc_controller_session /test/treatNotification/v1 data=${data} headers=${headers} Log To Console Received status code: ${resp.status_code} - Run Keyword If '${resp.status_code}' == '200' log to console \nexecuted with expected result Should Be Equal As Strings '${resp.status_code}' '200' @@ -22,8 +22,24 @@ Macroflow Create Session api_handler_session http://${REPO_IP}:8080 ${data}= Get Binary File ${CURDIR}${/}data${/}macroflow.json &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json - ${service_instantiation_request}= Post Request api_handler_session /onap/so/infra/serviceInstantiation/v7/serviceInstances data=${data} headers=${headers} + ${service_instantiation_request}= POST On Session api_handler_session /onap/so/infra/serviceInstantiation/v7/serviceInstances data=${data} headers=${headers} Log To Console Received status code: ${service_instantiation_request.status_code} - Run Keyword If '${service_instantiation_request.status_code}' == '202' log to console \nexecuted with expected result - Should Be Equal As Strings '${service_instantiation_request.status_code}' '202' - SLEEP ${SLEEP_INTERVAL_SEC}s + ${service_instantiation_json_response}= Evaluate json.loads(r"""${service_instantiation_request.content}""", strict=False) json + ${request_ID}= Set Variable ${service_instantiation_json_response}[requestReferences][requestId] + ${actual_request_state}= Set Variable "" + + FOR ${INDEX} IN RANGE ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT} + ${orchestration_status_request}= Get On Session api_handler_session /onap/so/infra/orchestrationRequests/v7/${request_ID} + Run Keyword If '${orchestration_status_request.status_code}' == '200' log to console \nexecuted with expected result + log to console ${orchestration_status_request.content} + ${orchestration_json_response}= Evaluate json.loads(r"""${orchestration_status_request.content}""", strict=False) json + ${actual_request_state}= SET VARIABLE ${orchestration_json_response}[request][requestStatus][requestState] + Log To Console Received actual repsonse status:${actual_request_state} + RUN KEYWORD IF '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED' Exit For Loop + log to console Will try again after ${SLEEP_INTERVAL_SEC} seconds + SLEEP ${SLEEP_INTERVAL_SEC}s + END + + Log To Console final repsonse status received: ${actual_request_state} + Run Keyword If '${actual_request_state}' == 'COMPLETE' log to console \nexecuted with expected result + Should Be Equal As Strings '${actual_request_state}' 'COMPLETE' diff --git a/tests/so/sanity-check/macroflow_helm.robot b/tests/so/sanity-check/macroflow_helm.robot new file mode 100644 index 00000000..7b8b26f1 --- /dev/null +++ b/tests/so/sanity-check/macroflow_helm.robot @@ -0,0 +1,45 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Library OperatingSystem +Library json + +*** Variables *** +${SLEEP_INTERVAL_SEC}= 30 +${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}= 48 # Represents the maximum number of attempts that will be made before a timeout. It sleeps for SLEEP_INTERVAL_SEC seconds before retry. + +*** Test Cases *** +Distribute Service Template + Create Session sdc_controller_session http://${REPO_IP}:8085 + ${data}= Get Binary File ${CURDIR}${/}data${/}serviceBasicVfCnfWithHelm.json + &{headers}= Create Dictionary Authorization=Basic bXNvX2FkbWluOnBhc3N3b3JkMSQ= resource-location=/distribution-test-zip/unzipped/ Content-Type=application/json Accept=application/json + ${resp}= POST On Session sdc_controller_session /test/treatNotification/v1 data=${data} headers=${headers} + Log To Console Received status code: ${resp.status_code} + Should Be Equal As Strings '${resp.status_code}' '200' + + +Macroflow + Create Session api_handler_session http://${REPO_IP}:8080 + ${data}= Get Binary File ${CURDIR}${/}data${/}MacroflowWithHelm.json + &{headers}= Create Dictionary Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== Content-Type=application/json Accept=application/json + ${service_instantiation_request}= POST On Session api_handler_session /onap/so/infra/serviceInstantiation/v7/serviceInstances data=${data} headers=${headers} + Log To Console Received status code: ${service_instantiation_request.status_code} + ${service_instantiation_json_response}= Evaluate json.loads(r"""${service_instantiation_request.content}""", strict=False) json + ${request_ID}= Set Variable ${service_instantiation_json_response}[requestReferences][requestId] + ${actual_request_state}= Set Variable "" + + FOR ${INDEX} IN RANGE ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT} + ${orchestration_status_request}= Get On Session api_handler_session /onap/so/infra/orchestrationRequests/v7/${request_ID} + Run Keyword If '${orchestration_status_request.status_code}' == '200' log to console \nexecuted with expected result + log to console ${orchestration_status_request.content} + ${orchestration_json_response}= Evaluate json.loads(r"""${orchestration_status_request.content}""", strict=False) json + ${actual_request_state}= SET VARIABLE ${orchestration_json_response}[request][requestStatus][requestState] + Log To Console Received actual repsonse status:${actual_request_state} + RUN KEYWORD IF '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED' Exit For Loop + log to console Will try again after ${SLEEP_INTERVAL_SEC} seconds + SLEEP ${SLEEP_INTERVAL_SEC}s + END + + Log To Console final repsonse status received: ${actual_request_state} + Run Keyword If '${actual_request_state}' == 'COMPLETE' log to console \nexecuted with expected result + Should Be Equal As Strings '${actual_request_state}' 'COMPLETE' -- 2.16.6