diff options
author | 2018-01-17 15:40:59 +0000 | |
---|---|---|
committer | 2018-03-14 04:23:39 +0000 | |
commit | 10d510b16ad0e7a1217be89369fcb3acbb257b8b (patch) | |
tree | 54edb3e4a57ce15fb46555eb9a1fd344e3b8e9ae | |
parent | a867bf5a720c41303142568210dbd4ef50fb256d (diff) |
Robot config seggregation
Issue-ID: OOM-560
Change-Id: Iee9c7c78c6eb53b14b31d6e31f1539040daa88ba
Signed-off-by: vaibhav_16dec <vaibhav.chopra@amdocs.com>
-rwxr-xr-x | resources/config/authorization | 1 | ||||
-rwxr-xr-x | resources/config/eteshare/config/integration_preload_parameters.py | 181 | ||||
-rwxr-xr-x | resources/config/eteshare/config/integration_robot_properties.py | 81 | ||||
-rwxr-xr-x | resources/config/eteshare/config/vm_config2robot.sh | 24 | ||||
-rwxr-xr-x | resources/config/eteshare/config/vm_properties.py | 77 | ||||
-rw-r--r-- | resources/config/robot/resources/asdc_interface.robot | 495 | ||||
-rw-r--r-- | resources/config/robot/resources/policy_interface.robot | 57 | ||||
-rw-r--r-- | resources/config/robot/resources/sdngc_interface.robot | 222 | ||||
-rw-r--r-- | templates/robot-dep-configmap.yaml | 25 | ||||
-rw-r--r-- | templates/robot-deployment.yaml | 33 | ||||
-rw-r--r-- | values.yaml | 14 |
11 files changed, 1192 insertions, 18 deletions
diff --git a/resources/config/authorization b/resources/config/authorization new file mode 100755 index 0000000..988730f --- /dev/null +++ b/resources/config/authorization @@ -0,0 +1 @@ +robot:robot diff --git a/resources/config/eteshare/config/integration_preload_parameters.py b/resources/config/eteshare/config/integration_preload_parameters.py new file mode 100755 index 0000000..b125f79 --- /dev/null +++ b/resources/config/eteshare/config/integration_preload_parameters.py @@ -0,0 +1,181 @@ +GLOBAL_PRELOAD_PARAMETERS = { +# heat template parameter values common to all heat template continaing these parameters + "defaults" : { + 'key_name' : 'vfw_key${uuid}', + "pub_key" : "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAqqnA9BAiMLtjOPSYBfhzLu4CiBolWoskDg4KVwhTJVTTeB6CqrQNcadlGXxOHhCYuNCKkUmIVF4WTOisVOJ75Z1c4OMoZLL85xVPKSIeH63kgVugwgPYQu55NbbWX+rsbUha3LnElDhNviMM3iTPbD5nnhKixNERAJMTLKXvZZZGqxW94bREknYPQTT2qrk3YRqwldncopp6Nkgv3AnSJz2gc9tjxnWF0poTQnQm/3D6hiJICrzKfAV0EaPN0KdtYjPhKrYoy6Qb/tKOVaaqsvwfKBJGrT9LfcA7D7M/yj292RT1XN63hI84WC383LsaPJ6eWdDTE6zUP1eGTWCoOw== rsa-key-20161026", + "repo_url_blob" : "https://nexus.onap.org/content/repositories/raw", + "repo_url_artifacts" : "https://nexus.onap.org/content/groups/staging", + "demo_artifacts_version" : "{{ .Values.demoArtifactsVersion }}", + "onap_private_net_id" : "{{ .Values.openStackPrivateNetId }}", + "onap_private_subnet_id" : "{{ .Values.openStackPrivateSubnetId }}", + "onap_private_net_cidr" : "{{ .Values.openStackPrivateNetCidr }}", + "dcae_collector_ip" : "10.0.4.102", + "dcae_collector_port" : "8080", + "public_net_id" : "{{ .Values.openStackPublicNetId }}", + "cloud_env" : "${cloud_env}", + "install_script_version" : "${install_script_version}", +### +# vims_preload same for every instantiation +### + "bono_image_name" : "${vm_image_name}", + "sprout_image_name" : "${vm_image_name}", + "homer_image_name" : "${vm_image_name}", + "homestead_image_name" : "${vm_image_name}", + "ralf_image_name" : "${vm_image_name}", + "ellis_image_name" : "${vm_image_name}", + "dns_image_name" : "${vm_image_name}", + "bono_flavor_name" : "${vm_flavor_name}", + "sprout_flavor_name" : "${vm_flavor_name}", + "homer_flavor_name" : "${vm_flavor_name}", + "homestead_flavor_name" : "${vm_flavor_name}", + "ralf_flavor_name" : "${vm_flavor_name}", + "ellis_flavor_name" : "${vm_flavor_name}", + "dns_flavor_name" : "${vm_flavor_name}", + "repo_url" : "http://repo.cw-ngv.com/stable", + "zone" : "me.cw-ngv.com", + "dn_range_start" : "2425550000", + "dn_range_length" : "10000", + "dnssec_key" : "9FPdYTWhk5+LbhrqtTPQKw==", +### +# vlb_preload same for every instantiation +### + "vlb_image_name" : "${vm_image_name}", + "vlb_flavor_name" : "${vm_flavor_name}", +### +# vlb_preload same for every instantiation +### + "vfw_image_name" : "${vm_image_name}", + "vfw_flavor_name" : "${vm_flavor_name}", +### + }, + +### +# heat template parameter values for heat template instances created during Vnf-Orchestration test cases +### + "Vnf-Orchestration" : { + "vfw_preload.template": { + "unprotected_private_net_id" : "vofwl01_unprotected${hostid}", + "unprotected_private_net_cidr" : "192.168.10.0/24", + "protected_private_net_id" : "vofwl01_protected${hostid}", + "protected_private_net_cidr" : "192.168.20.0/24", + "vfw_private_ip_0" : "192.168.10.100", + "vfw_private_ip_1" : "192.168.20.100", + "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.1", + "vpg_private_ip_0" : "192.168.10.200", + "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.2", + "vsn_private_ip_0" : "192.168.20.250", + "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.3", + 'vfw_name_0':'vofwl01fwl${hostid}', + 'vpg_name_0':'vofwl01pgn${hostid}', + 'vsn_name_0':'vofwl01snk${hostid}' + }, + "vlb_preload.template" : { + "vlb_private_net_id" : "volb01_private${hostid}", + "vlb_private_net_cidr" : "192.168.30.0/24", + "vlb_private_ip_0" : "192.168.30.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.4", + "vdns_private_ip_0" : "192.168.30.110", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.5", + 'vlb_name_0':'vovlblb${hostid}', + 'vdns_name_0':'vovlbdns${hostid}', + "vlb_private_net_cidr" : "192.168.10.0/24", + "pktgen_private_net_cidr" : "192.168.9.0/24" + + }, + "dnsscaling_preload.template" : { + "vlb_private_net_id" : "volb01_private${hostid}", + "vlb_private_ip_0" : "192.168.30.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.4", + "vdns_private_ip_0" : "192.168.30.222", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.6", + 'scaling_vdns_name_0':'vovlbscaling${hostid}', + "vlb_private_net_cidr" : "192.168.10.0/24" + }, + "vvg_preload.template" : { + } + }, +# heat template parameter values for heat template instances created during Closed-Loop test cases + "Closed-Loop" : { + "vfw_preload.template": { + "unprotected_private_net_id" : "clfwl01_unprotected${hostid}", + "unprotected_private_net_cidr" : "192.168.110.0/24", + "protected_private_net_id" : "clfwl01_protected${hostid}", + "protected_private_net_cidr" : "192.168.120.0/24", + "vfw_private_ip_0" : "192.168.110.100", + "vfw_private_ip_1" : "192.168.120.100", + "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.11", + "vpg_private_ip_0" : "192.168.110.200", + "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.12", + "vsn_private_ip_0" : "192.168.120.250", + "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.13", + 'vfw_name_0':'clfwl01fwl${hostid}', + 'vpg_name_0':'clfwl01pgn${hostid}', + 'vsn_name_0':'clfwl01snk${hostid}' + }, + "vlb_preload.template" : { + "vlb_private_net_id" : "cllb01_private${hostid}", + "vlb_private_net_cidr" : "192.168.130.0/24", + "vlb_private_ip_0" : "192.168.130.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14", + "vdns_private_ip_0" : "192.168.130.110", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.15", + 'vlb_name_0':'clvlblb${hostid}', + 'vdns_name_0':'clvlbdns${hostid}', + "vlb_private_net_cidr" : "192.168.10.0/24", + "pktgen_private_net_cidr" : "192.168.9.0/24" + }, + "dnsscaling_preload.template" : { + "vlb_private_net_id" : "cllb01_private${hostid}", + "vlb_private_ip_0" : "192.168.130.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14", + "vdns_private_ip_0" : "192.168.130.222", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.16", + 'scaling_vdns_name_0':'clvlbscaling${hostid}', + "vlb_private_net_cidr" : "192.168.10.0/24" + }, + "vvg_preload.template" : { + } + }, + # heat template parameter values for heat template instances created for hands on demo test case + "Demo" : { + "vfw_preload.template": { + "unprotected_private_net_id" : "demofwl_unprotected", + "unprotected_private_net_cidr" : "192.168.110.0/24", + "protected_private_net_id" : "demofwl_protected", + "protected_private_net_cidr" : "192.168.120.0/24", + "vfw_private_ip_0" : "192.168.110.100", + "vfw_private_ip_1" : "192.168.120.100", + "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.11", + "vpg_private_ip_0" : "192.168.110.200", + "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.12", + "vsn_private_ip_0" : "192.168.120.250", + "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.13", + 'vfw_name_0':'demofwl01fwl', + 'vpg_name_0':'demofwl01pgn', + 'vsn_name_0':'demofwl01snk' + }, + "vlb_preload.template" : { + "vlb_private_net_id" : "demolb_private", + "vlb_private_net_cidr" : "192.168.130.0/24", + "vlb_private_ip_0" : "192.168.130.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14", + "vdns_private_ip_0" : "192.168.130.110", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.15", + 'vlb_name_0':'demovlblb', + 'vdns_name_0':'demovlbdns', + "vlb_private_net_cidr" : "192.168.10.0/24", + "pktgen_private_net_cidr" : "192.168.9.0/24" + }, + "dnsscaling_preload.template" : { + "vlb_private_net_id" : "demolb_private", + "vlb_private_ip_0" : "192.168.130.100", + "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14", + "vdns_private_ip_0" : "192.168.130.222", + "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.16", + 'scaling_vdns_name_0':'demovlbscaling', + "vlb_private_net_cidr" : "192.168.10.0/24" + }, + "vvg_preload.template" : { + } + } +} diff --git a/resources/config/eteshare/config/integration_robot_properties.py b/resources/config/eteshare/config/integration_robot_properties.py new file mode 100755 index 0000000..305ba3e --- /dev/null +++ b/resources/config/eteshare/config/integration_robot_properties.py @@ -0,0 +1,81 @@ +# aaf info - everything is from the private oam network (also called ecomp private network) +GLOBAL_AAF_SERVER = "http://10.0.12.1:8101" +GLOBAL_AAF_USERNAME = "dgl@openecomp.org" +GLOBAL_AAF_PASSWORD = "ecomp_admin" +# aai info - everything is from the private oam network (also called ecomp private network) +GLOBAL_AAI_SERVER_PROTOCOL = "https" +GLOBAL_AAI_SERVER_PORT = "8443" +GLOBAL_AAI_USERNAME = "AAI" +GLOBAL_AAI_PASSWORD = "AAI" +# appc info - everything is from the private oam network (also called ecomp private network) +GLOBAL_APPC_SERVER_PROTOCOL = "http" +GLOBAL_APPC_SERVER_PORT = "8282" +GLOBAL_APPC_SERVER = "http://10.0.2.1:" +GLOBAL_APPC_USERNAME = "admin" +GLOBAL_APPC_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U" +# sdc info - everything is from the private oam network (also called ecomp private network) +GLOBAL_ASDC_SERVER_PROTOCOL = "http" +GLOBAL_ASDC_FE_PORT = "8181" +GLOBAL_ASDC_BE_PORT = "8080" +GLOBAL_ASDC_BE_USERNAME = "beep" +GLOBAL_ASDC_BE_PASSWORD = "boop" +# clamp info - everything is from the private oam network (also called ecomp private network) +GLOBAL_CLAMP_SERVER_PROTOCOL = "http" +GLOBAL_CLAMP_SERVER_PORT = "8080" +# dcae info - everything is from the private oam network (also called ecomp private network) +GLOBAL_DCAE_SERVER_PROTOCOL = "http" +GLOBAL_DCAE_SERVER_PORT = "8080" +GLOBAL_DCAE_USERNAME = "console" +GLOBAL_DCAE_PASSWORD = "ZjJkYjllMjljMTI2M2Iz" +# microservice bus info - everything is from the private oam network (also called ecomp private network) +GLOBAL_MSB_SERVER_PROTOCOL = "http" +GLOBAL_MSB_SERVER_PORT = "80" +# message router info - everything is from the private oam network (also called ecomp private network) +GLOBAL_MR_SERVER_PROTOCOL = "http" +GLOBAL_MR_SERVER_PORT = "3904" +# mso info - everything is from the private oam network (also called ecomp private network) +GLOBAL_MSO_SERVER_PROTOCOL = "http" +GLOBAL_MSO_SERVER_PORT = "8080" +GLOBAL_MSO_USERNAME = "InfraPortalClient" +GLOBAL_MSO_PASSWORD = "password1$" +# openstack info - info to select right info in environment +# packet generate vnf info - everything is from the private oam network (also called ecomp private network) +GLOBAL_PACKET_GENERATOR_PORT = "8183" +GLOBAL_PACKET_GENERATOR_USERNAME = "admin" +GLOBAL_PACKET_GENERATOR_PASSWORD = "admin" +GLOBAL_PGN_PORT = "2831" +# policy info - everything is from the private oam network (also called ecomp private network) +GLOBAL_POLICY_SERVER_PROTOCOL = "http" +GLOBAL_POLICY_SERVER_PORT = "8081" +GLOBAL_POLICY_HEALTHCHECK_PORT = "6969" +GLOBAL_POLICY_AUTH = "dGVzdHBkcDphbHBoYTEyMw==" +GLOBAL_POLICY_CLIENTAUTH = "cHl0aG9uOnRlc3Q=" +GLOBAL_POLICY_USERNAME = "healthcheck" +GLOBAL_POLICY_PASSWORD = "zb!XztG34" +# portal info - everything is from the private oam network (also called ecomp private network) +GLOBAL_PORTAL_SERVER_PROTOCOL = "http" +GLOBAL_PORTAL_SERVER_PORT = "8989" +GLOBAL_PORTAL_USERNAME = "demo" +GLOBAL_PORTAL_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse" +# sdngc info - everything is from the private oam network (also called ecomp private network) +GLOBAL_SDNGC_SERVER_PROTOCOL = "http" +GLOBAL_SDNGC_REST_PORT = "8282" +GLOBAL_SDNGC_ADMIN_PORT = "8843" +GLOBAL_SDNGC_USERNAME = "admin" +GLOBAL_SDNGC_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U" +# vid info - everything is from the private oam network (also called ecomp private network) +GLOBAL_VID_SERVER_PROTOCOL = "http" +GLOBAL_VID_SERVER_PORT = "8080" +GLOBAL_VID_USERNAME = "demo" +GLOBAL_VID_PASSWORD = "Kp8bJ4SXszM0WX" +GLOBAL_VID_HEALTH_USERNAME = "Default" +GLOBAL_VID_HEALTH_PASSWORD = "AppPassword!1" +#global selenium info +GLOBAL_PROXY_WARNING_TITLE = "" +GLOBAL_PROXY_WARNING_CONTINUE_XPATH = "" +# settings for vm to attach vvg too +GLOBAL_VVGSERVER_IMAGE = "{{ .Values.ubuntuImage }}" +GLOBAL_VVGSERVER_FLAVOR = "{{ .Values.openStackFlavourMedium }}" +# dns info +GLOBAL_DNS_TRAFFIC_DURATION = "600" +GLOBAL_HEAT_TEMPLATES_FOLDER = "/share/heat" diff --git a/resources/config/eteshare/config/vm_config2robot.sh b/resources/config/eteshare/config/vm_config2robot.sh new file mode 100755 index 0000000..c50fa5f --- /dev/null +++ b/resources/config/eteshare/config/vm_config2robot.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# +# Make vm1_robot config available to robot +# +CONFIG=/opt/config +PROPERTIES=/opt/eteshare/config/vm_properties.py +GLOBAL_VM_PROPERTIES="# File generated from /opt/config\n#\n" +HASH="GLOBAL_INJECTED_PROPERTIES={" +COMMA="" +for f in `ls $CONFIG/*.txt`; +do + VALUE=`cat $f` + NAME=${f%.*} + NAME=${NAME##*/} + NAME=${NAME^^} + GLOBAL_VM_PROPERTIES=$"${GLOBAL_VM_PROPERTIES}GLOBAL_INJECTED_$NAME = \"$VALUE\"\n" + HASH=$"${HASH}${COMMA}\n\"GLOBAL_INJECTED_$NAME\" : \"$VALUE\"" + COMMA="," +done +HASH="${HASH}}\n" +GLOBAL_VM_PROPERTIES="${GLOBAL_VM_PROPERTIES}\n${HASH}" +GLOBAL_VM_PROPERTIES=${GLOBAL_VM_PROPERTIES} +echo -e $GLOBAL_VM_PROPERTIES > $PROPERTIES diff --git a/resources/config/eteshare/config/vm_properties.py b/resources/config/eteshare/config/vm_properties.py new file mode 100755 index 0000000..b4a7246 --- /dev/null +++ b/resources/config/eteshare/config/vm_properties.py @@ -0,0 +1,77 @@ +# File generated from /opt/config +# +GLOBAL_INJECTED_AAI1_IP_ADDR = "aai-service.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_AAI2_IP_ADDR = "N/A" +GLOBAL_INJECTED_APPC_IP_ADDR = "appc-sdnhost.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_ARTIFACTS_VERSION = "1.1.0-SNAPSHOT" +GLOBAL_INJECTED_CLAMP_IP_ADDR = "clamp.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_CLOUD_ENV = "openstack" +GLOBAL_INJECTED_DCAE_IP_ADDR = "dcae-controller.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_DNS_IP_ADDR = "10.0.100.1" +GLOBAL_INJECTED_DOCKER_VERSION = "1.1-STAGING-latest" +#GLOBAL_INJECTED_EXTERNAL_DNS = "N/A" +GLOBAL_INJECTED_GERRIT_BRANCH = "master" +GLOBAL_INJECTED_KEYSTONE = "{{ .Values.openStackKeyStoneUrl }}" +GLOBAL_INJECTED_MR_IP_ADDR = "dmaap.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_MSO_IP_ADDR = "mso.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_NETWORK = "{{ .Values.openStackPrivateNetId }}" +GLOBAL_INJECTED_NEXUS_DOCKER_REPO = "nexus3.onap.org:10001" +GLOBAL_INJECTED_NEXUS_PASSWORD = "docker" +GLOBAL_INJECTED_NEXUS_REPO = "https://nexus.onap.org/content/sites/raw" +GLOBAL_INJECTED_NEXUS_USERNAME = "docker" +GLOBAL_INJECTED_OPENO_IP_ADDR = "msb-iag.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_OPENSTACK_PASSWORD = "{{ .Values.openStackEncryptedPassword }}" +GLOBAL_INJECTED_OPENSTACK_TENANT_ID = "{{ .Values.openStackTenantId }}" +GLOBAL_INJECTED_OPENSTACK_USERNAME = "{{ .Values.openStackUserName }}" +GLOBAL_INJECTED_POLICY_IP_ADDR = "pypdp.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR = "drools.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_PORTAL_IP_ADDR = "portalapps.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_REGION = "{{ .Values.openStackRegion }}" +GLOBAL_INJECTED_REMOTE_REPO = "http://gerrit.onap.org/r/testsuite/properties.git" +GLOBAL_INJECTED_SDC_IP_ADDR = "sdc-be.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_SDC_FE_IP_ADDR = "sdc-fe.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_SDC_BE_IP_ADDR = "sdc-be.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_SDNC_IP_ADDR = "sdnhost.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR = "sdnc-portal.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_SO_IP_ADDR = "mso.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_VID_IP_ADDR = "vid-server.{{ .Values.nsPrefix }}" +GLOBAL_INJECTED_VM_FLAVOR = "{{ .Values.openStackFlavourMedium }}" +GLOBAL_INJECTED_VM_IMAGE_NAME = "{{ .Values.ubuntuImage }}" +GLOBAL_INJECTED_PUBLIC_NET_ID = "{{ .Values.openStackPublicNetId }}" +GLOBAL_INJECTED_PROPERTIES = { + "GLOBAL_INJECTED_AAI1_IP_ADDR" : "aai-service.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_APPC_IP_ADDR" : "appc-sdnhost.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_ARTIFACTS_VERSION" : "1.1.0-SNAPSHOT", + "GLOBAL_INJECTED_CLAMP_IP_ADDR" : "clamp.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_CLOUD_ENV" : "openstack", + "GLOBAL_INJECTED_DCAE_IP_ADDR" : "dcae-controller.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_DNS_IP_ADDR" : "10.0.100.1", + "GLOBAL_INJECTED_DOCKER_VERSION" : "1.1-STAGING-latest", + "GLOBAL_INJECTED_GERRIT_BRANCH" : "master", + "GLOBAL_INJECTED_KEYSTONE" : "{{ .Values.openStackKeyStoneUrl }}", + "GLOBAL_INJECTED_MR_IP_ADDR" : "dmaap.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_MSO_IP_ADDR" : "mso.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_NETWORK" : "{{ .Values.openStackPrivateNetId }}", + "GLOBAL_INJECTED_NEXUS_DOCKER_REPO" : "nexus3.onap.org:10001", + "GLOBAL_INJECTED_NEXUS_PASSWORD" : "docker", + "GLOBAL_INJECTED_NEXUS_REPO" : "https://nexus.onap.org/content/sites/raw", + "GLOBAL_INJECTED_NEXUS_USERNAME" : "docker", + "GLOBAL_INJECTED_OPENO_IP_ADDR" : "msb-iag.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_OPENSTACK_PASSWORD" : "{{ .Values.openStackEncryptedPassword }}", + "GLOBAL_INJECTED_OPENSTACK_TENANT_ID" : "{{ .Values.openStackTenantId }}", + "GLOBAL_INJECTED_OPENSTACK_USERNAME" : "{{ .Values.openStackUserName }}", + "GLOBAL_INJECTED_POLICY_IP_ADDR" : "pypdp.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR" : "drools.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_PORTAL_IP_ADDR" : "portalapps.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_REGION" : "{{ .Values.openStackRegion }}", + "GLOBAL_INJECTED_REMOTE_REPO" : "http://gerrit.onap.org/r/testsuite/properties.git", + "GLOBAL_INJECTED_SDC_FE_IP_ADDR" : "sdc-fe.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_SDC_BE_IP_ADDR" : "sdc-be.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_SDNC_IP_ADDR" : "sdnhost.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR" : "sdnc-portal.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_SO_IP_ADDR" : "mso.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_VID_IP_ADDR" : "vid-server.{{ .Values.nsPrefix }}", + "GLOBAL_INJECTED_VM_FLAVOR" : "{{ .Values.openStackFlavourMedium }}", + "GLOBAL_INJECTED_VM_IMAGE_NAME" : "{{ .Values.ubuntuImage }}", + "GLOBAL_INJECTED_PUBLIC_NET_ID" : "{{ .Values.openStackPublicNetId }}" +} diff --git a/resources/config/robot/resources/asdc_interface.robot b/resources/config/robot/resources/asdc_interface.robot new file mode 100644 index 0000000..5b69a66 --- /dev/null +++ b/resources/config/robot/resources/asdc_interface.robot @@ -0,0 +1,495 @@ +*** Settings *** +Documentation The main interface for interacting with ASDC. It handles low level stuff like managing the http request library and DCAE required fields +Library RequestsLibrary +Library UUID +Library JSONUtils +Library OperatingSystem +Library Collections +Library ExtendedSelenium2Library +Resource global_properties.robot +Resource browser_setup.robot +Resource json_templater.robot +*** Variables *** +${ASDC_DESIGNER_USER_ID} cs0008 +${ASDC_TESTER_USER_ID} jm0007 +${ASDC_GOVERNOR_USER_ID} gv0001 +${ASDC_OPS_USER_ID} op0001 +${ASDC_HEALTH_CHECK_PATH} /sdc1/rest/healthCheck +${ASDC_VENDOR_LICENSE_MODEL_PATH} /onboarding-api/v1.0/vendor-license-models +${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH} /onboarding-api/v1.0/vendor-software-products +${ASDC_VENDOR_KEY_GROUP_PATH} /license-key-groups +${ASDC_VENDOR_ENTITLEMENT_POOL_PATH} /entitlement-pools +${ASDC_VENDOR_FEATURE_GROUP_PATH} /feature-groups +${ASDC_VENDOR_LICENSE_AGREEMENT_PATH} /license-agreements +${ASDC_VENDOR_ACTIONS_PATH} /actions +${ASDC_VENDOR_SOFTWARE_UPLOAD_PATH} /orchestration-template-candidate +${ASDC_CATALOG_RESOURCES_PATH} /sdc2/rest/v1/catalog/resources +${ASDC_CATALOG_SERVICES_PATH} /sdc2/rest/v1/catalog/services +${ASDC_CATALOG_INACTIVE_RESOURCES_PATH} /sdc2/rest/v1/inactiveComponents/resource +${ASDC_CATALOG_INACTIVE_SERVICES_PATH} /sdc2/rest/v1/inactiveComponents/service +${ASDC_CATALOG_LIFECYCLE_PATH} /lifecycleState +${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} /resourceInstance +${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH} /distribution-state +${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH} /distribution +${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} /approve +${ASDC_CATALOG_SERVICE_DISTRIBUTION_ACTIVATE_PATH} /distribution/PROD/activate +${ASDC_LICENSE_MODEL_TEMPLATE} robot/assets/templates/asdc/license_model.template +${ASDC_KEY_GROUP_TEMPLATE} robot/assets/templates/asdc/key_group.template +${ASDC_ENTITLEMENT_POOL_TEMPLATE} robot/assets/templates/asdc/entitlement_pool.template +${ASDC_FEATURE_GROUP_TEMPLATE} robot/assets/templates/asdc/feature_group.template +${ASDC_LICENSE_AGREEMENT_TEMPLATE} robot/assets/templates/asdc/license_agreement.template +${ASDC_ACTION_TEMPLATE} robot/assets/templates/asdc/action.template +${ASDC_SOFTWARE_PRODUCT_TEMPLATE} robot/assets/templates/asdc/software_product.template +${ASDC_CATALOG_RESOURCE_TEMPLATE} robot/assets/templates/asdc/catalog_resource.template +${ASDC_USER_REMARKS_TEMPLATE} robot/assets/templates/asdc/user_remarks.template +${ASDC_CATALOG_SERVICE_TEMPLATE} robot/assets/templates/asdc/catalog_service.template +${ASDC_RESOURCE_INSTANCE_TEMPLATE} robot/assets/templates/asdc/resource_instance.template +${ASDC_FE_ENDPOINT} ${GLOBAL_ASDC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDC_FE_IP_ADDR}:${GLOBAL_ASDC_FE_PORT} +${ASDC_BE_ENDPOINT} ${GLOBAL_ASDC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDC_BE_IP_ADDR}:${GLOBAL_ASDC_BE_PORT} + +*** Keywords *** +Distribute Model From ASDC + [Documentation] goes end to end creating all the asdc objects based ona model and distributing it to the systems. it then returns the service name, vf name and vf module name + [Arguments] ${model_zip_path} ${catalog_service_name}= + ${catalog_service_id}= Add ASDC Catalog Service ${catalog_service_name} + ${catalog_resource_ids}= Create List + ${catalog_resources}= Create Dictionary + : FOR ${zip} IN @{model_zip_path} + \ ${loop_catalog_resource_id}= Setup ASDC Catalog Resource ${zip} + \ Append To List ${catalog_resource_ids} ${loop_catalog_resource_id} + \ ${loop_catalog_resource_resp}= Get ASDC Catalog Resource ${loop_catalog_resource_id} + \ Add ASDC Resource Instance ${catalog_service_id} ${loop_catalog_resource_id} ${loop_catalog_resource_resp['name']} + \ Set To Dictionary ${catalog_resources} ${loop_catalog_resource_id}=${loop_catalog_resource_resp} + ${catalog_service_resp}= Get ASDC Catalog Service ${catalog_service_id} + Checkin ASDC Catalog Service ${catalog_service_id} + Request Certify ASDC Catalog Service ${catalog_service_id} + Start Certify ASDC Catalog Service ${catalog_service_id} + # on certify it gets a new id + ${catalog_service_id}= Certify ASDC Catalog Service ${catalog_service_id} + Approve ASDC Catalog Service ${catalog_service_id} + Distribute ASDC Catalog Service ${catalog_service_id} + ${catalog_service_resp}= Get ASDC Catalog Service ${catalog_service_id} + ${vf_module}= Find Element In Array ${loop_catalog_resource_resp['groups']} type org.openecomp.groups.VfModule + Check Catalog Service Distributed ${catalog_service_resp['uuid']} + [Return] ${catalog_service_resp['name']} ${loop_catalog_resource_resp['name']} ${vf_module} ${catalog_resource_ids} ${catalog_service_id} ${catalog_resources} + +Setup ASDC Catalog Resource + [Documentation] Creates all the steps a vf needs for an asdc catalog resource and returns the id + [Arguments] ${model_zip_path} + ${license_model_id}= Add ASDC License Model + ${key_group_id}= Add ASDC License Group ${license_model_id} + ${pool_id}= Add ASDC Entitlement Pool ${license_model_id} + ${feature_group_id}= Add ASDC Feature Group ${license_model_id} ${key_group_id} ${pool_id} + ${license_agreement_id}= Add ASDC License Agreement ${license_model_id} ${feature_group_id} + Checkin ASDC License Model ${license_model_id} + Submit ASDC License Model ${license_model_id} + ${license_model_resp}= Get ASDC License Model ${license_model_id} 1.0 + ${software_product_id}= Add ASDC Software Product ${license_agreement_id} ${feature_group_id} ${license_model_resp['vendorName']} ${license_model_id} + Upload ASDC Heat Package ${software_product_id} ${model_zip_path} + Validate ASDC Software Product ${software_product_id} + Checkin ASDC Software Product ${software_product_id} + Submit ASDC Software Product ${software_product_id} + Package ASDC Software Product ${software_product_id} + ${software_product_resp}= Get ASDC Software Product ${software_product_id} 1.0 + ${catalog_resource_id}= Add ASDC Catalog Resource ${license_agreement_id} ${software_product_resp['name']} ${license_model_resp['vendorName']} ${software_product_id} + Checkin ASDC Catalog Resource ${catalog_resource_id} + Request Certify ASDC Catalog Resource ${catalog_resource_id} + Start Certify ASDC Catalog Resource ${catalog_resource_id} + # on certify it gets a new id + [Return] ${catalog_resource_id} + ${catalog_resource_id}= Certify ASDC Catalog Resource ${catalog_resource_id} +Add ASDC License Model + [Documentation] Creates an asdc license model and returns its id + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary vendor_name=${shortened_uuid} + ${data}= Fill JSON Template File ${ASDC_LICENSE_MODEL_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['value']} +Get ASDC License Model + [Documentation] gets an asdc license model by its id + [Arguments] ${id} ${version_id}=0.1 + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id} + [Return] ${resp.json()} +Get ASDC License Models + [Documentation] gets an asdc license model by its id + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH} + [Return] ${resp.json()} +Checkin ASDC License Model + [Documentation] checksin an asdc license model by its id + [Arguments] ${id} ${version_id}=0.1 + ${map}= Create Dictionary action=Checkin + ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map} + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Submit ASDC License Model + [Documentation] submits an asdc license model by its id + [Arguments] ${id} ${version_id}=0.1 + ${map}= Create Dictionary action=Submit + ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map} + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Checkin ASDC Software Product + [Documentation] checksin an asdc Software Product by its id + [Arguments] ${id} ${version_id}=0.1 + ${map}= Create Dictionary action=Checkin + ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map} + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Validate ASDC Software Product + [Documentation] checksin an asdc Software Product by its id + [Arguments] ${id} ${version_id}=0.1 + ${data}= Catenate + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}/orchestration-template-candidate/process ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Submit ASDC Software Product + [Documentation] submits an asdc Software Product by its id + [Arguments] ${id} ${version_id}=0.1 + ${map}= Create Dictionary action=Submit + ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map} + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Package ASDC Software Product + [Documentation] creates_package on an asdc Software Product by its id + [Arguments] ${id} ${version_id}=0.1 + ${map}= Create Dictionary action=Create_Package + ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map} + ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Add ASDC Entitlement Pool + [Documentation] Creates an asdc Entitlement Pool and returns its id + [Arguments] ${license_model_id} ${version_id}=0.1 + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary entitlement_pool_name=${shortened_uuid} + ${data}= Fill JSON Template File ${ASDC_ENTITLEMENT_POOL_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_ENTITLEMENT_POOL_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['value']} +Get ASDC Entitlement Pool + [Documentation] gets an asdc Entitlement Pool by its id + [Arguments] ${license_model_id} ${pool_id} + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_ENTITLEMENT_POOL_PATH}/${pool_id} + [Return] ${resp.json()} +Add ASDC License Group + [Documentation] Creates an asdc license group and returns its id + [Arguments] ${license_model_id} ${version_id}=0.1 + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary key_group_name=${shortened_uuid} + ${data}= Fill JSON Template File ${ASDC_KEY_GROUP_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_KEY_GROUP_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['value']} +Get ASDC License Group + [Documentation] gets an asdc license group by its id + [Arguments] ${license_model_id} ${group_id} ${version_id} + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_KEY_GROUP_PATH}/${group_id} + [Return] ${resp.json()} +Add ASDC Feature Group + [Documentation] Creates an asdc Feature Group and returns its id + [Arguments] ${license_model_id} ${key_group_id} ${entitlement_pool_id} ${version_id}=0.1 + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary feature_group_name=${shortened_uuid} key_group_id=${key_group_id} entitlement_pool_id=${entitlement_pool_id} manufacturer_reference_number=mrn${shortened_uuid} + ${data}= Fill JSON Template File ${ASDC_FEATURE_GROUP_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_FEATURE_GROUP_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['value']} +Get ASDC Feature Group + [Documentation] gets an asdc Feature Group by its id + [Arguments] ${license_model_id} ${group_id} + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_FEATURE_GROUP_PATH}/${group_id} + [Return] ${resp.json()} +Add ASDC License Agreement + [Documentation] Creates an asdc License Agreement and returns its id + [Arguments] ${license_model_id} ${feature_group_id} ${version_id}=0.1 + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary license_agreement_name=${shortened_uuid} feature_group_id=${feature_group_id} + ${data}= Fill JSON Template File ${ASDC_LICENSE_AGREEMENT_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_LICENSE_AGREEMENT_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['value']} +Get ASDC License Agreement + [Documentation] gets an asdc License Agreement by its id + [Arguments] ${license_model_id} ${agreement_id} + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_LICENSE_AGREEMENT_PATH}/${agreement_id} + [Return] ${resp.json()} +Add ASDC Software Product + [Documentation] Creates an asdc Software Product and returns its id + [Arguments] ${license_agreement_id} ${feature_group_id} ${license_model_name} ${license_model_id} + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${map}= Create Dictionary software_product_name=${shortened_uuid} feature_group_id=${feature_group_id} license_agreement_id=${license_agreement_id} vendor_name=${license_model_name} vendor_id=${license_model_id} + ${data}= Fill JSON Template File ${ASDC_SOFTWARE_PRODUCT_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH} ${data} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['vspId']} +Get ASDC Software Product + [Documentation] gets an asdc Software Product by its id + [Arguments] ${software_product_id} ${version_id}=0.1 + ${resp}= Run ASDC Get Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${software_product_id}/versions/${version_id} + [Return] ${resp.json()} +Add ASDC Catalog Resource + [Documentation] Creates an asdc Catalog Resource and returns its id + [Arguments] ${license_agreement_id} ${software_product_name} ${license_model_name} ${software_product_id} + ${map}= Create Dictionary software_product_id=${software_product_id} software_product_name=${software_product_name} license_agreement_id=${license_agreement_id} vendor_name=${license_model_name} + ${data}= Fill JSON Template File ${ASDC_CATALOG_RESOURCE_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH} ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 201 + [Return] ${resp.json()['uniqueId']} +Mark ASDC Catalog Resource Inactive + [Documentation] deletes an asdc Catalog Resource + [Arguments] ${catalog_resource_id} + ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 204 + [Return] ${resp} +Delete Inactive ASDC Catalog Resources + [Documentation] delete all asdc Catalog Resources that are inactive + ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_INACTIVE_RESOURCES_PATH} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Get ASDC Catalog Resource + [Documentation] gets an asdc Catalog Resource by its id + [Arguments] ${catalog_resource_id} + ${resp}= Run ASDC Get Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id} ${ASDC_DESIGNER_USER_ID} + [Return] ${resp.json()} +Checkin ASDC Catalog Resource + [Documentation] checksin an asdc Catalog Resource by its id + [Arguments] ${catalog_resource_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/checkin ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Request Certify ASDC Catalog Resource + [Documentation] requests certify on an asdc Catalog Resource by its id + [Arguments] ${catalog_resource_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certificationRequest ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Start Certify ASDC Catalog Resource + [Documentation] start certify an asdc Catalog Resource by its id + [Arguments] ${catalog_resource_id} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/startCertification ${None} ${ASDC_TESTER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Certify ASDC Catalog Resource + [Documentation] start certify an asdc Catalog Resource by its id and returns the new id + [Arguments] ${catalog_resource_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${ASDC_TESTER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['uniqueId']} + +Upload ASDC Heat Package + [Documentation] Creates an asdc Software Product and returns its id + [Arguments] ${software_product_id} ${file_path} ${version_id}=0.1 + ${files}= Create Dictionary + Create Multi Part ${files} upload ${file_path} contentType=application/zip + ${resp}= Run ASDC Post Files Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${software_product_id}/versions/${version_id}${ASDC_VENDOR_SOFTWARE_UPLOAD_PATH} ${files} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + +Add ASDC Catalog Service + [Documentation] Creates an asdc Catalog Service and returns its id + [Arguments] ${catalog_service_name} + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:23] + ${catalog_service_name}= Set Variable If '${catalog_service_name}' =='' ${shortened_uuid} ${catalog_service_name} + ${map}= Create Dictionary service_name=${catalog_service_name} + ${data}= Fill JSON Template File ${ASDC_CATALOG_SERVICE_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH} ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 201 + [Return] ${resp.json()['uniqueId']} +Mark ASDC Catalog Service Inactive + [Documentation] Deletes an asdc Catalog Service + [Arguments] ${catalog_service_id} + ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 204 + [Return] ${resp} +Delete Inactive ASDC Catalog Services + [Documentation] delete all asdc Catalog Serivces that are inactive + ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_INACTIVE_SERVICES_PATH} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Get ASDC Catalog Service + [Documentation] gets an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id} ${ASDC_DESIGNER_USER_ID} + [Return] ${resp.json()} +Checkin ASDC Catalog Service + [Documentation] checksin an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/checkin ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Request Certify ASDC Catalog Service + [Documentation] requests certify on an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certificationRequest ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Start Certify ASDC Catalog Service + [Documentation] start certify an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/startCertification ${None} ${ASDC_TESTER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Certify ASDC Catalog Service + [Documentation] start certify an asdc Catalog Service by its id and returns the new id + [Arguments] ${catalog_service_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${ASDC_TESTER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()['uniqueId']} +Approve ASDC Catalog Service + [Documentation] approve an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${map}= Create Dictionary user_remarks=Robot remarks + ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH}${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} ${data} ${ASDC_GOVERNOR_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Distribute ASDC Catalog Service + [Documentation] distribute an asdc Catalog Service by its id + [Arguments] ${catalog_service_id} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_DISTRIBUTION_ACTIVATE_PATH} ${None} ${ASDC_OPS_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Add ASDC Resource Instance + [Documentation] Creates an asdc Resource Instance and returns its id + [Arguments] ${catalog_service_id} ${catalog_resource_id} ${catalog_resource_name} + ${milli_timestamp}= Generate MilliTimestamp UUID + ${map}= Create Dictionary catalog_resource_id=${catalog_resource_id} catalog_resource_name=${catalog_resource_name} milli_timestamp=${milli_timestamp} + ${data}= Fill JSON Template File ${ASDC_RESOURCE_INSTANCE_TEMPLATE} ${map} + ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} ${data} ${ASDC_DESIGNER_USER_ID} + Should Be Equal As Strings ${resp.status_code} 201 + [Return] ${resp.json()['uniqueId']} +Get Catalog Service Distribution + [Documentation] gets an asdc catalog Service distrbution + [Arguments] ${catalog_service_uuid} + ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_uuid}${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH} ${ASDC_OPS_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Check Catalog Service Distributed + [Documentation] gets an asdc catalog Service distrbution + [Arguments] ${catalog_service_uuid} + ${dist_resp}= Get Catalog Service Distribution ${catalog_service_uuid} + Should Be Equal As Strings ${dist_resp['distributionStatusOfServiceList'][0]['deployementStatus']} Distributed + Sleep 3 minutes + ${det_resp}= Get Catalog Service Distribution Details ${dist_resp['distributionStatusOfServiceList'][0]['distributionID']} + @{ITEMS}= Copy List ${det_resp['distributionStatusList']} + :FOR ${ELEMENT} IN @{ITEMS} + \ Log ${ELEMENT['status']} + \ Should Match Regexp ${ELEMENT['status']} ^(DEPLOY_OK|NOTIFIED|DOWNLOAD_OK|NOT_NOTIFIED)$ +Get Catalog Service Distribution Details + [Documentation] gets an asdc catalog Service distrbution details + [Arguments] ${catalog_service_distribution_id} + ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH}/${catalog_service_distribution_id} ${ASDC_OPS_USER_ID} + Should Be Equal As Strings ${resp.status_code} 200 + [Return] ${resp.json()} +Run ASDC Health Check + [Documentation] Runs a ASDC health check + ${session}= Create Session asdc ${ASDC_FE_ENDPOINT} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request asdc ${ASDC_HEALTH_CHECK_PATH} headers=${headers} + Should Be Equal As Strings ${resp.status_code} 200 + @{ITEMS}= Copy List ${resp.json()['componentsInfo']} + :FOR ${ELEMENT} IN @{ITEMS} + \ Log ${ELEMENT['healthCheckStatus']} + \ Should Be Equal As Strings ${ELEMENT['healthCheckStatus']} UP +Run ASDC Get Request + [Documentation] Runs an ASDC get request + [Arguments] ${data_path} ${user}=${ASDC_DESIGNER_USER_ID} + ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD} + Log Creating session ${ASDC_BE_ENDPOINT} + ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request asdc ${data_path} headers=${headers} + Log Received response from asdc ${resp.text} + [Return] ${resp} +Run ASDC Put Request + [Documentation] Runs an ASDC put request + [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID} + ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD} + Log Creating session ${ASDC_BE_ENDPOINT} + ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Put Request asdc ${data_path} data=${data} headers=${headers} + Log Received response from asdc ${resp.text} + [Return] ${resp} + +Run ASDC Post Files Request + [Documentation] Runs an ASDC post request + [Arguments] ${data_path} ${files} ${user}=${ASDC_DESIGNER_USER_ID} + ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD} + Log Creating session ${ASDC_BE_ENDPOINT} + ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=multipart/form-data USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Post Request asdc ${data_path} files=${files} headers=${headers} + Log Received response from asdc ${resp.text} + [Return] ${resp} + +Run ASDC Post Request + [Documentation] Runs an ASDC post request + [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID} + ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD} + Log Creating session ${ASDC_BE_ENDPOINT} + ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Post Request asdc ${data_path} data=${data} headers=${headers} + Log Received response from asdc ${resp.text} + [Return] ${resp} +Run ASDC Delete Request + [Documentation] Runs an ASDC delete request + [Arguments] ${data_path} ${user}=${ASDC_DESIGNER_USER_ID} + ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD} + Log Creating session ${ASDC_BE_ENDPOINT} + ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Delete Request asdc ${data_path} headers=${headers} + Log Received response from asdc ${resp.text} + [Return] ${resp} +Open ASDC GUI + [Documentation] Logs in to ASDC GUI + [Arguments] ${PATH} + ## Setup Browever now being managed by the test case + ##Setup Browser + Go To ${ASDC_FE_ENDPOINT}${PATH} + Maximize Browser Window + + Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + Log Logging in to ${ASDC_FE_ENDPOINT}${PATH} + Title Should Be ASDC + Wait Until Page Contains Element xpath=//div/a[text()='SDC'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} + Log Logged in to ${ASDC_FE_ENDPOINT}${PATH} + + +Create Multi Part + [Arguments] ${addTo} ${partName} ${filePath} ${contentType}=${None} + ${fileData}= Get Binary File ${filePath} + ${fileDir} ${fileName}= Split Path ${filePath} + ${partData}= Create List ${fileName} ${fileData} ${contentType} + Set To Dictionary ${addTo} ${partName}=${partData} diff --git a/resources/config/robot/resources/policy_interface.robot b/resources/config/robot/resources/policy_interface.robot new file mode 100644 index 0000000..9193fe4 --- /dev/null +++ b/resources/config/robot/resources/policy_interface.robot @@ -0,0 +1,57 @@ +*** Settings *** +Documentation The main interface for interacting with Policy. It handles low level stuff like managing the http request library and Policy required fields +Library RequestsClientCert +Library RequestsLibrary +Library String +Library JSONUtils +Library Collections +Resource global_properties.robot + +*** Variables *** +${POLICY_HEALTH_CHECK_PATH} /healthcheck +${POLICY_ENDPOINT} ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_IP_ADDR}:${GLOBAL_POLICY_SERVER_PORT} +${POLICY_HEALTHCHECK_ENDPOINT} ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR}:${GLOBAL_POLICY_HEALTHCHECK_PORT} + +*** Keywords *** + +Run Policy Health Check + [Documentation] Runs Policy Health check + ${auth}= Create List ${GLOBAL_POLICY_USERNAME} ${GLOBAL_POLICY_PASSWORD} + Log Creating session ${POLICY_ENDPOINT} + ${session}= Create Session policy ${POLICY_HEALTHCHECK_ENDPOINT} auth=${auth} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json + ${resp}= Get Request policy ${POLICY_HEALTH_CHECK_PATH} headers=${headers} + Log Received response from policy ${resp.text} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be True ${resp.json()['healthy']} + @{ITEMS}= Copy List ${resp.json()['details']} + :FOR ${ELEMENT} IN @{ITEMS} + \ Should Be Equal As Strings ${ELEMENT['code']} 200 + \ Should Be True ${ELEMENT['healthy']} +Run Policy Put Request + [Documentation] Runs Policy Put request + [Arguments] ${data_path} ${data} + Log Creating session ${POLICY_ENDPOINT} + ${session}= Create Session policy ${POLICY_ENDPOINT} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST + ${resp}= Put Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp} +Run Policy Delete Request + [Documentation] Runs Policy Delete request + [Arguments] ${data_path} ${data} + Log Creating session ${POLICY_ENDPOINT} + ${session}= Create Session policy ${POLICY_ENDPOINT} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST + ${resp}= Delete Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp} +Run Policy Get Configs Request + [Documentation] Runs Policy Get Configs request + [Arguments] ${data_path} ${data} + Log Creating session ${POLICY_ENDPOINT} + ${session}= Create Session policy ${POLICY_ENDPOINT} + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} + ${resp}= Post Request policy ${data_path} data=${data} headers=${headers} + Log Received response from policy ${resp.text} + [Return] ${resp} diff --git a/resources/config/robot/resources/sdngc_interface.robot b/resources/config/robot/resources/sdngc_interface.robot new file mode 100644 index 0000000..5b79f9a --- /dev/null +++ b/resources/config/robot/resources/sdngc_interface.robot @@ -0,0 +1,222 @@ +*** Settings *** +Documentation The main interface for interacting with SDN-GC. It handles low level stuff like managing the http request library and SDN-GC required fields +Library RequestsLibrary +Library UUID +Library OperatingSystem +Library ExtendedSelenium2Library +Library Collections +Library String +Library StringTemplater +Resource global_properties.robot +Resource ../resources/json_templater.robot +Resource browser_setup.robot + +Variables ../assets/service_mappings.py + +*** Variables *** +${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} /operations/VNF-API:preload-vnf-topology-operation +${PRELOAD_VNF_CONFIG_PATH} /config/VNF-API:preload-vnfs/vnf-preload-list +${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY} robot/assets/templates/sdnc/ +${SDNGC_INDEX_PATH} /restconf +${SDNCGC_HEALTHCHECK_OPERATION_PATH} /operations/SLI-API:healthcheck +${SDNGC_REST_ENDPOINT} ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_IP_ADDR}:${GLOBAL_SDNGC_REST_PORT} +${SDNGC_ADMIN_ENDPOINT} ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR}:${GLOBAL_SDNGC_ADMIN_PORT} +${SDNGC_ADMIN_SIGNUP_URL} ${SDNGC_ADMIN_ENDPOINT}/signup +${SDNGC_ADMIN_LOGIN_URL} ${SDNGC_ADMIN_ENDPOINT}/login +${SDNGC_ADMIN_VNF_PROFILE_URL} ${SDNGC_ADMIN_ENDPOINT}/mobility/getVnfProfile + +*** Keywords *** +Run SDNGC Health Check + [Documentation] Runs an SDNGC healthcheck + ${resp}= Run SDNGC Post Request ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH} ${None} + Should Be Equal As Strings ${resp.status_code} 200 + Should Be Equal As Strings ${resp.json()['output']['response-code']} 200 + +Run SDNGC Get Request + [Documentation] Runs an SDNGC get request + [Arguments] ${data_path} + ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD} + Log Creating session ${SDNGC_REST_ENDPOINT} + ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Get Request sdngc ${data_path} headers=${headers} + Log Received response from sdngc ${resp.text} + [Return] ${resp} + +Run SDNGC Put Request + [Documentation] Runs an SDNGC put request + [Arguments] ${data_path} ${data} + ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD} + Log Creating session ${SDNGC_REST_ENDPOINT} + ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Put Request sdngc ${data_path} data=${data} headers=${headers} + Log Received response from sdngc ${resp.text} + [Return] ${resp} + +Run SDNGC Post Request + [Documentation] Runs an SDNGC post request + [Arguments] ${data_path} ${data} + ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD} + Log Creating session ${SDNGC_REST_ENDPOINT} + ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Post Request sdngc ${data_path} data=${data} headers=${headers} + Log Received response from sdngc ${resp.text} + [Return] ${resp} + +Run SDNGC Delete Request + [Documentation] Runs an SDNGC delete request + [Arguments] ${data_path} + ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD} + Log Creating session ${SDNGC_REST_ENDPOINT} + ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth} + ${uuid}= Generate UUID + ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID} + ${resp}= Delete Request sdngc ${data_path} headers=${headers} + Log Received response from sdngc ${resp.text} + [Return] ${resp} + + +Preload Vnf + [Arguments] ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_module_name} ${vf_modules} ${service} ${uuid} + ${base_vf_module_type}= Catenate '' + ${closedloop_vf_module}= Create Dictionary + ${templates}= Get From Dictionary ${GLOBAL_SERVICE_TEMPLATE_MAPPING} ${service} + :for ${vf_module} in @{vf_modules} + \ ${vf_module_type}= Get From Dictionary ${vf_module} name + \ ${dict} Get From Mapping ${templates} ${vf_module} + \ ${filename}= Get From Dictionary ${dict} template + \ ${base_vf_module_type}= Set Variable If '${dict['isBase']}' == 'true' ${vf_module_type} ${base_vf_module_type} + \ ${closedloop_vf_module}= Set Variable If '${dict['isBase']}' == 'false' ${vf_module} ${closedloop_vf_module} + \ ${vf_name}= Update Module Name ${dict} ${vf_module_name} + \ Preload Vnf Profile ${vf_module_type} + \ Preload One Vnf Topology ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_name} ${vf_module_type} ${service} ${filename} ${uuid} + [Return] ${base_vf_module_type} ${closedloop_vf_module} + + +Update Module Name + [Arguments] ${dict} ${vf_module_name} + Return From Keyword If 'prefix' not in ${dict} ${vf_module_name} + Return From Keyword If '${dict['prefix']}' == '' ${vf_module_name} + ${name}= Replace String ${vf_module_name} Vfmodule_ ${dict['prefix']} + [Return] ${name} + +Get From Mapping + [Documentation] Retrieve the appropriate prelad template entry for the passed vf_module + [Arguments] ${templates} ${vf_module} + ${vf_module_name}= Get From DIctionary ${vf_module} name + :for ${template} in @{templates} + \ Return From Keyword If '${template['name_pattern']}' in '${vf_module_name}' ${template} + [Return] None + +Preload One Vnf Topology + [Arguments] ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_module_name} ${vf_module_type} ${service} ${filename} ${uuid} + Return From Keyword If '${filename}' == '' + ${data_template}= OperatingSystem.Get File ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/preload.template + ${parameters}= Get Template Parameters ${filename} ${uuid} + Set To Dictionary ${parameters} generic_vnf_name=${generic_vnf_name} generic_vnf_type=${generic_vnf_type} service_type=${service_type_uuid} vf_module_name=${vf_module_name} vf_module_type=${vf_module_type} uuid=${uuid} + ${data}= Fill JSON Template ${data_template} ${parameters} + ${put_resp}= Run SDNGC Post Request ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} ${data} + Should Be Equal As Strings ${put_resp.json()['output']['response-code']} 200 + ${get_resp}= Run SDNGC Get Request ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type} + Should Be Equal As Strings ${get_resp.status_code} 200 + +Get Template Parameters + [Arguments] ${template} ${uuid} + ${rest} ${suite}= Split String From Right ${SUITE NAME} . 1 + ${uuid}= Catenate ${uuid} + ${hostid}= Get Substring ${uuid} -4 + ${ecompnet}= Evaluate ${GLOBAL_BUILD_NUMBER}%255 + # Initialize the value map with the properties generated from the Robot VM /opt/config folder + ${valuemap}= Create Dictionary + Set To Dictionary ${valuemap} artifacts_version=${GLOBAL_INJECTED_ARTIFACTS_VERSION} + Set To Dictionary ${valuemap} network=${GLOBAL_INJECTED_NETWORK} + Set To Dictionary ${valuemap} public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID} + Set To Dictionary ${valuemap} cloud_env=${GLOBAL_INJECTED_CLOUD_ENV} + Set To Dictionary ${valuemap} install_script_version=${GLOBAL_INJECTED_SCRIPT_VERSION} + Set To Dictionary ${valuemap} vm_image_name=${GLOBAL_INJECTED_VM_IMAGE_NAME} + Set To Dictionary ${valuemap} vm_flavor_name=${GLOBAL_INJECTED_VM_FLAVOR} + # update the value map with unique values. + Set To Dictionary ${valuemap} uuid=${uuid} hostid=${hostid} ecompnet=${ecompnet} + ${parameters}= Create Dictionary + ${defaults}= Get From Dictionary ${GLOBAL_PRELOAD_PARAMETERS} defaults + Resolve Values Into Dictionary ${valuemap} ${defaults} ${parameters} + ${suite_templates}= Get From Dictionary ${GLOBAL_PRELOAD_PARAMETERS} ${suite} + ${template}= Get From Dictionary ${suite_templates} ${template} + ${vnf_parameters}= Resolve VNF Parameters Into Array ${valuemap} ${template} ${parameters} + ${vnf_parameters_json}= Evaluate json.dumps(${vnf_parameters}) json + Set To Dictionary ${parameters} vnf_parameters=${vnf_parameters_json} + [Return] ${parameters} + +Resolve Values Into Dictionary + [Arguments] ${valuemap} ${from} ${to} + ${keys}= Get Dictionary Keys ${from} + :for ${key} in @{keys} + \ ${value}= Get From Dictionary ${from} ${key} + \ ${value}= Template String ${value} ${valuemap} + \ Set To Dictionary ${to} ${key} ${value} + +Resolve VNF Parameters Into Array + [Arguments] ${valuemap} ${from} ${to} + ${vnf_parameters}= Create List + ${keys}= Get Dictionary Keys ${from} + :for ${key} in @{keys} + \ ${value}= Get From Dictionary ${from} ${key} + \ ${value}= Template String ${value} ${valuemap} + \ ${parameter}= Create Dictionary vnf-parameter-name=${key} vnf-parameter-value=${value} + \ Append To List ${vnf_parameters} ${parameter} + [Return] ${vnf_parameters} + +Preload Vnf Profile + [Arguments] ${vnf_name} + Login To SDNGC Admin GUI + Go To ${SDNGC_ADMIN_VNF_PROFILE_URL} + Click Button xpath=//button[@data-target='#add_vnf_profile'] + Input Text xpath=//input[@id='nf_vnf_type'] ${vnf_name} + Input Text xpath=//input[@id='nf_availability_zone_count'] 999 + Input Text xpath=//input[@id='nf_equipment_role'] robot-ete-test + Click Button xpath=//button[contains(.,'Submit')] + Page Should Contain VNF Profile + Input Text xpath=//div[@id='vnf_profile_filter']//input ${vnf_name} + Page Should Contain ${vnf_name} + +Delete Vnf Profile + [Arguments] ${vnf_name} + Login To SDNGC Admin GUI + Go To ${SDNGC_ADMIN_VNF_PROFILE_URL} + Page Should Contain VNF Profile + Input Text xpath=//div[@id='vnf_profile_filter']//input ${vnf_name} + Page Should Contain ${vnf_name} + Click Button xpath=//button[contains(@onclick, '${vnf_name}')] + Page Should Contain Are you sure you want to delete VNF_PROFILE + Click Button xpath=//button[contains(text(), 'Yes')] + Page Should Not Contain ${vnf_name} + +Login To SDNGC Admin GUI + [Documentation] Login To SDNGC Admin GUI + ## Setup Browser is now being managed by the test case + ## Setup Browser + Go To ${SDNGC_ADMIN_SIGNUP_URL} + ##Maximize Browser Window + Set Selenium Speed ${GLOBAL_SELENIUM_DELAY} + Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} + Log Logging in to ${SDNGC_ADMIN_LOGIN_URL} + Handle Proxy Warning + Title Should Be AdminPortal + ${uuid}= Generate UUID + ${shortened_uuid}= Evaluate str("${uuid}")[:12] + ${email}= Catenate ${shortened_uuid}@robotete.com + Input Text xpath=//input[@id='nf_email'] ${email} + Input Password xpath=//input[@id='nf_password'] ${shortened_uuid} + Click Button xpath=//button[@type='submit'] + Wait Until Page Contains User created 20s + Go To ${SDNGC_ADMIN_LOGIN_URL} + Input Text xpath=//input[@id='email'] ${email} + Input Password xpath=//input[@id='password'] ${shortened_uuid} + Click Button xpath=//button[@type='submit'] + Title Should Be SDN-C AdminPortal + Log Logged in to ${SDNGC_ADMIN_LOGIN_URL} diff --git a/templates/robot-dep-configmap.yaml b/templates/robot-dep-configmap.yaml new file mode 100644 index 0000000..94e359d --- /dev/null +++ b/templates/robot-dep-configmap.yaml @@ -0,0 +1,25 @@ +#{{ if not .Values.disableRobot }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: robot-eteshare-configmap + namespace: {{ .Values.nsPrefix }} +data: +{{ tpl (.Files.Glob "resources/config/eteshare/config/*").AsConfig . | indent 2 }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: robot-resources-configmap + namespace: {{ .Values.nsPrefix }} +data: +{{ tpl (.Files.Glob "resources/config/robot/resources/*").AsConfig . | indent 2 }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: lighttpd-authorization-configmap + namespace: {{ .Values.nsPrefix }} +data: +{{ tpl (.Files.Glob "resources/config/authorization").AsConfig . | indent 2 }} +#{{ end }} diff --git a/templates/robot-deployment.yaml b/templates/robot-deployment.yaml index a978ff4..9f936e8 100644 --- a/templates/robot-deployment.yaml +++ b/templates/robot-deployment.yaml @@ -24,15 +24,19 @@ spec: mountPath: /etc/localtime readOnly: true - name: robot-eteshare - mountPath: /share - - name: robot-resources-asdc-interface + mountPath: /share/config + - name: robot-resources mountPath: /var/opt/OpenECOMP_ETE/robot/resources/asdc_interface.robot - - name: robot-resources-policy-interface + subPath: asdc_interface.robot + - name: robot-resources mountPath: /var/opt/OpenECOMP_ETE/robot/resources/policy_interface.robot - - name: robot-resources-sdngc-interface + subPath: policy_interface.robot + - name: robot-resources mountPath: /var/opt/OpenECOMP_ETE/robot/resources/sdngc_interface.robot + subPath: sdngc_interface.robot - name: lighttpd-authorization mountPath: /etc/lighttpd/authorization + subPath: authorization ports: - containerPort: 88 readinessProbe: @@ -45,20 +49,15 @@ spec: hostPath: path: /etc/localtime - name: robot-eteshare - hostPath: - path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/eteshare - - name: robot-resources-asdc-interface - hostPath: - path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/asdc_interface.robot - - name: robot-resources-policy-interface - hostPath: - path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/policy_interface.robot - - name: robot-resources-sdngc-interface - hostPath: - path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/sdngc_interface.robot + configMap: + name: robot-eteshare-configmap + defaultMode: 0755 + - name: robot-resources + configMap: + name: robot-resources-configmap - name: lighttpd-authorization - hostPath: - path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/authorization + configMap: + name: lighttpd-authorization-configmap imagePullSecrets: - name: "{{ .Values.nsPrefix }}-docker-registry-key" #{{ end }} diff --git a/values.yaml b/values.yaml index 6aadd93..ea5d2ae 100644 --- a/values.yaml +++ b/values.yaml @@ -2,6 +2,18 @@ nsPrefix: onap pullPolicy: Always nodePortPrefix: 302 robotReplicas: 1 +demoArtifactsVersion: "1.1.0-SNAPSHOT" +openStackPrivateNetCidr: "192.168.30.0" +openStackFlavourMedium: "m1.medium" +openStackKeyStoneUrl: "http://1.2.3.4:5000" +openStackPublicNetId: "e8f51958045716781ffc" +openStackPrivateNetId: "e8f51956-00dd-4425-af36-045716781ffc" +openStackOamNetworkCidrPrefix: "192.168.120" +openStackEncryptedPassword: "c124921a3a0efbe579782cde8227681e" +openStackRegion: "RegionOne" +openStackPrivateSubnetId: "e8f51956-00dd-4425-af36-045716781ffc" +openStackTenantId: "47899782ed714295b1151681fdfd51f5" +openStackUserName: "vnf_user" +ubuntuImage: "Ubuntu_14.04.5_LTS" image: testsuite: nexus3.onap.org:10001/openecomp/testsuite:1.1-STAGING-latest - |