aboutsummaryrefslogtreecommitdiffstats
path: root/test/csit
diff options
context:
space:
mode:
Diffstat (limited to 'test/csit')
-rw-r--r--test/csit/plans/aaf/aafapi/setup.sh17
-rw-r--r--test/csit/plans/aaf/aafapi/teardown.sh6
-rwxr-xr-xtest/csit/plans/appc/healthcheck/setup.sh7
-rwxr-xr-xtest/csit/plans/appc/healthcheck/teardown.sh3
-rwxr-xr-xtest/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh3
-rwxr-xr-xtest/csit/plans/dmaap-buscontroller/with_mr/setup.sh52
-rw-r--r--test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh5
-rw-r--r--test/csit/plans/multicloud-ocata/functionality1/setup.sh16
-rw-r--r--test/csit/plans/sdnc/healthcheck/setup.sh3
-rw-r--r--test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh2
-rwxr-xr-xtest/csit/scripts/common_functions.sh17
-rwxr-xr-xtest/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh17
-rwxr-xr-xtest/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh9
-rw-r--r--test/csit/scripts/externalapi-nbi/start_nbi_containers.sh23
-rw-r--r--test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap32
-rwxr-xr-xtest/csit/scripts/optf-has/has/has_script.sh2
-rw-r--r--test/csit/scripts/so/chef-config/mso-docker.json12
-rw-r--r--test/csit/tests/clamp/UIs/02__Create_TCA_model.robot4
-rw-r--r--test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot4
-rw-r--r--test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json34
-rw-r--r--test/csit/tests/dcaegen2/testcases/dcae_ves.robot56
-rw-r--r--test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot71
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_hpa.json230
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json165
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json217
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json129
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json117
-rw-r--r--test/csit/tests/optf-has/has/data/plan_with_vim_fit.json89
-rw-r--r--test/csit/tests/optf-has/has/optf_has_test.robot185
-rw-r--r--test/csit/tests/portal/testsuites/test1.robot385
30 files changed, 1650 insertions, 262 deletions
diff --git a/test/csit/plans/aaf/aafapi/setup.sh b/test/csit/plans/aaf/aafapi/setup.sh
index 4a312704f..add9ae17e 100644
--- a/test/csit/plans/aaf/aafapi/setup.sh
+++ b/test/csit/plans/aaf/aafapi/setup.sh
@@ -37,12 +37,15 @@ chmod -R 777 $WORKSPACE/archives/aafcsit/authz/auth/auth-service/src/main/resour
# start aaf containers with docker compose and configuration from docker-compose.yml
docker-compose up -d
+export aaf_service=$(get_docker_compose_service aaf_container)
+export cassandra_service=$(get_docker_compose_service cassandra_container)
-# Wait for initialization of Docker contaienr for AAF & Cassandra
+# Wait for initialization of Docker container for AAF & Cassandra
for i in {1..12}; do
- if [ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ] && \
- [ $(docker inspect --format '{{ .State.Running }}' dockercompose_cassandra_container_1) ] && \
- [ $(docker inspect --format '{{ .State.Running }}' dockercompose_aaf_container_1) ]
+
+ if [ $(docker inspect --format '{{ .State.Running }}' $aaf_service) ] && \
+ [ $(docker inspect --format '{{ .State.Running }}' $cassandra_service) ] && \
+ [ $(docker inspect --format '{{ .State.Running }}' $aaf_service) ]
then
echo "AAF Service Running"
break
@@ -53,9 +56,11 @@ for i in {1..12}; do
done
-AAF_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_aaf_container_1)
-CASSANDRA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dockercompose_cassandra_container_1)
+AAF_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $aaf_service)
+CASSANDRA_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $cassandra_service)
+bypass_ip_adress $AAF_IP
+bypass_ip_adress $CASSANDRA_IP
echo AAF_IP=${AAF_IP}
echo CASSANDRA_IP=${CASSANDRA_IP}
diff --git a/test/csit/plans/aaf/aafapi/teardown.sh b/test/csit/plans/aaf/aafapi/teardown.sh
index 1f7b2853d..41e0b00ea 100644
--- a/test/csit/plans/aaf/aafapi/teardown.sh
+++ b/test/csit/plans/aaf/aafapi/teardown.sh
@@ -17,6 +17,8 @@
# Modifications copyright (c) 2017 AT&T Intellectual Property
#
-kill-instance.sh dockercompose_aaf_container_1
-kill-instance.sh dockercompose_cassandra_container_1
+kill-instance.sh $aaf_service
+kill-instance.sh $cassandra_service
+unset aaf_service
+unset cassandra_service
diff --git a/test/csit/plans/appc/healthcheck/setup.sh b/test/csit/plans/appc/healthcheck/setup.sh
index f47685334..ef79483b4 100755
--- a/test/csit/plans/appc/healthcheck/setup.sh
+++ b/test/csit/plans/appc/healthcheck/setup.sh
@@ -48,8 +48,11 @@ sed -i "s/DMAAP_TOPIC_ENV=.*/DMAAP_TOPIC_ENV="$DMAAP_TOPIC"/g" docker-compose.ym
docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO
docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-image:$APPC_DOCKER_IMAGE_VERSION
docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-image:$APPC_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/appc-image:latest
-docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
-docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest
+docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/ccsdk-dgbuilder-image:latest
+docker pull $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-cdt-image:$APPC_DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/${SOLUTION_NAME}/appc-cdt-image:$APPC_DOCKER_IMAGE_VERSION ${SOLUTION_NAME}/appc-cdt-image:latest
+
# start APPC containers with docker compose and configuration from docker-compose.yml
docker-compose up -d
# WAIT 5 minutes maximum and test every 5 seconds if APPC is up using HealthCheck API
diff --git a/test/csit/plans/appc/healthcheck/teardown.sh b/test/csit/plans/appc/healthcheck/teardown.sh
index 357ead8aa..94d1bc778 100755
--- a/test/csit/plans/appc/healthcheck/teardown.sh
+++ b/test/csit/plans/appc/healthcheck/teardown.sh
@@ -18,7 +18,8 @@
#
kill-instance.sh appc_controller_container
-kill-instance.sh sdnc_dgbuilder_container
+kill-instance.sh ccsdk_dgbuilder_container
+kill-instance.sh appc_cdt_container
kill-instance.sh sdnc_db_container
# $WORKSPACE/archives/appc deleted with archives folder when tests starts so we keep it at the end for debugging
diff --git a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
index a19454be5..d5c77b0bd 100755
--- a/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/mock_downstream/setup.sh
@@ -40,3 +40,6 @@ echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
# Pass any variables required by Robot test suites in ROBOT_VARIABLES
ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+set -x
+${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+set +x
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
index 35534de0b..3b604fe99 100755
--- a/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/setup.sh
@@ -20,25 +20,35 @@
#
#
-
-# Place the scripts in run order:
-source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
-dmaap_mr_launch
-MRC_IP=${IP}
-
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
-#start_mock "aaf"
-AAF_IP=${IP}
-start_mock "drps"
-DRPS_IP=${IP}
-
-source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
-dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
-DMAAPBC_IP=${IP}
-
-
-echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
-
-# Pass any variables required by Robot test suites in ROBOT_VARIABLES
-ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+if [ "$USE_EXISTING_DMAAP" = "Y" ]
+then
+ ROBOT_VARIABLES="-v AAF_IP:0.0.0 -v MRC_IP:172.18.0.3 -v DRPS_IP:0.0.0.0 -v DMAAPBC_IP:172.17.0.4"
+else
+
+ # Place the scripts in run order:
+ source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-launch.sh
+ dmaap_mr_launch
+ MRC_IP=${IP}
+
+ source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/start-mock.sh
+ #start_mock "aaf"
+ #AAF_IP=${IP}
+ AAF_IP=0.0.0.0
+ #start_mock "drps"
+ #DRPS_IP=${IP}
+ DRPS_IP=0.0.0.0
+
+ source ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
+ dmaapbc_launch $AAF_IP $MRC_IP $DRPS_IP
+ DMAAPBC_IP=${IP}
+
+
+ echo "AAF_IP=$AAF_IP MRC_IP=$MRC_IP DRPS_IP=$DRPS_IP DMAAPBC_IP=$DMAAPBC_IP"
+
+ # Pass any variables required by Robot test suites in ROBOT_VARIABLES
+ ROBOT_VARIABLES="-v AAF_IP:${AAF_IP} -v MRC_IP:${MRC_IP} -v DRPS_IP:${DRPS_IP} -v DMAAPBC_IP:${DMAAPBC_IP}"
+ set -x
+ ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${DMAAPBC_IP} ${DRPS_IP} ${MRC_IP}
+ set +x
+fi
diff --git a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
index 0474dded6..f35b02259 100644
--- a/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
+++ b/test/csit/plans/dmaap-buscontroller/with_mr/teardown.sh
@@ -21,8 +21,9 @@
#
source ${WORKSPACE}/test/csit/scripts/dmaap-message-router/dmaap-mr-teardown.sh
+if [ "$KEEP_DMAAP" != "Y" ]
+then
dmaap_mr_teardown
-kill-instance.sh aaf-mock
-kill-instance.sh drps-mock
kill-instance.sh dmaapbc
+fi
diff --git a/test/csit/plans/multicloud-ocata/functionality1/setup.sh b/test/csit/plans/multicloud-ocata/functionality1/setup.sh
index 75411781e..b674fa61d 100644
--- a/test/csit/plans/multicloud-ocata/functionality1/setup.sh
+++ b/test/csit/plans/multicloud-ocata/functionality1/setup.sh
@@ -11,16 +11,17 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#
-# Place the scripts in run order:
-# Start all process required for executing test case
-
-source ${SCRIPTS}/common_functions.sh
+pushd ${SCRIPTS}
# start multicloud-ocata
-docker run -d --name multicloud-ocata nexus3.onap.org:10001/onap/multicloud/openstack-ocata
-SERVICE_IP=`get-instance-ip.sh multicloud-ocata`
+./run-instance.sh nexus3.onap.org:10001/onap/multicloud/openstack-ocata:latest multicloud-ocata
+SERVICE_IP=$(./get-instance-ip.sh multicloud-ocata)
SERVICE_PORT=9006
+popd
+
+if [[ $no_proxy && $no_proxy != *$SERVICE_IP* ]]; then
+ export no_proxy+=$no_proxy,$SERVICE_IP
+fi
for i in {1..50}; do
curl -sS ${SERVICE_IP}:${SERVICE_PORT} && break
@@ -28,7 +29,6 @@ for i in {1..50}; do
sleep $i
done
-echo SCRIPTS
# Pass any variables required by Robot test suites in ROBOT_VARIABLES
ROBOT_VARIABLES+="-v SERVICE_IP:${SERVICE_IP} "
ROBOT_VARIABLES+="-v SERVICE_PORT:${SERVICE_PORT} "
diff --git a/test/csit/plans/sdnc/healthcheck/setup.sh b/test/csit/plans/sdnc/healthcheck/setup.sh
index 0b906f4f2..a8119f616 100644
--- a/test/csit/plans/sdnc/healthcheck/setup.sh
+++ b/test/csit/plans/sdnc/healthcheck/setup.sh
@@ -49,6 +49,9 @@ docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO
docker pull $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION
docker tag $NEXUS_DOCKER_REPO/onap/sdnc-image:$DOCKER_IMAGE_VERSION onap/sdnc-image:latest
+docker pull $NEXUS_DOCKER_REPO/onap/sdnc-ansible-server-image:$DOCKER_IMAGE_VERSION
+docker tag $NEXUS_DOCKER_REPO/onap/sdnc-ansible-server-image:$DOCKER_IMAGE_VERSION onap/sdnc-ansible-server-image:latest
+
docker pull $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION
docker tag $NEXUS_DOCKER_REPO/onap/ccsdk-dgbuilder-image:$CCSDK_DOCKER_IMAGE_VERSION onap/ccsdk-dgbuilder-image:latest
diff --git a/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh b/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
index d1930cef5..ecee227f9 100644
--- a/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
+++ b/test/csit/plans/vnfsdk-refrepo/sanity-check/setup.sh
@@ -23,7 +23,7 @@ docker run -d -i -t --name=postgres -p 5432:5432 nexus3.onap.org:10001/onap/vn
POSTGRES=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' postgres`
#Start market place
-docker run -d -i -t --name=refrepo -e POSTGRES_IP=$POSTGRES -p 8702:8702 nexus3.onap.org:10001/onap/vnfsdk/refrepo:1.1-STAGING-latest
+docker run -d -i -t --name=refrepo -e POSTGRES_SERVICE_HOST=$POSTGRES -p 8702:8702 nexus3.onap.org:10001/onap/vnfsdk/refrepo:1.1-STAGING-latest
# Wait for Market place initialization
echo Wait for VNF Repository initialization
diff --git a/test/csit/scripts/common_functions.sh b/test/csit/scripts/common_functions.sh
index 69856dab3..4293a526c 100755
--- a/test/csit/scripts/common_functions.sh
+++ b/test/csit/scripts/common_functions.sh
@@ -233,3 +233,20 @@ function run_simulator_docker ()
ROBOT_VARIABLES=${ROBOT_VARIABLES}" -v SIMULATOR_IP:${SIMULATOR_IP} -v SCRIPTS:${SCRIPTS}"
echo ${ROBOT_VARIABLES}
}
+
+function get_docker_compose_service ()
+{
+ local service=$1
+ local compose_file=${2:-docker-compose.yml}
+
+ echo $(docker-compose --file ./${compose_file} ps | grep $service | cut -d " " -f1 )
+}
+
+function bypass_ip_adress ()
+{
+ local ip_address=$1
+
+ if [[ $no_proxy && $no_proxy != *$ip_address* ]]; then
+ export no_proxy=$no_proxy,$ip_address
+ fi
+}
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
index 7ec7345d5..96ac40f18 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh
@@ -17,6 +17,7 @@ cat << EOF > $JSON
}
EOF
+echo "Initializing /dmaap endpoint"
curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dmaap
@@ -33,20 +34,28 @@ cat << EOF > $JSON
}
EOF
+echo "Initializing /dcaeLocations endpoint"
curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/dcaeLocations
# INITIALIZE: MR object in 1 site
+# since MR is currently deployed via docker-compose, its IP doesn't seem
+# to be routable from DBCL. Fortunately, the MR port is mapped from the docker bridge IP address.
+# Found this article for how to deterine the docker bridge IP so using it as a workaround.
+# https://stackoverflow.com/questions/22944631/how-to-get-the-ip-address-of-the-docker-host-from-inside-a-docker-container
+# Used the following snippet found buried in a comment to an answer and then modified for only 1 value.
+DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+' | head -1 )
+# Perhaps there is a better way...
JSON=/tmp/$$.mrc
cat << EOF > $JSON
{
"dcaeLocationName": "csit-sanfrancisco",
- "fqdn": "$3",
- "hosts" : [ "$3", "$3", "$3" ],
- "protocol" : "https",
- "port": "3094"
+ "fqdn": "$DOCKER_HOST",
+ "topicProtocol" : "http",
+ "topicPort": "3904"
}
EOF
+echo "Initializing /mr_clusters endpoint"
curl -v -X POST -d @${JSON} -H "Content-Type: application/json" http://$1:8080/webapi/mr_clusters
diff --git a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
index 72c443850..688ce7d45 100755
--- a/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
+++ b/test/csit/scripts/dmaap-buscontroller/dmaapbc-launch.sh
@@ -4,13 +4,13 @@
# sets global var IP with assigned IP address
function dmaapbc_launch() {
- TAG=onap/dmaap/buscontroller
+ TAG="nexus3.onap.org:10001/onap/dmaap/buscontroller"
CONTAINER_NAME=dmaapbc
IP=""
cd ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller
- TMP_CFG=/tmp/docker-databys-controller.conf
+ TMP_CFG=/tmp/docker-databus-controller.conf
. ./onapCSIT.env > $TMP_CFG
docker run -d --name $CONTAINER_NAME -v $TMP_CFG:/opt/app/config/conf $TAG
IP=`get-instance-ip.sh ${CONTAINER_NAME}`
@@ -22,9 +22,4 @@ function dmaapbc_launch() {
sleep $i
done
- set -x
- ${WORKSPACE}/test/csit/scripts/dmaap-buscontroller/dmaapbc-init.sh ${IP}
- set +x
-
-
}
diff --git a/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh b/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
index 7237a1fbc..24de74099 100644
--- a/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
+++ b/test/csit/scripts/externalapi-nbi/start_nbi_containers.sh
@@ -34,18 +34,33 @@ docker login -u $NEXUS_USERNAME -p $NEXUS_PASSWD $NEXUS_DOCKER_REPO
docker pull $NEXUS_DOCKER_REPO/onap/externalapi/nbi:$DOCKER_IMAGE_VERSION
# Start nbi, MariaDB and MongoDB containers with docker compose and nbi/docker-compose.yml
-docker-compose up -d mariadb mongo && sleep 5 # to ensure that these services are ready for connections
+docker-compose up -d mariadb mongo
+
+# inject a script to ensure that these services are ready for connections
+docker-compose run --rm --entrypoint='/bin/sh' nbi -c '\
+ attempt=1; \
+ while ! nc -z mariadb 3306 || ! nc -z mongo 27017; do \
+ if [ $attempt = 30 ]; then \
+ echo "Timed out!"; \
+ exit 1; \
+ fi; \
+ echo "waiting for db services (attempt #$attempt)..."; \
+ sleep 1; \
+ attempt=$(( attempt + 1)); \
+ done; \
+ echo "all db services are ready for connections!" \
+'
+
docker-compose up -d nbi
NBI_CONTAINER_NAME=$(docker-compose ps 2> /dev/null | tail -n+3 | tr -s ' ' | cut -d' ' -f1 | grep _nbi_)
-NBI_IP=$(docker inspect $NBI_CONTAINER_NAME --format='{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}')
+NBI_IP=$(docker inspect --format='{{ range .NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}' ${NBI_CONTAINER_NAME})
echo "IP address for NBI main container ($NBI_CONTAINER_NAME) is set to ${NBI_IP}."
# Wait for initialization
for i in {1..30}; do
- curl -sS ${NBI_IP}:8080 > /dev/null 2>&1 && break
+ curl -sS ${NBI_IP}:8080 > /dev/null 2>&1 && echo 'nbi initialized' && break
echo sleep $i
sleep $i
done
-
diff --git a/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap b/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
index 0f9e7494d..a8e84846c 100644
--- a/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
+++ b/test/csit/scripts/optf-has/has/has-properties/conductor.conf.onap
@@ -314,7 +314,7 @@ aafns = conductor
#table_prefix = sdnc
# Base URL for SDN-C. (string value)
-server_url = http://localhost:8082/restconf/
+server_url = http://localhost:8083/restconf/
# Basic Authentication Username (string value)
username = admin
@@ -346,3 +346,33 @@ extensions = sdnc
# solver will restart any orphaned solving requests at startup. (boolean value)
#concurrent = false
+
+[multicloud]
+
+#
+# From conductor
+#
+
+# Base URL for Multicloud without a trailing slash. (string value)
+server_url = http://msb.onap.org:8082/api/multicloud
+
+# Timeout for Multicloud Rest Call (string value)
+multicloud_rest_timeout = 30
+
+# Number of retry for Multicloud Rest Call (string value)
+multicloud_retries = 3
+
+# The version of Multicloud API. (string value)
+server_url_version = v0
+
+
+
+[vim_controller]
+
+#
+# From conductor
+#
+
+# Extensions list to use (list value)
+extensions = multicloud
+
diff --git a/test/csit/scripts/optf-has/has/has_script.sh b/test/csit/scripts/optf-has/has/has_script.sh
index ac907eea1..ee5479e10 100755
--- a/test/csit/scripts/optf-has/has/has_script.sh
+++ b/test/csit/scripts/optf-has/has/has_script.sh
@@ -60,7 +60,7 @@ MULTICLOUDSIM_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.I
echo "MULTICLOUDSIM_IP=${MULTICLOUDSIM_IP}"
# change MULTICLOUD reference to the local instance
-sed -i -e "s%localhost:8082/%${MULTICLOUDSIM_IP}:8082/%g" /tmp/conductor/properties/conductor.conf
+sed -i -e "s%msb.onap.org:8082/%${MULTICLOUDSIM_IP}:8082/%g" /tmp/conductor/properties/conductor.conf
#onboard conductor into music
curl -vvvvv --noproxy "*" --request POST http://${MUSIC_IP}:8080/MUSIC/rest/v2/admin/onboardAppWithMusic -H "Content-Type: application/json" --data @${WORKSPACE}/test/csit/tests/optf-has/has/data/onboard.json
diff --git a/test/csit/scripts/so/chef-config/mso-docker.json b/test/csit/scripts/so/chef-config/mso-docker.json
index 13b0d22fc..120db1176 100644
--- a/test/csit/scripts/so/chef-config/mso-docker.json
+++ b/test/csit/scripts/so/chef-config/mso-docker.json
@@ -171,7 +171,7 @@
"sniroTimeout": "PT30M",
"serviceAgnosticSniroHost": "http://sniro.api.simpledemo.openecomp.org:8080",
"serviceAgnosticSniroEndpoint": "/sniro/api/v2/placement",
- "aaiEndpoint": "https://aai.api.simpledemo.openecomp.org:8443",
+ "aaiEndpoint": "https://aai.api.simpledemo.onap.org:8443",
"aaiAuth": "2630606608347B7124C244AB0FE34F6F",
"adaptersNamespace": "http://org.openecomp.mso",
"adaptersCompletemsoprocessEndpoint": "http://mso:8080/CompleteMsoProcess",
@@ -204,6 +204,16 @@
"sdncTimeoutFirewall": "20",
"callbackRetryAttempts": "30",
"callbackRetrySleepTime": "1000",
+ "appcClientTopicRead": "APPC-LCM-READ",
+ "appcClientTopicWrite": "APPC-LCM-WRITE",
+ "appcClientTopicSdncRead": "SDNC-LCM-READ",
+ "appcClientTopicSdncWrite": "SDNC-LCM-WRITE",
+ "appcClientTopicReadTimeout": "360000",
+ "appcClientResponseTime": "360000",
+ "appcClientPoolMembers": "10.0.11.1:3904",
+ "appcClientKey": "VIlbtVl6YLhNUrtU",
+ "appcClientSecret": "64AG2hF4pYeG2pq7CT6XwUOT",
+ "appcClientService": "ueb",
"workflowL3ToHigherLayerAddBondingModelName": "WAN Bonding",
"workflowL3ToHigherLayerAddBondingModelVersion": "2.0"
}
diff --git a/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot b/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
index 99d93c312..7349f63bb 100644
--- a/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
+++ b/test/csit/tests/clamp/UIs/02__Create_TCA_model.robot
@@ -50,7 +50,7 @@ Set Properties for TCAModel1
Click Element locator=Properties CL
Select From List By Label id=service vLoadBalancer
Select From List By Label id=vf vLoadBalancer 0
- Select From List By Label id=actionSet eNodeB
+ Select From List By Label id=actionSet VNF
Select From List By Label id=location Data Center 1 Data Center 3
Click Button locator=Save
@@ -59,7 +59,7 @@ Set Policy Box properties for TCAModel1
Click Element xpath=//*[@data-element-id="Policy_12lup3h"]
Click Button locator=New Policy
Input Text locator=//*[@id="pname"] text=Policy2
- Select From List By Label id=recipe Reset
+ Select From List By Label id=recipe Restart
Input Text locator=maxRetries text=6
Input Text locator=retryTimeLimit text=280
Input Text locator=timeout text=400
diff --git a/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot b/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
index 70cbf1262..a9cb78749 100644
--- a/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
+++ b/test/csit/tests/clamp/UIs/03__Verify_UI_Models.robot
@@ -30,11 +30,11 @@ Verify TCAModel1
${resp}= Get Request clamp /restservices/clds/v1/clds/model/TCAModel1
Should Contain Match ${resp} *templateTCA1*
Should Contain Match ${resp} *c95b0e7c-c1f0-4287-9928-7964c5377a46*
- Should Contain Match ${resp} *enbRecipe*
+ Should Contain Match ${resp} *vnfRecipe*
Should Contain Match ${resp} *DC1*
Should Contain Match ${resp} *DC3*
Should Contain Match ${resp} *Policy2*
- Should Contain Match ${resp} *reset*
+ Should Contain Match ${resp} *restart*
Should Contain Match ${resp} *280*
Should Contain Match ${resp} *400*
diff --git a/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json b/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
new file mode 100644
index 000000000..49d77eb17
--- /dev/null
+++ b/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
@@ -0,0 +1,34 @@
+{
+ "event": {
+ "commonEventHeader": {
+ "domain": "other",
+ "eventName": "pnfRegistration_5GDU",
+ "eventId": "QTFCOC540002E-reg",
+ "eventType": "pnfRegistration",
+ "internalHeaderFields": {},
+ "lastEpochMicrosec": 1519837825682,
+ "nfNamingCode": "5GRAN",
+ "nfcNamingCode": "5DU",
+ "priority": "Normal",
+ "reportingEntityName": "5GRAN_DU",
+ "sequence": 0,
+ "sourceId": "QTFCOC540002E",
+ "sourceName": "5GRAN_DU",
+ "startEpochMicrosec": 1519837825682,
+ "version": 3
+ },
+ "otherFields": {
+ "pnfVendorName": "Nokia",
+ "pnfOamIpv4Address": "10.16.123.234",
+ "pnfOamIpv6Address": "<<NONE>>",
+ "pnfFamily": "BBU",
+ "pnfType": "AirScale",
+ "pnfModelNumber": "AJ02",
+ "pnfSerialNumber": "QTFCOC540002E",
+ "pnfSoftwareVersion": "v4.5.0.1",
+ "pnfManufactureDate": 1516406400,
+ "pnfLastServiceDate": 1517206400,
+ "otherFieldsVersion": 1
+ }
+ }
+} \ No newline at end of file
diff --git a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
index 47ce5f14d..393359f54 100644
--- a/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
+++ b/test/csit/tests/dcaegen2/testcases/dcae_ves.robot
@@ -1,6 +1,5 @@
*** Settings ***
Documentation Testing DCAE VES Listener with various event feeds from VoLTE, vDNS, vFW and cCPE use scenarios
-
Library RequestsLibrary
Library OperatingSystem
Library Collections
@@ -10,9 +9,6 @@ Test Setup Cleanup VES Events
Suite Setup VES Collector Suite Setup DMaaP
Suite Teardown VES Collector Suite Shutdown DMaaP
-
-
-
*** Variables ***
${VESC_URL_HTTPS} https://%{VESC_IP}:8443
${VESC_URL} http://%{VESC_IP}:8080
@@ -25,7 +21,7 @@ ${EVENT_MEASURE_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/t
${EVENT_DATA_FILE_BAD} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_single_fault_event_bad.json
${EVENT_BATCH_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_eventlist_batch.json
${EVENT_THROTTLING_STATE_DATA_FILE} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_volte_fault_provide_throttle_state.json
-
+${EVENT_PNF_REGISTRATION} %{WORKSPACE}/test/csit/tests/dcaegen2/testcases/assets/json_events/ves_pnf_registration_event.json
#DCAE Health Check
${CONFIG_BINDING_URL} http://localhost:8443
@@ -34,9 +30,7 @@ ${CB_SERVICE_COMPONENT_PATH} /service_component/
${VES_Service_Name1} dcae-controller-ves-collector
${VES_Service_Name2} ves-collector-not-exist
-
*** Test Cases ***
-
VES Collector Health Check
[Tags] DCAE-VESC-R1
[Documentation] Ves Collector Health Check
@@ -44,8 +38,7 @@ VES Collector Health Check
${session}= Create Session dcae ${VESC_URL}
${headers}= Create Dictionary Accept=*/* X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
${resp}= Get Request dcae /healthcheck headers=${headers}
- Should Be Equal As Strings ${resp.status_code} 200
-
+ Should Be Equal As Strings ${resp.status_code} 200
Publish Single VES VoLTE Fault Event
[Tags] DCAE-VESC-R1
@@ -82,8 +75,7 @@ Publish VES VoLTE Fault Batch Events
Should Be Equal As Strings ${resp.status_code} 200
#${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546016
${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546025
- Should Be Equal As Strings ${ret} true
-
+ Should Be Equal As Strings ${ret} true
Publish Single VES VoLTE Fault Event With Bad Data
[Tags] DCAE-VESC-R1
@@ -105,8 +97,7 @@ Publish VES Event With Invalid Method
Log Send HTTP Request with invalid method Put instead of Post
${resp}= Publish Event To VES Collector With Put Method No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 404
-
+ Should Be Equal As Strings ${resp.status_code} 404
Publish VES Event With Invalid URL Path
[Tags] DCAE-VESC-R1
@@ -116,8 +107,7 @@ Publish VES Event With Invalid URL Path
Log Send HTTP Request with invalid /listener/v5/ instead of /eventListener/v5 path
${resp}= Publish Event To VES Collector No Auth ${VESC_URL} /listener/v5/ ${headers} ${evtdata}
Log Receive HTTP Status code ${resp.status_code}
- Should Be Equal As Strings ${resp.status_code} 404
-
+ Should Be Equal As Strings ${resp.status_code} 404
#Enable VESC HTTPS And Basic Auth
#[Tags] DCAE-VESC-R1
@@ -142,8 +132,7 @@ Publish Single VES Fault Event Over HTTPS
${isEmpty}= Is Json Empty ${resp}
Run Keyword If '${isEmpty}' == False Log ${resp.json()}
${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546015
- Should Be Equal As Strings ${ret} true
-
+ Should Be Equal As Strings ${ret} true
Publish Single VES Measurement Event Over HTTPS
[Tags] DCAE-VESC-R1
@@ -169,7 +158,6 @@ Publish VES Fault Batch Events Over HTTPS
${ret}= DMaaP Message Receive ab305d54-85b4-a31b-7db2-fb6b9e546025
Should Be Equal As Strings ${ret} true
-
Publish VES Event With Invalid URL Path HTTPS
[Tags] DCAE-VESC-R1
[Documentation] Use invalid url path to expect 404 response
@@ -180,22 +168,16 @@ Publish VES Event With Invalid URL Path HTTPS
Log Receive HTTP Status code ${resp.status_code}
Should Be Equal As Strings ${resp.status_code} 404
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+Publish PNF Registration Event
+ [Tags] DCAE-VESC-R1
+ [Documentation] Post PNF registration event and expect 200 Response
+ ${evtdata}= Get Event Data From File ${EVENT_PNF_REGISTRATION}
+ ${headers}= Create Header From String ${HEADER_STRING}
+ ${resp}= Publish Event To VES Collector No Auth ${VESC_URL} ${VES_ANY_EVENT_PATH} ${headers} ${evtdata}
+ Log Receive HTTP Status code ${resp.status_code}
+ Should Be Equal As Strings ${resp.status_code} 200
+ ${isEmpty}= Is Json Empty ${resp}
+ Run Keyword If '${isEmpty}' == False Log ${resp.json()}
+ ${ret}= DMaaP Message Receive QTFCOC540002E-reg
+ Should Be Equal As Strings ${ret} true
+ \ No newline at end of file
diff --git a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
index f69538dc6..d68b9ed17 100644
--- a/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
+++ b/test/csit/tests/dmaap-buscontroller/single-mr-suite/test1.robot
@@ -4,14 +4,25 @@ Library Collections
Library json
Library OperatingSystem
Library RequestsLibrary
-
+Library HttpLibrary.HTTP
+Library String
*** Variables ***
${MESSAGE} Hello, world!
${DBC_URI} webapi
-${TOPIC1} singleMRtopic1
-${TOPIC1_DATA} { "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${DBC_URL} http://${DMAAPBC_IP}:8080/${DBC_URI}
+${TOPIC_NS} org.onap.dmaap.onapCSIT
+${LOC} csit-sanfrancisco
+${PUB_CORE} "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.pub", "action": [ "pub", "view" ]
+${SUB_CORE} "dcaeLocationName": "${LOC}", "clientRole": "org.onap.dmaap.client.sub", "action": [ "sub", "view" ]
+${PUB} { ${PUB_CORE} }
+${SUB} { ${SUB_CORE} }
+${TOPIC1_DATA} { "topicName":"singleMRtopic1", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${TOPIC2_DATA} { "topicName":"singleMRtopic2", "topicDescription":"generated for CSIT", "owner":"dgl", "clients": [ ${PUB}, ${SUB}] }
+${TOPIC3_DATA} { "topicName":"singleMRtopic3", "topicDescription":"generated for CSIT", "owner":"dgl"}
+${PUB3_DATA} { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${PUB_CORE} }
+${SUB3_DATA} { "fqtn": "${TOPIC_NS}.singleMRtopic3", ${SUB_CORE} }
@@ -22,11 +33,54 @@ Url Test
${resp}= Get Request sanity /
Should Be Equal As Integers ${resp.status_code} 200
-Create Topic Test
- [Documentation] Check POST ${DBC_URI}/topics endpoint
- ${resp}= PostCall http://${DMAAPBC_IP}:8080/${DBC_URI}/topics ${TOPIC1_DATA}
+(DMAAP-293)
+ [Documentation] Create Topic w no clients POST ${DBC_URI}/topics endpoint
+ ${resp}= PostCall ${DBC_URL}/topics ${TOPIC1_DATA}
+ Should Be Equal As Integers ${resp.status_code} 201
+
+(DMAAP-294)
+ [Documentation] Create Topic w pub and sub clients POST ${DBC_URI}/topics endpoint
+ ${resp}= PostCall ${DBC_URL}/topics ${TOPIC2_DATA}
Should Be Equal As Integers ${resp.status_code} 201
+(DMAAP-295)
+ [Documentation] Create Topic w no clients and then add a client POST ${DBC_URI}/mr_clients endpoint
+ ${resp}= PostCall ${DBC_URL}/topics ${TOPIC3_DATA}
+ Should Be Equal As Integers ${resp.status_code} 201
+ ${resp}= PostCall ${DBC_URL}/mr_clients ${PUB3_DATA}
+ Should Be Equal As Integers ${resp.status_code} 200
+ ${resp}= PostCall ${DBC_URL}/mr_clients ${SUB3_DATA}
+ Should Be Equal As Integers ${resp.status_code} 200
+
+(DMAAP-297)
+ [Documentation] Query for all topics and specific topic
+ Create Session get ${DBC_URL}
+ ${resp}= Get Request get /topics
+ Should Be Equal As Integers ${resp.status_code} 200
+ ${resp}= Get Request get /topics/${TOPIC_NS}.singleMRtopic3
+ Should Be Equal As Integers ${resp.status_code} 200
+
+(DMAAP-301)
+ [Documentation] Delete a subscriber
+ Create Session get ${DBC_URL}
+ ${resp}= Get Request get /topics/${TOPIC_NS}.singleMRtopic3
+ Should Be Equal As Integers ${resp.status_code} 200
+ ${tmp}= Get Json Value ${resp.text} /clients/1/mrClientId
+ ${clientId}= Remove String ${tmp} \"
+ ${resp}= DelCall ${DBC_URL}/mr_clients/${clientId}
+ Should Be Equal As Integers ${resp.status_code} 204
+
+(DMAAP-302)
+ [Documentation] Delete a publisher
+ Create Session get ${DBC_URL}
+ ${resp}= Get Request get /topics/${TOPIC_NS}.singleMRtopic3
+ Should Be Equal As Integers ${resp.status_code} 200
+ ${tmp}= Get Json Value ${resp.text} /clients/0/mrClientId
+ ${clientId}= Remove String ${tmp} \"
+ ${resp}= DelCall ${DBC_URL}/mr_clients/${clientId}
+ Should Be Equal As Integers ${resp.status_code} 204
+
+
*** Keywords ***
CheckDir
[Arguments] ${path}
@@ -43,3 +97,8 @@ PostCall
${resp}= Evaluate requests.post('${url}',data='${data}', headers=${headers},verify=False) requests
[Return] ${resp}
+DelCall
+ [Arguments] ${url}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
+ ${resp}= Evaluate requests.delete('${url}', headers=${headers},verify=False) requests
+ [Return] ${resp}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa.json b/test/csit/tests/optf-has/has/data/plan_with_hpa.json
new file mode 100644
index 000000000..bf314a9cb
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa.json
@@ -0,0 +1,230 @@
+{
+ "name":"vCPE-with-HPA",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "constraint_vg_customer":{
+ "type":"distance_to_location",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "distance":"< 100 km",
+ "location":"customer_loc"
+ }
+ },
+ "hpa_constraint":{
+ "type":"hpa",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "evaluate":[
+ {
+ "flavorLabel":"flavor_label_1",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"4",
+ "operator":">="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"4",
+ "operator":">=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"numa",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numaNodes",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-0",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-1",
+ "hpa-attribute-value":"4",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaMem-0",
+ "hpa-attribute-value":"2",
+ "operator":"=",
+ "unit":"GB"
+ },
+ {
+ "hpa-attribute-key":"numaMem-1",
+ "hpa-attribute-value":"4",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"cpuPinning",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"logicalCpuThreadPinningPolicy",
+ "hpa-attribute-value":"prefer",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"logicalCpuPinningPolicy",
+ "hpa-attribute-value":"dedicated",
+ "operator":"="
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "flavorLabel":"flavor_label_2",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"8",
+ "operator":">="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"16",
+ "operator":">=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"numa",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numaNodes",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-0",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-1",
+ "hpa-attribute-value":"4",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaMem-0",
+ "hpa-attribute-value":"2",
+ "operator":"=",
+ "unit":"GB"
+ },
+ {
+ "hpa-attribute-key":"numaMem-1",
+ "hpa-attribute-value":"4",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"ovsDpdk",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+ "hpa-attribute-value":"v18.02",
+ "operator":"="
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ },
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json
new file mode 100644
index 000000000..80685ae8e
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_mandatory.json
@@ -0,0 +1,165 @@
+{
+ "name":"vCPE-with-HPA-requirement-mandatory",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "constraint_vg_customer":{
+ "type":"distance_to_location",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "distance":"< 100 km",
+ "location":"customer_loc"
+ }
+ },
+ "hpa_constraint":{
+ "type":"hpa",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "evaluate":[
+ {
+ "flavorLabel":"flavor_label_1",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"64",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"64",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"numa",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory":"True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numaNodes",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-0",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-1",
+ "hpa-attribute-value":"4",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaMem-0",
+ "hpa-attribute-value":"2",
+ "operator":"=",
+ "unit":"GB"
+ },
+ {
+ "hpa-attribute-key":"numaMem-1",
+ "hpa-attribute-value":"4",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "flavorLabel":"flavor_label_2",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"32",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"128",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"ovsDpdk",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+ "hpa-attribute-value":"v18.02",
+ "operator":"="
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json
new file mode 100644
index 000000000..4672349d2
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_requirements_optionals.json
@@ -0,0 +1,217 @@
+{
+ "name":"vCPE-HPA-Requirement-Optional",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "constraint_vg_customer":{
+ "type":"distance_to_location",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "distance":"< 100 km",
+ "location":"customer_loc"
+ }
+ },
+ "hpa_constraint":{
+ "type":"hpa",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "evaluate":[
+ {
+ "flavorLabel":"flavor_label_1",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"4",
+ "operator":">="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"8",
+ "operator":">=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"instructionSetExtensions",
+ "hpa-version":"v1",
+ "architecture":"Intel64",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"instructionSetExtensions",
+ "hpa-attribute-value":["aes", "sse", "avx", "smt"],
+ "operator":"ALL",
+ "unit":""
+ }
+ ]
+ },
+ {
+ "hpa-feature":"numa",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory":"False",
+ "score":"3",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numaNodes",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-0",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-1",
+ "hpa-attribute-value":"4",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaMem-0",
+ "hpa-attribute-value":"2",
+ "operator":"=",
+ "unit":"GB"
+ },
+ {
+ "hpa-attribute-key":"numaMem-1",
+ "hpa-attribute-value":"4",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "flavorLabel":"flavor_label_2",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"4",
+ "operator":">="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"8",
+ "operator":">=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"ovsDpdk",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score":"5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+ "hpa-attribute-value":"v18.02",
+ "operator":"="
+ }
+ ]
+ },
+ {
+ "hpa-feature":"numa",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory":"False",
+ "score":"3",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numaNodes",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-0",
+ "hpa-attribute-value":"2",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaCpu-1",
+ "hpa-attribute-value":"4",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"numaMem-0",
+ "hpa-attribute-value":"2",
+ "operator":"=",
+ "unit":"GB"
+ },
+ {
+ "hpa-attribute-key":"numaMem-1",
+ "hpa-attribute-value":"4",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json
new file mode 100644
index 000000000..25b226280
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_simple.json
@@ -0,0 +1,129 @@
+{
+ "name":"vCPE-with-HPA",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "hpa_constraint":{
+ "type":"hpa",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "evaluate":[
+ {
+ "flavorLabel":"flavor_label_1",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"32",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"64",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ },
+ {
+ "hpa-feature":"ovsDpdk",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"dataProcessingAccelerationLibrary",
+ "hpa-attribute-value":"v18.02",
+ "operator":"="
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "flavorLabel":"flavor_label_2",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "False",
+ "score": "5",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"8",
+ "operator":">="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"16",
+ "operator":">=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ },
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json b/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json
new file mode 100644
index 000000000..8a3198566
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_hpa_unmatched.json
@@ -0,0 +1,117 @@
+{
+ "name":"vCPE-with-HPA-unmatched-requirements",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "constraint_vgmux_customer":{
+ "type":"distance_to_location",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "distance":"< 100 km",
+ "location":"customer_loc"
+ }
+ },
+ "hpa_constraint":{
+ "type":"hpa",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "evaluate":[
+ {
+ "flavorLabel":"flavor_label_1",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory": "True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"60",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"64",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "flavorLabel":"flavor_label_2",
+ "flavorProperties":[
+ {
+ "hpa-feature":"basicCapabilities",
+ "hpa-version":"v1",
+ "architecture":"generic",
+ "mandatory":"True",
+ "hpa-feature-attributes":[
+ {
+ "hpa-attribute-key":"numVirtualCpu",
+ "hpa-attribute-value":"30",
+ "operator":"="
+ },
+ {
+ "hpa-attribute-key":"virtualMemSize",
+ "hpa-attribute-value":"128",
+ "operator":"=",
+ "unit":"GB"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json b/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json
new file mode 100644
index 000000000..00a599125
--- /dev/null
+++ b/test/csit/tests/optf-has/has/data/plan_with_vim_fit.json
@@ -0,0 +1,89 @@
+{
+ "name":"vCPE-Sanity1",
+ "template":{
+ "homing_template_version":"2017-10-10",
+ "parameters":{
+ "service_name":"Residential vCPE",
+ "service_id":"vcpe_service_id",
+ "customer_lat":45.395968,
+ "customer_long":-71.135344,
+ "REQUIRED_MEM":4,
+ "REQUIRED_DISK":100,
+ "pnf_id":"some_pnf_id"
+ },
+ "locations":{
+ "customer_loc":{
+ "latitude":{
+ "get_param":"customer_lat"
+ },
+ "longitude":{
+ "get_param":"customer_long"
+ }
+ }
+ },
+ "demands":{
+ "vG":[
+ {
+ "inventory_provider":"aai",
+ "inventory_type":"cloud"
+ }
+ ]
+ },
+ "constraints":{
+ "constraint_vg_customer":{
+ "type":"distance_to_location",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "distance":"< 100 km",
+ "location":"customer_loc"
+ }
+ },
+ "check_cloud_capacity":{
+ "type":"vim_fit",
+ "demands":[
+ "vG"
+ ],
+ "properties":{
+ "controller":"multicloud",
+ "request":{
+ "vCPU":10,
+ "Memory":{
+ "quantity":{
+ "get_param":"REQUIRED_MEM"
+ },
+ "unit":"GB"
+ },
+ "Storage":{
+ "quantity":{
+ "get_param":"REQUIRED_DISK"
+ },
+ "unit":"GB"
+ }
+ }
+ }
+ }
+ },
+ "optimization":{
+ "minimize":{
+ "sum":[
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ },
+ {
+ "distance_between":[
+ "customer_loc",
+ "vG"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "timeout":5,
+ "limit":3
+}
diff --git a/test/csit/tests/optf-has/has/optf_has_test.robot b/test/csit/tests/optf-has/has/optf_has_test.robot
index 62db10774..815ffa850 100644
--- a/test/csit/tests/optf-has/has/optf_has_test.robot
+++ b/test/csit/tests/optf-has/has/optf_has_test.robot
@@ -295,6 +295,191 @@ GetPlanWithShortDistanceConstraint
Should Be Equal As Integers ${resp.status_code} 200
Should Be Equal not found ${resultStatus}
+SendPlanWithVimFit
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_vim_fit.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithVimFit
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+
+SendPlanWithHpa
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithHpa
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+
+SendPlanWithHpaSimple
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_simple.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithHpaSimple
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+
+SendPlanWithHpaMandatory
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_requirements_mandatory.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithHpaMandatory
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+
+SendPlanWithHpaOptionals
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_requirements_optionals.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithHpaOptionals
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal done ${resultStatus}
+
+SendPlanWithHpaUnmatched
+ [Documentation] It sends a POST request to conductor
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_unmatched.json
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ Log To Console body = ${resp.text}
+ ${response_json} json.loads ${resp.content}
+ ${generatedPlanId}= Convert To String ${response_json['id']}
+ Set Global Variable ${generatedPlanId}
+ Log To Console generatedPlanId = ${generatedPlanId}
+ Should Be Equal As Integers ${resp.status_code} 201
+ Sleep 60s Wait Plan Resolution
+
+GetPlanWithHpaUnmatched
+ [Documentation] It sends a REST GET request to capture recommendations
+ Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT}
+ &{headers}= Create Dictionary Content-Type=application/json Accept=application/json
+ ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers}
+ Log To Console *********************
+ Log To Console response = ${resp}
+ ${response_json} json.loads ${resp.content}
+ ${resultStatus}= Convert To String ${response_json['plans'][0]['status']}
+ Set Global Variable ${resultStatus}
+ Log To Console resultStatus = ${resultStatus}
+ Log To Console body = ${resp.text}
+ Should Be Equal As Integers ${resp.status_code} 200
+ Should Be Equal not found ${resultStatus}
*** Keywords ***
diff --git a/test/csit/tests/portal/testsuites/test1.robot b/test/csit/tests/portal/testsuites/test1.robot
index 90aa10788..0b61807b2 100644
--- a/test/csit/tests/portal/testsuites/test1.robot
+++ b/test/csit/tests/portal/testsuites/test1.robot
@@ -1,17 +1,17 @@
*** Settings ***
Documentation This is RobotFrame work script
-Library ExtendedSelenium2Library
-Library OperatingSystem
-Library eteutils/RequestsClientCert.py
-Library RequestsLibrary
-Library eteutils/UUID.py
-Library DateTime
-Library Collections
-Library eteutils/OSUtils.py
-Library eteutils/StringTemplater.py
-Library XvfbRobot
-Resource json_templater.robot
-
+Library ExtendedSelenium2Library
+Library OperatingSystem
+Library eteutils/RequestsClientCert.py
+Library RequestsLibrary
+Library eteutils/UUID.py
+Library DateTime
+Library Collections
+Library eteutils/OSUtils.py
+Library eteutils/StringTemplater.py
+Library String
+Library XvfbRobot
+Resource json_templater.robot
*** Variables ***
${PORTAL_URL} http://portal.api.simpledemo.onap.org:8989
@@ -40,16 +40,20 @@ ${Test_Loginpwd} demo123456!
${Test_LoginPwdCheck} demo123456!
${Existing_User} portal
${PORTAL_HEALTH_CHECK_PATH} /ONAPPORTAL/portalApi/healthCheck
+${PORTAL_XDEMPAPP_REST_URL} http://portal-sdk:8080/ONAPPORTALSDK/api/v2
${PORTAL_ASSETS_DIRECTORY} ${CURDIR}
${GLOBAL_APPLICATION_ID} robot-functional
${GLOBAL_PORTAL_ADMIN_USER} demo
${GLOBAL_PORTAL_ADMIN_PWD} demo123456!
+${AppAccountName} testApp
+${AppUserName} testApp
+${AppPassword} testApp123!
${GLOBAL_MSO_STATUS_PATH} /ecomp/mso/infra/orchestrationRequests/v2/
${GLOBAL_SELENIUM_BROWSER} chrome
${GLOBAL_SELENIUM_BROWSER_CAPABILITIES} Create Dictionary
${GLOBAL_SELENIUM_DELAY} 0
${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT} 5
-${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 15
+${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT} 45
${GLOBAL_OPENSTACK_HEAT_SERVICE_TYPE} orchestration
${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE} volume
${GLOBAL_OPENSTACK_NOVA_SERVICE_TYPE} compute
@@ -63,7 +67,8 @@ ${RESOURCE_PATH} ONAPPORTAL/auxapi/ticketevent
${portal_Template} ${CURDIR}/portal.template
${Result} FALSE
-
+${td_id} 0
+${download_link_id} 0
*** Test Cases ***
@@ -77,119 +82,134 @@ Login into Portal URL
# [Documentation] ONAP Portal R1 functionality test
# Notification on ONAP Portal
# Portal Application Account Management validation
+
+Portal Change REST URL Of X-DemoApp
+ [Documentation] Portal Change REST URL Of X-DemoApp
+ Portal Change REST URL
Portal R1 Release for AAF
[Documentation] ONAP Portal R1 functionality for AAF test
Portal AAF new fields
-#Create Microse service onboarding
- #Portal admin Microservice Onboarding
+Create Microse service onboarding
+ Portal admin Microservice Onboarding
-#Delete Microse service
- #Portal admin Microservice Delete
+##Delete Microse service
+ ##Portal admin Microservice Delete
-#Create Widget for all users
- #Portal Admin Create Widget for All users
+Create Widget for all users
+ Portal Admin Create Widget for All users
-# Delete Widget for all users
- # Portal Admin Delete Widget for All users
+Delete Widget for all users
+ Portal Admin Delete Widget for All users
-#Create Widget for Application Roles
- #Portal Admin Create Widget for Application Roles
+Create Widget for Application Roles
+ Portal Admin Create Widget for Application Roles
#Delete Widget for Application Roles
- #Portal Admin Delete Widget for Application Roles
+ #Portal Admin Delete Widget for Application Roles
-#Validate Functional Top Menu Get Access
- #Functional Top Menu Get Access
+##EP Admin widget download
+ ##Admin widget download
-#Validate Functional Top Menu Contact Us
- #Functional Top Menu Contact Us
+EP Admin widget layout reset
+ Reset widget layout option
+
+Validate Functional Top Menu Get Access
+ Functional Top Menu Get Access
-#Edit Functional Menu
- #Portal admin Edit Functional menu
+Validate Functional Top Menu Contact Us
+ Functional Top Menu Contact Us
+Edit Functional Menu
+ Portal admin Edit Functional menu
-# Broadbond Notification functionality
- # ${AdminBroadCastMsg}= Portal Admin Broadcast Notifications
- # set global variable ${AdminBroadCastMsg}
+Broadbond Notification functionality
+ ${AdminBroadCastMsg}= Portal Admin Broadcast Notifications
+ set global variable ${AdminBroadCastMsg}
-# Category Notification functionality
- # ${AdminCategoryMsg}= Portal Admin Category Notifications
- # set global variable ${AdminCategoryMsg}
+Category Notification functionality
+ ${AdminCategoryMsg}= Portal Admin Category Notifications
+ set global variable ${AdminCategoryMsg}
-#Create a Test user for Application Admin -Test
- #Portal admin Add Application admin User New user -Test
+Create a Test user for Application Admin -Test
+ Portal admin Add Application admin User New user -Test
-#Create a Test User for Apllication Admin
- #Portal admin Add Application admin User New user
+Create a Test User for Apllication Admin
+ Portal admin Add Application admin User New user
-#Add Application Admin for Existing User Test user
- #Portal admin Add Application Admin Exiting User -APPDEMO
+Add Application Admin for Existing User Test user
+ Portal admin Add Application Admin Exiting User -APPDEMO
-#Create a Test user for Standared User
- #Portal admin Add Standard User New user
+Create a Test user for Standared User
+ Portal admin Add Standard User New user
-#Add Application Admin for Exisitng User
- #Portal admin Add Application Admin Exiting User
+Add Application Admin for Exisitng User
+ Portal admin Add Application Admin Exiting User
-#Delete Application Admin for Exisitng User
- #Portal admin Delete Application Admin Existing User
+Delete Application Admin for Exisitng User
+ Portal admin Delete Application Admin Existing User
-# Add Standard User Role for Existing user
- # Portal admin Add Standard User Existing user
+#Add Standard User Role for Existing user
+ #Portal admin Add Standard User Existing user
-# Edit Standard User Role for Existing user
- # Portal admin Edit Standard User Existing user
+#Edit Standard User Role for Existing user
+ #Portal admin Edit Standard User Existing user
-
#Delete Standard User Role for Existing user
- #Portal admin Delete Standard User Existing user
-
+ #Portal admin Delete Standard User Existing user
+
+#Add Account new account from App Account Management
+ #Portal admin Add New Account
+
+#Delete Account new account from App Account Management
+ #Portal admin Delete Account
+
Logout from Portal GUI as Portal Admin
- Portal admin Logout from Portal GUI
+ Portal admin Logout from Portal GUI
-# Application Admin user Test cases
+## Application Admin user Test cases
-#Login To Portal GUI as APP Admin
- #Application admin Login To Portal GUI
+Login To Portal GUI as APP Admin
+ Application admin Login To Portal GUI
##Navigate Functional Link as APP Admin
-## Application Admin Navigation Functional Menu
+ ##Application Admin Navigation Functional Menu
-# Add Standard User Role for Existing user as APP Admin
- # Application admin Add Standard User Existing user
+#Add Standard User Role for Existing user as APP Admin
+ #Application admin Add Standard User Existing user
-# Edit Standard User Role for Existing user as APP Admin
- # Application admin Edit Standard User Existing user
+#Edit Standard User Role for Existing user as APP Admin
+ #Application admin Edit Standard User Existing user
-# Delete Standard User Role for Existing user as APP Admin
- # Application admin Delete Standard User Existing user
+#Delete Standard User Role for Existing user as APP Admin
+ #Application admin Delete Standard User Existing user
-# #Navigate Application Link as APP Admin
-# # Application Admin Navigation Application Link Tab
+#Navigate Application Link as APP Admin
+ #Application Admin Navigation Application Link Tab
-#Logout from Portal GUI as APP Admin
- #Application admin Logout from Portal GUI
+Logout from Portal GUI as APP Admin
+ Application admin Logout from Portal GUI
-#Standard User Test cases
+##Standard User Test cases
-#Login To Portal GUI as Standared User
- #Standared user Login To Portal GUI
+Login To Portal GUI as Standared User
+ Standared user Login To Portal GUI
#Navigate Application Link as Standared User
-# Standared user Navigation Application Link Tab
+ #Standared user Navigation Application Link Tab
-##Navigate Functional Link as Standared User
-## Standared user Navigation Functional Menu
-
+#Navigate Functional Link as Standared User
+ #Standared user Navigation Functional Menu
-# Broadcast Notifications Standared user
- # Standared user Broadcast Notifications ${AdminBroadCastMsg}
+#Broadcast Notifications Standared user
+ #Standared user Broadcast Notifications ${AdminBroadCastMsg}
-# Category Notifications Standared user
- # Standared user Category Notifications ${AdminCategoryMsg}
+#Category Notifications Standared user
+ #Standared user Category Notifications ${AdminCategoryMsg}
+Logout from Portal GUI as Standared User
+ Standared User Logout from Portal GUI
Teardown
[Documentation] Close All Open browsers
@@ -231,6 +251,7 @@ Run Portal Health Check
${resp}= Run Portal Get Request ${PORTAL_HEALTH_CHECK_PATH}
Should Be Equal As Strings ${resp.status_code} 200
Should Be Equal As Strings ${resp.json()['statusCode']} 200
+
Run Portal Get Request
[Documentation] Runs Portal Get request
[Arguments] ${data_path}
@@ -259,7 +280,8 @@ Portal admin Login To Portal GUI
Input Password xpath=//input[@ng-model='password'] ${GLOBAL_PORTAL_ADMIN_PWD}
Click Link xpath=//a[@id='loginBtn']
Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
- Log Logged in to ${PORTAL_URL}${PORTAL_ENV}
+ #Execute Javascript document.getElementById('w-ecomp-footer').style.display = 'none'
+ Log Logged in to ${PORTAL_URL}${PORTAL_ENV}
Portal admin Go To Portal HOME
[Documentation] Naviage to Portal Home
@@ -272,10 +294,7 @@ Portal admin User Notifications
Wait Until Element Is Visible xpath=//h1[@class='heading-page'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
Click Button xpath=//button[@id='button-openAddNewApp']
Click Button xpath=(//button[@id='undefined'])[1]
- #Click Button xpath=//input[@id='datepicker-start']
-
-
-
+ #Click Button xpath=//input[@id='datepicker-start']
Portal admin Add Application Admin Exiting User
[Documentation] Naviage to Admins tab
@@ -458,8 +477,6 @@ Portal admin Add Application admin User New user -Test
#Input Text xpath=//input[@id='input-table-search'] ${Test_First_Name}
#Element Text Should Be xpath=(//span[contains(.,'appdemo')] )[1] ${Test_First_Name}
-
-
Portal admin Add Application Admin Exiting User -APPDEMO
[Documentation] Naviage to Admins tab
Wait Until Element Is Visible xpath=//a[@title='Admins'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
@@ -501,8 +518,8 @@ Portal admin Add Standard User Existing user
Click Button xpath=//button[@id='next-button']
# Click Element xpath=//*[@id='div-app-name-dropdown-Default']
# Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
- Click Element xpath=//div[@id='div-app-name-dropdown-xDemo-App']
- Click Element xpath=//div[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
+ Click Element xpath=//div[@id='app-select-Select roles1']
+ Click Element xpath=//div[@id='app-select-Select roles1']/following::input[@id='Standard-User-checkbox']
Set Selenium Implicit Wait 3000
Click Button xpath=//button[@id='new-user-save-button']
Set Selenium Implicit Wait 3000
@@ -520,18 +537,41 @@ Portal admin Add Standard User Existing user
Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Standard User
Set Selenium Implicit Wait 3000
-Portal admin Edit Standard User Existing user
+Portal admin Edit Standard User Existing user
[Documentation] Naviage to Users tab
+ Click Link xpath=//a[@title='Users']
+ Click Element xpath=//input[@id='dropdown1']
+ # Click Element xpath=//li[contains(.,'Default')]
+# Set Selenium Implicit Wait 3000
+ Click Element xpath=//li[contains(.,'xDemo App')]
+# Set Selenium Implicit Wait 3000
+ Input Text xpath=//input[@id='input-table-search'] ${Existing_User}
+ Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Standard User
Click Element xpath=(.//*[@id='rowheader_t1_0'])[2]
-# Click Element xpath=//*[@id='div-app-name-dropdown-Default']
-# Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
-# Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
- Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App']
- Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
- Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Portal-Notification-Admin-checkbox']
-# Click Element xpath=//*[@id='div-app-name-dropdown-SDC']
-# Click Element xpath=//*[@id='div-app-name-SDC']/following::input[@id='Standard-User-checkbox']
-# Click Element xpath=//*[@id='div-app-name-SDC']/following::input[@id='Portal-Notification-Admin-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-dropdown-Default']
+ # Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
+ Click Element xpath=//*[@id='app-select-Standard User1']
+ Click Element xpath=//*[@id='app-select-Standard User1']/following::input[@id='Standard-User-checkbox']
+ Set Selenium Implicit Wait 3000
+ Click Button xpath=//button[@id='new-user-save-button']
+ Set Selenium Implicit Wait 3000
+
+ Page Should Contain Users
+ Click Button xpath=//button[@ng-click='toggleSidebar()']
+ Click Button xpath=//button[@ng-click='users.openAddNewUserModal()']
+ Input Text xpath=//input[@id='input-user-search'] ${Existing_User}
+ Click Button xpath=//button[@id='button-search-users']
+ Click Element xpath=//span[@id='result-uuid-0']
+ Click Button xpath=//button[@id='next-button']
+ Click Element xpath=//div[@id='app-select-Select roles1']
+ Click Element xpath=//div[@id='app-select-Select roles1']/following::input[@id='System-Administrator-checkbox']
+ Set Selenium Implicit Wait 3000
+# Click Element xpath=//*[@id='app-select-Standard User1']
+# Click Element xpath=//*[@id='app-select-Standard User1']/following::input[@id='System-Administrator-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-dropdown-SDC']
+ # Click Element xpath=//*[@id='div-app-name-SDC']/following::input[@id='Standard-User-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-SDC']/following::input[@id='Portal-Notification-Admin-checkbox']
Set Selenium Implicit Wait 3000
Click Button xpath=//button[@id='new-user-save-button']
Set Selenium Implicit Wait 3000
@@ -539,6 +579,7 @@ Portal admin Edit Standard User Existing user
#Click Button xpath=//input[@id='dropdown1']
#Click Element xpath=//li[contains(.,'xDemo App')]
Input Text xpath=//input[@id='input-table-search'] ${Existing_User}
+ # Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Portal Notification Admin
Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] System Administrator
Set Selenium Implicit Wait 3000
@@ -561,6 +602,7 @@ Portal admin Edit Standard User Existing user
Functional Top Menu Get Access
[Documentation] Naviage to Support tab
+ Go To ${PORTAL_HOME_URL}
Click Link xpath=//a[contains(.,'Support')]
Mouse Over xpath=//*[contains(text(),'Get Access')]
Click Link xpath=//a[contains(.,'Get Access')]
@@ -618,7 +660,8 @@ Portal admin Edit Functional menu
Set Selenium Implicit Wait 3000
Element Should Not Contain xpath=(.//*[contains(.,'Design')]/following::ul[1])[1] ONAP Test
Set Selenium Implicit Wait 3000
-
+ Click Image xpath=//img[@alt='Onap Logo']
+ Set Selenium Implicit Wait 3000
Portal admin Microservice Onboarding
[Documentation] Naviage to Edit Functional menu tab
@@ -658,7 +701,7 @@ Portal admin Microservice Delete
Input Text xpath=//input[@name='username'] ${GLOBAL_PORTAL_ADMIN_USER}
Input Text xpath=//input[@name='password'] ${GLOBAL_PORTAL_ADMIN_PWD}
Click Button xpath=//button[@id='microservice-details-save-button']
- Table Column Should Contain xpath=//*[@table-data='serviceList'] 1 TestMS
+ Execute Javascript window.scrollTo(0,document.body.scrollHeight);
Click Element xpath=(.//*[contains(text(),'TestMS')]/following::*[@ng-click='microserviceOnboarding.deleteService(rowData)'])[1]
Click Button xpath=//button[@id="div-confirm-ok-button"]
Set Selenium Implicit Wait 3000
@@ -666,20 +709,21 @@ Portal admin Microservice Delete
Portal Admin Create Widget for All users
[Documentation] Navigate to Create Widget menu tab
${WidgetAttachment}= Catenate ${PORTAL_ASSETS_DIRECTORY}//news_widget.zip
+ Wait until page contains Element xpath=//a[@title='Widget Onboarding'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
Click Link xpath=//a[@title='Widget Onboarding']
Click Button xpath=//button[@ng-click='toggleSidebar()']
Click Button xpath=//button[@id='widget-onboarding-button-add']
Input Text xpath=//*[@name='name'] ONAP-xDemo
Input Text xpath=//*[@name='desc'] ONAP xDemo
Click Element xpath=//*[@id='widgets-details-input-endpoint-url']
- Scroll Element Into View xpath=//li[contains(.,'Test Microservice')]
- Click Element xpath=//li[contains(.,'Test Microservice')]
+ Scroll Element Into View xpath=//li[contains(.,'News Microservice')]
+ Click Element xpath=//li[contains(.,'News Microservice')]
Click Element xpath=//*[contains(text(),'Allow all user access')]/preceding::input[@ng-model='widgetOnboardingDetails.widget.allUser'][1]
Choose File xpath=//input[@id='widget-onboarding-details-upload-file'] ${WidgetAttachment}
Click Button xpath=//button[@id='widgets-details-save-button']
- Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+ Wait Until Page Contains ONAP-xDemo ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
Page Should Contain ONAP-xDemo
- Set Selenium Implicit Wait 3000
+ Set Selenium Implicit Wait 3000
GO TO ${PORTAL_HOME_PAGE}
@@ -711,12 +755,12 @@ Portal Admin Create Widget for Application Roles
Input Text xpath=//*[@name='name'] ONAP-xDemo
Input Text xpath=//*[@name='desc'] ONAP xDemo
Click Element xpath=//*[@id='widgets-details-input-endpoint-url']
- Scroll Element Into View xpath=//li[contains(.,'Test Microservice')]
- Click Element xpath=//li[contains(.,'Test Microservice')]
+ Scroll Element Into View xpath=//li[contains(.,'News Microservice')]
+ Click Element xpath=//li[contains(.,'News Microservice')]
Click element xpath=//*[@id="app-select-Select Applications"]
click element xpath=//*[@id="xDemo-App-checkbox"]
Click element xpath=//*[@name='desc']
- click element xpath=//*[@id="app-select-Select Roles"]
+ click element xpath=//*[@id="app-select-Select Roles0"]
click element xpath=//*[@id="Standard-User-checkbox"]
Click element xpath=//*[@name='desc']
Scroll Element Into View xpath=//input[@id='widget-onboarding-details-upload-file']
@@ -775,12 +819,12 @@ Portal Admin Edit Widget
Portal Admin Broadcast Notifications
[Documentation] Portal Test Admin Broadcast Notifications
-
${CurrentDay}= Get Current Date increment=24:00:00 result_format=%m/%d/%Y
${NextDay}= Get Current Date increment=48:00:00 result_format=%m/%d/%Y
${CurrentDate}= Get Current Date increment=24:00:00 result_format=%m%d%y%H%M
${AdminBroadCastMsg}= catenate ONAP VID Broadcast Automation${CurrentDate}
- Click Image xpath=//img[@alt='Onap Logo']
+ Go To ${PORTAL_HOME_URL}
+ Click Image xpath=//img[@alt='Onap Logo']
Set Selenium Implicit Wait 3000
Click Link xpath=//*[@id="parent-item-User-Notifications"]
Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10
@@ -793,8 +837,9 @@ Portal Admin Broadcast Notifications
Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10
click element xpath=//*[@id="megamenu-notification-button"]
click element xpath=//*[@id="notification-history-link"]
- Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10
- Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminBroadCastMsg}
+# Notification bug, Uncomment the code when PORTAL-232 is fixed
+ # Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10
+ # Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminBroadCastMsg}
Set Selenium Implicit Wait 3000
log ${AdminBroadCastMsg}
[Return] ${AdminBroadCastMsg}
@@ -823,21 +868,19 @@ Portal Admin Category Notifications
Wait until Element is visible xpath=//*[@id="button-openAddNewApp"] timeout=10
click element xpath=//*[@id="megamenu-notification-button"]
click element xpath=//*[@id="notification-history-link"]
- Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10
- Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminCategoryMsg}
+# Notification bug, Uncomment the code when PORTAL-232 is fixed
+ # Wait until Element is visible xpath=//*[@id="notification-history-table"] timeout=10
+ # Table Column Should Contain xpath=//*[@id="notification-history-table"] 2 ${AdminCategoryMsg}
Set Selenium Implicit Wait 3000
log ${AdminCategoryMsg}
[Return] ${AdminCategoryMsg}
-
Portal admin Logout from Portal GUI
[Documentation] Logout from Portal GUI
Click Element xpath=//div[@id='header-user-icon']
Click Button xpath=//button[contains(.,'Log out')]
Title Should Be Login
-
-
Application admin Login To Portal GUI
[Documentation] Logs into Portal GUI
# Setup Browser Now being managed by test case
@@ -876,7 +919,7 @@ Application Admin Navigation Functional Menu
Click Element xpath=(.//span[@id='tab-Home'])[1]
-Application admin Add Standard User Existing user
+Application admin Add Standard User Existing user
[Documentation] Naviage to Users tab
Click Link xpath=//a[@title='Users']
Page Should Contain Users
@@ -887,9 +930,10 @@ Application admin Add Standard User Existing user
Click Element xpath=//span[@id='result-uuid-0']
Click Button xpath=//button[@id='next-button']
Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App']
- Set Selenium Implicit Wait 3000
Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
- Set Selenium Implicit Wait 3000
+ # Click Element xpath=//*[@id='div-app-name-dropdown-Default']
+ # Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+ # Set Selenium Implicit Wait 3000
Click Button xpath=//button[@id='new-user-save-button']
Set Selenium Implicit Wait 3000
#Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
@@ -900,20 +944,21 @@ Application admin Add Standard User Existing user
Set Selenium Implicit Wait 3000
Click Link xpath=//a[@title='Users']
Click Element xpath=//input[@id='dropdown1']
+ #Click Element xpath=//li[contains(.,'Default')]
Click Element xpath=//li[contains(.,'xDemo App')]
Input Text xpath=//input[@id='input-table-search'] ${Existing_User}
+ # Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Account Administrator
Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Standard User
-
-Application admin Edit Standard User Existing user
+Application admin Edit Standard User Existing user
[Documentation] Naviage to Users tab
Click Element xpath=(.//*[@id='rowheader_t1_0'])[2]
-# Click Element xpath=//*[@id='div-app-name-dropdown-Default']
-# Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
-# Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-dropdown-Default']
+ # Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Standard-User-checkbox']
+ # Click Element xpath=//*[@id='div-app-name-Default']/following::input[@id='Portal-Notification-Admin-checkbox']
Click Element xpath=//*[@id='div-app-name-dropdown-xDemo-App']
Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Standard-User-checkbox']
- Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='Portal-Notification-Admin-checkbox']
+ Click Element xpath=//*[@id='div-app-name-xDemo-App']/following::input[@id='System-Administrator-checkbox']
Set Selenium Implicit Wait 3000
Click Button xpath=//button[@id='new-user-save-button']
Set Selenium Implicit Wait 3000
@@ -921,9 +966,9 @@ Application admin Edit Standard User Existing user
#Click Button xpath=//input[@id='dropdown1']
#Click Element xpath=//li[contains(.,'xDemo App')]
Input Text xpath=//input[@id='input-table-search'] ${Existing_User}
+ # Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] Account Administrator
Element Text Should Be xpath=(.//*[@id='rowheader_t1_0'])[2] System Administrator
-
Application admin Delete Standard User Existing user
[Documentation] Naviage to Users tab
Click Element xpath=(.//*[@id='rowheader_t1_0'])[2]
@@ -939,8 +984,6 @@ Application admin Delete Standard User Existing user
#Click Image xpath=//img[@alt='Onap Logo']
Set Selenium Implicit Wait 3000
-
-
Application admin Logout from Portal GUI
[Documentation] Logout from Portal GUI
Click Element xpath=//div[@id='header-user-icon']
@@ -948,10 +991,6 @@ Application admin Logout from Portal GUI
Click Button xpath=//button[contains(text(),'Log out')]
#Set Selenium Implicit Wait 3000
Title Should Be Login
-
-
-
-
Standared user Login To Portal GUI
[Documentation] Logs into Portal GUI
@@ -970,7 +1009,6 @@ Standared user Login To Portal GUI
Wait Until Page Contains Element xpath=//img[@alt='Onap Logo'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
Log Logged in to ${PORTAL_URL}${PORTAL_ENV}
-
Standared user Navigation Application Link Tab
[Documentation] Logs into Portal GUI as application admin
#Portal admin Go To Portal HOME
@@ -1008,7 +1046,6 @@ Standared user Category Notifications
Table Column Should Contain xpath=//*[@id='notification-history-table'] 2 ${AdminCategoryMsg}
log ${AdminCategoryMsg}
-
Standared user Logout from Portal GUI
[Documentation] Logout from Portal GUI
Click Element xpath=//div[@id='header-user-icon']
@@ -1016,35 +1053,48 @@ Standared user Logout from Portal GUI
#Confirm Action
Title Should Be Login
-
-
-
-Tear Down
+Portal admin Add New Account
+ Click Link //*[@id="parent-item-App-Account-Management"]
+ Click Button xpath=//button[@ng-click='toggleSidebar()']
+ Set Selenium Implicit Wait 3000
+ Click Button //*[@id="account-onboarding-button-add"]
+ Set Selenium Implicit Wait 3000
+ Input Text //*[@id="account-details-input-name"] ${AppAccountName}
+ Input Text //*[@id="account-details-input-username"] ${AppUserName}
+ Input Text //*[@id="account-details-input-password"] ${AppPassword}
+ Input Text //*[@id="account-details-input-repassword"] ${AppPassword}
+ # Click Button xpath=//*[@ng-click='accountAddDetails.saveChanges()']
+ # #Click Button xpath=//button[@ng-click='admins.openAddNewAdminModal()']
+ #account-details-next-button
+ Click Button xpath=//button[@ng-click='accountAddDetails.saveChanges()']
+
+Portal admin Delete Account
+ Click Link //*[@id="parent-item-App-Account-Management"]
+ Click Button xpath=//button[@ng-click='toggleSidebar()']
+ Set Selenium Implicit Wait 3000
+ Click Button //*[@id="account-onboarding-button-add"]
+ Set Selenium Implicit Wait 3000
+
+Tear Down
[Documentation] Close all browsers
Close All Browsers
-
Enhanced Notification on ONAP Portal
[Documentation] Runs portal Post request
[Arguments] ${data_path} ${data}
-# Log Creating session ${GLOBAL_PORTAL_SERVER_URL}
+ # Log Creating session ${GLOBAL_PORTAL_SERVER_URL}
${session}= Create Session portal ${PORTAL_URL}
${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic amlyYTpfcGFzcw== username=jira password=_pass
${resp}= Post Request portal ${data_path} data=${data} headers=${headers}
-# Log Received response from portal ${resp.text}
+ # Log Received response from portal ${resp.text}
[Return] ${resp}
-
-
-
+
Notification on ONAP Portal
[Documentation] Create Config portal
${configportal}= Create Dictionary jira_id=${jira}
${output} = Fill JSON Template File ${portal_Template} ${configportal}
${post_resp} = Enhanced Notification on ONAP Portal ${RESOURCE_PATH} ${output}
Should Be Equal As Strings ${post_resp.status_code} 200
-
-
-
Portal Application Account Management
[Documentation] Naviage to Application Account Management tab
@@ -1057,7 +1107,7 @@ Portal Application Account Management
Click Element xpath=//div[@ng-click='accountAddDetails.saveChanges()']
Element Text Should Be xpath=//*[@table-data='serviceList'] JIRA
-Portal Application Account Management validation
+Portal Application Account Management validation
[Documentation] Naviage to user notification tab
Click Link xpath=//a[@id='parent-item-User-Notifications']
click element xpath=//*[@id="megamenu-notification-button"]
@@ -1066,13 +1116,40 @@ Portal Application Account Management validation
Table Column Should Contain xpath=//*[@id="notification-history-table"] 1 JIRA
-Portal AAF new fields
+Portal AAF new fields
[Documentation] Naviage to user Application details tab
Click Link xpath=//a[@title='Application Onboarding']
Click Element xpath=//td[contains(.,'xDemo App')]
Page Should Contain Name Space
Page Should Contain Centralized
Click Element xpath=//button[@id='button-notification-cancel']
+
+Portal Change REST URL
+ [Documentation] Naviage to user Application details tab
+ Click Link xpath=//a[@title='Application Onboarding']
+ Click Element xpath=//td[contains(.,'xDemo App')]
+ Input Text xpath=//input[@name='restUrl'] ${PORTAL_XDEMPAPP_REST_URL}
+ Click Element xpath=//button[@id='button-save-app']
-
-
+Admin widget download
+ Go To ${PORTAL_HOME_URL}
+ Wait until page contains Element xpath=//a[@title='Widget Onboarding'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+ click Link xpath=//a[@title='Widget Onboarding']
+ Wait until page contains Element xpath=//table[@class='ng-scope']
+ ${td_id}= get element attribute xpath=//*[contains(text(),'Events')]@id
+ log ${td_id}
+ ${test}= Get Substring ${td_id} -1
+ log ${test}
+ ${download_link_id}= Catenate 'widget-onboarding-div-download-widget-${test}'
+ click Element xpath=//*[@id=${download_link_id}]
+
+Reset widget layout option
+ Go To ${PORTAL_HOME_URL}
+ Wait Until Page Contains Element xpath=//div[@id='widget-boarder'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+ Execute Javascript document.getElementById('widgets').scrollTo(0,1400)
+ Wait Until Page Contains Element xpath=//*[@id='widget-gridster-Events-icon'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+ Execute Javascript document.getElementById('widgets').scrollTo(0,1800)
+ Drag And Drop By Offset xpath=//*[@id='widget-gridster-Events-icon'] 500 500
+ Execute Javascript document.getElementById('widgets').scrollTo(0,document.getElementById('widgets').scrollHeight);
+ Execute Javascript document.getElementById('dashboardDefaultPreference').click()
+ Execute Javascript document.getElementById('div-confirm-ok-button').click()