Add support for HTTPS in SDC sanity/uiSanity tests 61/96061/1
authorPetr Ospalý <p.ospaly@partner.samsung.com>
Wed, 11 Sep 2019 15:03:03 +0000 (17:03 +0200)
committerPetr Ospalý <p.ospaly@partner.samsung.com>
Fri, 20 Sep 2019 06:22:05 +0000 (08:22 +0200)
New variable: SDC_TEST_HTTPS

Adjusted robot test too and fixed bad naming there - it was not
the SDC BE container but SDC FE.

For this change to work the upstream change in SDC has to be merged
too - or use this only with a local repo and with some proper setup.

+ Added quotes around shell variables

Issue-ID: SDC-2564

Signed-off-by: Petr Ospalý <p.ospaly@partner.samsung.com>
Change-Id: I3db9f2e1c22a539df3b6c356bd91f67f0328cbd7
Signed-off-by: Petr Ospalý <p.ospaly@partner.samsung.com>
plans/sdc/sanity/setup.sh
plans/sdc/uiSanity/setup.sh
scripts/sdc/setup_sdc_for_sanity.sh
tests/sdc/sanity/test1.robot
tests/sdc/uiSanity/test1.robot

index 20a8eac..8c0336c 100644 (file)
@@ -15,6 +15,9 @@
 # limitations under the License.
 #
 
+# It can enable HTTPS for SDC sanity tests
+export SDC_TEST_HTTPS="${SDC_TEST_HTTPS:-false}"
+
 # By default all images are from remote upstream registry, this option
 # provides the chance to test locally built images
 export SDC_LOCAL_IMAGES="${SDC_LOCAL_IMAGES:-false}"
index b02cd7b..bfb9a15 100644 (file)
@@ -15,6 +15,9 @@
 # limitations under the License.
 #
 
+# It can enable HTTPS for SDC uiSanity tests
+export SDC_TEST_HTTPS="${SDC_TEST_HTTPS:-false}"
+
 # By default all images are from remote upstream registry, this option
 # provides the chance to test locally built images
 export SDC_LOCAL_IMAGES="${SDC_LOCAL_IMAGES:-false}"
index 562c26d..2d644c3 100644 (file)
@@ -6,12 +6,13 @@ function usage {
     echo "setup sdc and run ui test suite: setup_sdc_for_sanity.sh tud"
 }
 
-# returns 0: if SDC_LOCAL_IMAGES is set to true value
+# arg: <variable name>
+# returns 0: if <variable name> is set to true value
 # returns 1: otherwise
-function using_local_images {
-    SDC_LOCAL_IMAGES=$(echo "${SDC_LOCAL_IMAGES}" | tr '[:upper:]' '[:lower:]')
+function is_true {
+    _value=$(eval echo "\$${1}" | tr '[:upper:]' '[:lower:]')
 
-    case "$SDC_LOCAL_IMAGES" in
+    case "$_value" in
         1|yes|true|Y)
             return 0
             ;;
@@ -20,6 +21,18 @@ function using_local_images {
     return 1
 }
 
+# returns 0: if SDC_LOCAL_IMAGES is set to true value
+# returns 1: otherwise
+function using_local_images {
+    is_true SDC_LOCAL_IMAGES
+}
+
+# returns 0: if SDC_TEST_HTTPS is set to true value
+# returns 1: otherwise
+function using_https {
+    is_true SDC_TEST_HTTPS
+}
+
 # fail quick if error
 set -exo pipefail
 
@@ -32,10 +45,10 @@ if [ "$1" != "tad" ] && [ "$1" != "tud" ]; then
 fi
 
 # Clone sdc enviroment template
-mkdir -p ${WORKSPACE}/data/environments/
-mkdir -p ${WORKSPACE}/data/clone/
+mkdir -p "${WORKSPACE}/data/environments/"
+mkdir -p "${WORKSPACE}/data/clone/"
 
-cd ${WORKSPACE}/data/clone
+cd "${WORKSPACE}/data/clone"
 if using_local_images && [ -n "$SDC_LOCAL_GITREPO" ] ; then
     if [ -d "$SDC_LOCAL_GITREPO" ] ; then
         rm -rf ./sdc
@@ -48,29 +61,41 @@ else
     git clone --depth 1 http://gerrit.onap.org/r/sdc -b ${GERRIT_BRANCH}
 fi
 
-chmod -R 777 ${WORKSPACE}/data/clone
+# TODO: why?
+chmod -R 777 "${WORKSPACE}/data/clone"
 
 # set enviroment variables
 
 export ENV_NAME='CSIT'
 export MR_IP_ADDR='10.0.0.1'
-export TEST_SUITE=$1
+export TEST_SUITE="$1"
 
 ifconfig
 IP_ADDRESS=`ip route get 8.8.8.8 | awk '/src/{ print $7 }'`
-export HOST_IP=$IP_ADDRESS
+export HOST_IP="$IP_ADDRESS"
 
 # setup enviroment json
+# TODO: use jq or find a better way altogether...
+cp "${WORKSPACE}/data/clone/sdc/sdc-os-chef/environments/Template.json" \
+    "${WORKSPACE}/data/environments/$ENV_NAME.json"
+sed -i \
+    -e "s/xxx/${ENV_NAME}/g" \
+    -e "s/yyy/${IP_ADDRESS}/g" \
+    -e "s/\"ueb_url_list\":.*/\"ueb_url_list\": \"${MR_IP_ADDR},${MR_IP_ADDR}\",/g" \
+    -e "s/\"fqdn\":.*/\"fqdn\": [\"${MR_IP_ADDR}\", \"${MR_IP_ADDR}\"]/g" \
+    "${WORKSPACE}/data/environments/$ENV_NAME.json"
+if using_https ; then
+    # this is very fragile (as all above) and relies on the current state of Template.json in another project...
+    # using jq filters would be much better approach and no need for some "yyy"...
+    sed -i \
+        -e 's/"disableHttp":[[:space:]]*"\?[[:alnum:]]*"\?/"disableHttp": true/' \
+        "${WORKSPACE}/data/environments/$ENV_NAME.json"
+fi
 
-cat ${WORKSPACE}/data/clone/sdc/sdc-os-chef/environments/Template.json | sed "s/yyy/"$IP_ADDRESS"/g" > ${WORKSPACE}/data/environments/$ENV_NAME.json
-sed -i "s/xxx/"$ENV_NAME"/g" ${WORKSPACE}/data/environments/$ENV_NAME.json
-sed -i "s/\"ueb_url_list\":.*/\"ueb_url_list\": \""$MR_IP_ADDR","$MR_IP_ADDR"\",/g" ${WORKSPACE}/data/environments/$ENV_NAME.json
-sed -i "s/\"fqdn\":.*/\"fqdn\": [\""$MR_IP_ADDR"\", \""$MR_IP_ADDR"\"]/g" ${WORKSPACE}/data/environments/$ENV_NAME.json
-
-cp ${WORKSPACE}/data/clone/sdc/sdc-os-chef/scripts/docker_run.sh ${WORKSPACE}/scripts/sdc/
+cp "${WORKSPACE}/data/clone/sdc/sdc-os-chef/scripts/docker_run.sh" "${WORKSPACE}/scripts/sdc/"
 
-source ${WORKSPACE}/data/clone/sdc/version.properties
-export RELEASE=$major.$minor-STAGING-latest
+source "${WORKSPACE}/data/clone/sdc/version.properties"
+export RELEASE="${major}.${minor}-STAGING-latest"
 
 if using_local_images ; then
     if [ -n "$SDC_LOCAL_TAG" ] ; then
@@ -81,17 +106,40 @@ if using_local_images ; then
     fi
 
     echo "[INFO]: We will use the locally built images (tag: ${RELEASE})"
-    ${WORKSPACE}/scripts/sdc/docker_run.sh \
+    "${WORKSPACE}/scripts/sdc/docker_run.sh" \
         --local \
-        -r ${RELEASE} \
-        -e ${ENV_NAME} \
-        -p 10001 -${TEST_SUITE}
+        -r "${RELEASE}" \
+        -e "${ENV_NAME}" \
+        -p 10001 "-${TEST_SUITE}"
 else
     echo "[INFO]: We will download images from the default registry (tag: ${RELEASE})"
     ${WORKSPACE}/scripts/sdc/docker_run.sh \
-        -r ${RELEASE} \
-        -e ${ENV_NAME} \
-        -p 10001 -${TEST_SUITE}
+        -r "${RELEASE}" \
+        -e "${ENV_NAME}" \
+        -p 10001 "-${TEST_SUITE}"
+fi
+
+# final step if the robot test needs to be adjusted
+# TODO: again grab the values from Template directly with jq
+# jq should be mandatory installed package (is it?)
+if using_https ; then
+    ROBOT_VARIABLES="${ROBOT_VARIABLES} \
+        -v SDC_FE_PROTOCOL:https \
+        -v SDC_FE_PORT:9443 \
+        -v SDC_BE_PROTOCOL:https \
+        -v SDC_BE_PORT:8443 \
+        -v SDC_ONBOARDING_BE_PROTOCOL:https \
+        -v SDC_ONBOARDING_BE_PORT:8443 \
+        "
+else
+    ROBOT_VARIABLES="${ROBOT_VARIABLES} \
+        -v SDC_FE_PROTOCOL:http \
+        -v SDC_FE_PORT:8181 \
+        -v SDC_BE_PROTOCOL:http \
+        -v SDC_BE_PORT:8080 \
+        -v SDC_ONBOARDING_BE_PROTOCOL:http \
+        -v SDC_ONBOARDING_BE_PORT:8081 \
+        "
 fi
 
 # This file is sourced in another script which is out of our control...
index 3705d8f..2b92be7 100644 (file)
@@ -7,9 +7,9 @@ Library           json
 *** Test Cases ***
 Get Requests health check ok
     [Tags]    get
-    CreateSession    sdc-be    http://localhost:8181
+    CreateSession    sdc-fe    ${SDC_FE_PROTOCOL}://localhost:${SDC_FE_PORT}
     ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json
-    ${resp}=    Get Request    sdc-be    /sdc1/rest/healthCheck    headers=&{headers}
+    ${resp}=    Get Request    sdc-fe    /sdc1/rest/healthCheck    headers=&{headers}
     Should Be Equal As Strings    ${resp.status_code}    200
     @{ITEMS}=    Copy List    ${resp.json()['componentsInfo']}
     : FOR    ${ELEMENT}    IN    @{ITEMS}
index 3705d8f..2b92be7 100644 (file)
@@ -7,9 +7,9 @@ Library           json
 *** Test Cases ***
 Get Requests health check ok
     [Tags]    get
-    CreateSession    sdc-be    http://localhost:8181
+    CreateSession    sdc-fe    ${SDC_FE_PROTOCOL}://localhost:${SDC_FE_PORT}
     ${headers}=    Create Dictionary    Accept=application/json    Content-Type=application/json
-    ${resp}=    Get Request    sdc-be    /sdc1/rest/healthCheck    headers=&{headers}
+    ${resp}=    Get Request    sdc-fe    /sdc1/rest/healthCheck    headers=&{headers}
     Should Be Equal As Strings    ${resp.status_code}    200
     @{ITEMS}=    Copy List    ${resp.json()['componentsInfo']}
     : FOR    ${ELEMENT}    IN    @{ITEMS}