Add CSIT to the repo 71/119471/2
authorkrishnaa96 <krishna.moorthy6@wipro.com>
Thu, 18 Mar 2021 06:10:51 +0000 (11:40 +0530)
committerkrishnaa96 <krishna.moorthy6@wipro.com>
Thu, 18 Mar 2021 07:41:50 +0000 (13:11 +0530)
Issue-ID: OPTFRA-930
Signed-off-by: krishnaa96 <krishna.moorthy6@wipro.com>
Change-Id: Ic520caf5a2122d044de0e05b415d54955cd762a0

26 files changed:
csit/.gitignore [new file with mode: 0644]
csit/plans/default/setup.sh [new file with mode: 0755]
csit/plans/default/teardown.sh [new file with mode: 0755]
csit/plans/default/testplan.txt [new file with mode: 0644]
csit/prepare-csit.sh [new file with mode: 0755]
csit/run-csit.sh [new file with mode: 0755]
csit/run-project-csit.sh [new file with mode: 0755]
csit/scripts/common_functions.sh [new file with mode: 0755]
csit/scripts/get-instance-ip.sh [new file with mode: 0755]
csit/scripts/kill-instance.sh [new file with mode: 0755]
csit/scripts/osdf-properties/aaf_root_ca.cer [new file with mode: 0644]
csit/scripts/osdf-properties/osdf.json [new file with mode: 0644]
csit/scripts/osdf-properties/osdf_config.yaml [new file with mode: 0755]
csit/scripts/osdf_proxy_settings.sh [new file with mode: 0755]
csit/scripts/osdf_script.sh [new file with mode: 0755]
csit/scripts/setup-sms.sh [new file with mode: 0755]
csit/scripts/simulator_script.sh [new file with mode: 0755]
csit/scripts/wait_for_port.sh [new file with mode: 0755]
csit/tests/osdf/__init__.robot [new file with mode: 0644]
csit/tests/osdf/data/pci-opt-request.json [new file with mode: 0644]
csit/tests/osdf/data/placement_request.json [new file with mode: 0644]
csit/tests/osdf/optf_osdf_setup.robot [new file with mode: 0644]
csit/tests/osdf/optf_osdf_test.robot [new file with mode: 0644]
csit/tests/osdf/resources/common-keywords.robot [new file with mode: 0644]
test/functest/simulators/simulated-config/slicing_config.yaml
tox.ini

diff --git a/csit/.gitignore b/csit/.gitignore
new file mode 100644 (file)
index 0000000..c8865c2
--- /dev/null
@@ -0,0 +1,2 @@
+env.properties
+archives/
diff --git a/csit/plans/default/setup.sh b/csit/plans/default/setup.sh
new file mode 100755 (executable)
index 0000000..76f071f
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+#
+echo "# aaf-sms setup.sh script";
+source ${WORKSPACE}/scripts/setup-sms.sh
+
+echo "# simulator scripts calling";
+source ${WORKSPACE}/scripts/simulator_script.sh
+
+# add here eventual scripts needed for optf/osdf
+#
+echo "# optf/osdf scripts calling";
+source ${WORKSPACE}/scripts/osdf_script.sh
+
+#
+# add here below the start of all docker containers needed for optf/osdf CSIT testing
+#
+echo "# optf/osdf scripts docker containers spinoff";
+
+#
+# add here all the configuration steps eventually needed to be carried out for optf/osdf CSIT testing
+#
+echo "# optf/osdf configuration step";
+
+
+#
+# add here all ROBOT_VARIABLES settings
+#
+echo "# optf/osdf robot variables settings";
+echo "osdf ip = ${OSDF_IP}"
+
+ROBOT_VARIABLES="-v OSDF_HOSTNAME:http://${OSDF_IP}  -v OSDF_PORT:8699"
+
+echo ${ROBOT_VARIABLES}
+
+
+
diff --git a/csit/plans/default/teardown.sh b/csit/plans/default/teardown.sh
new file mode 100755 (executable)
index 0000000..02aa669
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+
+#
+# add here below the killing of all docker containers used for optf/osdf CSIT testing
+#
+
+#
+# optf/osdf scripts docker containers killing";
+#
+
+${WORKSPACE}/scripts/kill-instance.sh optf-osdf
+${WORKSPACE}/scripts/kill-instance.sh osdf_sim
+
+echo "# aaf-sms teardown.sh script";
+${WORKSPACE}/scripts/kill-instance.sh sms
+${WORKSPACE}/scripts/kill-instance.sh vault
+
diff --git a/csit/plans/default/testplan.txt b/csit/plans/default/testplan.txt
new file mode 100644 (file)
index 0000000..239cc37
--- /dev/null
@@ -0,0 +1,22 @@
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2015-2017 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+# Test suites are relative paths under [integration.git]/test/csit/tests/.
+# Place the suites in run order.
+osdf
diff --git a/csit/prepare-csit.sh b/csit/prepare-csit.sh
new file mode 100755 (executable)
index 0000000..d46b17a
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/bash -x
+#
+# Copyright 2019-2021 © Samsung Electronics Co., Ltd.
+# Modifications Copyright (C) 2021 Pantheon.tech
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This script installs common libraries required by CSIT tests
+#
+# Branched from ccsdk/distribution to this repository Feb 23, 2021
+#
+
+if [ -z "$WORKSPACE" ]; then
+    export WORKSPACE=`git rev-parse --show-toplevel`
+fi
+
+TESTPLANDIR=${WORKSPACE}/${TESTPLAN}
+
+# Assume that if ROBOT_VENV is set and virtualenv with system site packages can be activated, 
+# ci-management/jjb/integration/include-raw-integration-install-robotframework.sh has already
+# been executed
+
+if [ -f ${WORKSPACE}/env.properties ]; then
+    source ${WORKSPACE}/env.properties
+fi
+if [ -f ${ROBOT_VENV}/bin/activate ]; then
+    source ${ROBOT_VENV}/bin/activate
+else
+    rm -rf /tmp/ci-management
+    rm -f ${WORKSPACE}/env.properties
+    cd /tmp
+    git clone "https://gerrit.onap.org/r/ci-management"
+    source /tmp/ci-management/jjb/integration/include-raw-integration-install-robotframework.sh
+fi
+
+pip freeze
+
diff --git a/csit/run-csit.sh b/csit/run-csit.sh
new file mode 100755 (executable)
index 0000000..9220ef9
--- /dev/null
@@ -0,0 +1,197 @@
+#!/bin/bash -x
+#
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+# Modification Copyright 2019-2021 © Samsung Electronics Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# $1 project/functionality
+# $2 robot options
+
+# Branched from ccsdk/distribution to this repository Feb 23, 2021
+
+#
+# functions
+#
+
+function on_exit(){
+    rc=$?
+    if [[ ${WORKSPACE} ]]; then
+        if [[ ${WORKDIR} ]]; then
+            rsync -av "$WORKDIR/" "$WORKSPACE/archives/$TESTPLAN"
+        fi
+        # Record list of active docker containers
+        docker ps --format "{{.Image}}" > "$WORKSPACE/archives/$TESTPLAN/_docker-images.log"
+
+        # show memory consumption after all docker instances initialized
+        docker_stats | tee "$WORKSPACE/archives/$TESTPLAN/_sysinfo-2-after-robot.txt"
+    fi
+    # Run teardown script plan if it exists
+    cd "${TESTPLANDIR}"
+    TEARDOWN="${TESTPLANDIR}/teardown.sh"
+    if [ -f "${TEARDOWN}" ]; then
+        echo "Running teardown script ${TEARDOWN}"
+        source_safely "${TEARDOWN}"
+    fi
+    # TODO: do something with the output
+     exit $rc
+}
+# ensure that teardown and other finalizing steps are always executed
+trap on_exit EXIT
+
+function docker_stats(){
+    #General memory details
+    echo "> top -bn1 | head -3"
+    top -bn1 | head -3
+    echo
+
+    echo "> free -h"
+    free -h
+    echo
+
+    #Memory details per Docker
+    echo "> docker ps"
+    docker ps
+    echo
+
+    echo "> docker stats --no-stream"
+    docker stats --no-stream
+    echo
+}
+
+# save current set options
+function save_set() {
+    RUN_CSIT_SAVE_SET="$-"
+    RUN_CSIT_SHELLOPTS="$SHELLOPTS"
+}
+
+# load the saved set options
+function load_set() {
+    _setopts="$-"
+
+    # bash shellopts
+    for i in $(echo "$SHELLOPTS" | tr ':' ' ') ; do
+        set +o ${i}
+    done
+    for i in $(echo "$RUN_CSIT_SHELLOPTS" | tr ':' ' ') ; do
+        set -o ${i}
+    done
+
+    # other options
+    for i in $(echo "$_setopts" | sed 's/./& /g') ; do
+        set +${i}
+    done
+    set -${RUN_CSIT_SAVE_SET}
+}
+
+# set options for quick bailout when error
+function harden_set() {
+    set -xeo pipefail
+    set +u # enabled it would probably fail too many often
+}
+
+# relax set options so the sourced file will not fail
+# the responsibility is shifted to the sourced file...
+function relax_set() {
+    set +e
+    set +o pipefail
+}
+
+# wrapper for sourcing a file
+function source_safely() {
+    [ -z "$1" ] && return 1
+    relax_set
+    . "$1"
+    load_set
+}
+
+#
+# main
+#
+
+# set and save options for quick failure
+harden_set && save_set
+
+if [ $# -eq 0 ]
+then
+    echo
+    echo "Usage: $0 plans/<project>/<functionality> [<robot-options>]"
+    echo
+    echo "    <project>, <functionality>, <robot-options>:  "
+    echo "        The same values as for the '{project}-csit-{functionality}' JJB job template."
+    echo
+    exit 1
+fi
+
+if [ -z "$WORKSPACE" ]; then
+    export WORKSPACE=$(git rev-parse --show-toplevel)
+fi
+
+if [ -f "${WORKSPACE}/${1}/testplan.txt" ]; then
+    export TESTPLAN="${1}"
+else
+    echo "testplan not found: ${WORKSPACE}/${TESTPLAN}/testplan.txt"
+    exit 2
+fi
+
+export TESTOPTIONS="${2}"
+
+rm -rf "$WORKSPACE/archives/$TESTPLAN"
+mkdir -p "$WORKSPACE/archives/$TESTPLAN"
+
+TESTPLANDIR="${WORKSPACE}/${TESTPLAN}"
+
+# Run installation of prerequired libraries
+source_safely "${WORKSPACE}/prepare-csit.sh"
+
+# Activate the virtualenv containing all the required libraries installed by prepare-csit.sh
+source_safely "${ROBOT_VENV}/bin/activate"
+
+WORKDIR=$(mktemp -d --suffix=-robot-workdir)
+cd "${WORKDIR}"
+
+# Add csit scripts to PATH
+export PATH="${PATH}:${WORKSPACE}/docker/scripts:${WORKSPACE}/scripts:${ROBOT_VENV}/bin"
+export SCRIPTS="${WORKSPACE}/scripts"
+export ROBOT_VARIABLES=
+
+# Sign in to nexus3 docker repo
+docker login -u docker -p docker nexus3.onap.org:10001
+
+# Run setup script plan if it exists
+cd "${TESTPLANDIR}"
+SETUP="${TESTPLANDIR}/setup.sh"
+if [ -f "${SETUP}" ]; then
+    echo "Running setup script ${SETUP}"
+    source_safely "${SETUP}"
+fi
+
+# show memory consumption after all docker instances initialized
+docker_stats | tee "$WORKSPACE/archives/$TESTPLAN/_sysinfo-1-after-setup.txt"
+
+# Run test plan
+cd "$WORKDIR"
+echo "Reading the testplan:"
+cat "${TESTPLANDIR}/testplan.txt" | egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' | sed "s|^|${WORKSPACE}/tests/|" > testplan.txt
+cat testplan.txt
+SUITES=$( xargs -a testplan.txt )
+
+echo ROBOT_VARIABLES="${ROBOT_VARIABLES}"
+echo "Starting Robot test suites ${SUITES} ..."
+relax_set
+python -m robot.run -N ${TESTPLAN} -v WORKSPACE:/tmp ${ROBOT_VARIABLES} ${TESTOPTIONS} ${SUITES}
+RESULT=$?
+load_set
+echo "RESULT: $RESULT"
+# Note that the final steps are done in on_exit function after this exit!
+exit $RESULT
diff --git a/csit/run-project-csit.sh b/csit/run-project-csit.sh
new file mode 100755 (executable)
index 0000000..a231c5e
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash -x
+#
+# Copyright 2020-2021 © Samsung Electronics Co., Ltd.
+# Modifications Copyright (C) 2021 Pantheon.tech
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Branched from ccsdk/distribution to this repository Feb 23, 2021
+#
+
+# $1 test options (passed on to run-csit.sh as such)
+
+export TESTOPTIONS=${1}
+export WORKSPACE=$(git rev-parse --show-toplevel)/csit
+
+rm -rf ${WORKSPACE}/archives
+mkdir -p ${WORKSPACE}/archives
+cd ${WORKSPACE}
+
+# Execute all test-suites defined under plans subdirectory
+for dir in plans/*/
+do
+    dir=${dir%*/}  # remove the trailing /
+   ./run-csit.sh ${dir} ${TESTOPTIONS}
+done
diff --git a/csit/scripts/common_functions.sh b/csit/scripts/common_functions.sh
new file mode 100755 (executable)
index 0000000..684c418
--- /dev/null
@@ -0,0 +1,263 @@
+#!/bin/bash
+
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+function memory_details(){
+    #General memory details
+    echo "> top -bn1 | head -3"
+    top -bn1 | head -3
+    echo
+
+    echo "> free -h"
+    free -h
+    echo
+
+    #Memory details per Docker
+    echo "> docker ps"
+    docker ps
+    echo
+
+    echo "> docker stats --no-stream"
+    docker stats --no-stream
+    echo
+}
+function fibonacci_number(){
+    set +x
+    if [ $1 -le 1 ]
+    then
+        echo "1"
+    elif [ $1 -le 10 ]
+    then
+        Num=$1
+        f1=0
+        f2=1
+        fn=-1
+        for i in `eval echo {1..$Num}`;do
+            fn=$((f1+f2))
+            f1=$f2
+            f2=$fn
+        done
+        echo $fn
+    else
+        echo "30"
+    fi
+}
+function wait_curl_driver(){
+    #Parameters:
+    #CURL_COMMAND - the URL on which the curl command will be executed
+    #GREP_STRING - Desired string to be found inside the body response of the
+    #              previous curl command
+    #EXCLUDE_STRING - If the filtered string (GREP_STRING) must not exist in
+    #                 the body response of the curl
+    #WAIT_MESSAGE - the message to be displayed for logging purpose. (optional)
+    #REPEAT_NUMBER - the maximum number of tries before abandoning the curl
+    #                command (optional, by default = 15)
+    #MAX_TIME - Maximum time allowed for the transfer (in seconds)
+    #STATUS_CODE - A HTTP status code desired to be found by getting the link
+    #  /!\ IMPORTANT NOTICE: the usage of STATUS_CODE option turn GREP_STRING/
+    #  /!\ EXCLUDE_STRING/and the MAX_TIME options becomes obsolete with no
+    #  /!\ execution impact
+    #MEMORY_USAGE - If Parameters exists shows the memory usage after curl
+    #               execution(s)
+
+    repeat_max=15
+    parameters="$@"
+
+    #WAIT_MESSAGE
+    if [[ $parameters == *"WAIT_MESSAGE"* ]]
+    then
+        wait_message=`echo $parameters | sed -e "s/.*WAIT_MESSAGE=//g"`
+        wait_message=`echo $wait_message | sed -e "s/ .*//g"`
+    else
+        wait_message="wait ..."
+    fi
+
+    #REPEAT_NUMBER
+    if [[ $parameters == *"REPEAT_NUMBER"* ]]
+    then
+        repeat_max=`echo $parameters | sed -e "s/.*REPEAT_NUMBER=//g"`
+        repeat_max=`echo $repeat_max | sed -e "s/ .*//g"`
+    fi
+
+    #CURL_COMMAND
+    if [[ $parameters == *"CURL_COMMAND"* ]]
+    then
+        curl_command=`echo $parameters | sed -e 's/.*CURL_COMMAND=//g'`
+        curl_command=`echo $curl_command | sed -e 's/ .*//g'`
+    else
+        echo "-Curl is empty-"  # Or no parameterseter passed.
+        return 0
+    fi
+
+    #MAX_TIME
+    if [[ $parameters == *"MAX_TIME"* ]]
+    then
+        max_time=`echo $parameters | sed -e 's/.*MAX_TIME=//g'`
+        max_time=`echo $max_time | sed -e 's/ .*//g'`
+    else
+        max_time="5"
+    fi
+
+    exclude_string=""
+    #EXCLUDE_STRING
+    if [[ $parameters == *"EXCLUDE_STRING"* ]]
+    then
+        exclude_string="-v"
+    fi
+
+    status_code=""
+    #STATUS_CODE
+    if [[ $parameters == *"STATUS_CODE"* ]]
+    then
+        status_code=`echo $parameters | sed -e 's/.*STATUS_CODE=//g'`
+        status_code=`echo $status_code | sed -e 's/ .*//g'`
+    fi
+
+    for i in `eval echo {1..$repeat_max}`; do
+        response_code=`curl -o /dev/null --silent --head --write-out '%{http_code}' $curl_command`
+        echo "..."
+        if [[ ! -z $status_code ]] ; then
+            if [ "$status_code" -eq "$response_code" ]
+            then
+                echo "SUCCESS:Actual Status code <$response_code> match the expected code <$status_code>"
+                return 0
+            else
+                echo "WARNING:Expected <$status_code> but Actual <$response_code>"
+            fi
+        else
+            #GREP_STRING
+            if [[ $parameters == *"GREP_STRING"* ]]
+            then
+                grep_command=`echo $parameters | sed -e 's/.*GREP_STRING=//g'`
+                grep_command=`echo $grep_command | sed -e 's/ REPEAT_NUMBER=.*//g' | sed -e 's/ CURL_COMMAND=.*//g' | sed -e 's/ WAIT_MESSAGE=.*//g' | sed -e 's/ MAX_TIME=.*//g' | sed -e 's/ EXCLUDE_STRING.*//g'`
+            else
+                echo "-Grep_command is empty-"  # Or no parameters passed.
+                return 0
+            fi
+
+            str=`curl -sS -m$max_time $curl_command | grep "$grep_command"`
+            echo "BODY::$str"
+            if [[ ! -z $exclude_string ]]
+            then
+                if [[ -z $str ]]
+                then
+                    echo "SUCCESS: body response does not contains '$grep_command'";
+                    break;
+                else
+                    echo "Fall_Short: Body response still contains '$grep_command'"
+                fi
+            else
+                if [[ ! -z $str ]]
+                then
+                    echo "SUCCESS: body response contains '$grep_command'";
+                break;
+                else
+                    echo "Fall_Short: Element '$grep_command' not found yet # "$i""
+                fi
+            fi
+
+            if [ "$?" = "7" ]; then
+                echo 'Connection refused or can not connect to server/proxy';
+                str=''
+            fi
+        fi
+        seconds2sleep=`fibonacci_number $i`
+        echo $wait_message
+        echo "Iteration::$i out of $repeat_max "
+        echo "Quiet time for $seconds2sleep seconds ..."
+        sleep $seconds2sleep
+
+       # if waiting for a long time, log system load
+       if [ $i -gt 45 ]
+       then
+            memory_details
+       fi
+    done
+    #MEMORY_USAGE
+    if [[ $parameters == *"MEMORY_USAGE"* ]]
+    then
+        echo "==========================MEMORY USAGE=================================="
+        memory_details
+        echo "========================================================================"
+    fi
+    return 0
+}
+
+function run_simulator ()
+{
+   run_robottestlib
+   run_simulator_docker $1
+}
+
+function run_robottestlib ()
+{
+    #Start the robottest REST library if not started
+    if ! pgrep -f robottest > /dev/null
+    then
+        #Download the latest robottest jar
+        wget -q -O  ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar  "https://nexus.open-o.org/service/local/artifact/maven/redirect?r=snapshots&g=org.openo.integration&a=org.openo.robottest&e=jar&v=LATEST"
+        chmod +x  ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar
+        eval `java -cp ${SCRIPTS}/integration/mockserver/org.openo.robottest.jar  org.openo.robot.test.robottest.MyRemoteLibrary` &
+    fi
+}
+
+function run_simulator_docker ()
+{
+    #Start the simulator docker if not started
+    SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator`
+    if [[ -z $SIMULATOR_IP ]]
+    then
+        echo "Starting simulator docker..."
+        SIMULATOR_JSON=$1
+        if [[ -z $SIMULATOR_JSON ]]
+        then
+            SIMULATOR_JSON=main.json
+        fi
+        docker run -d -i -t --name simulator -e SIMULATOR_JSON=$SIMULATOR_JSON -p 18009:18009 -p 18008:18008  openoint/simulate-test-docker
+        SIMULATOR_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' simulator`
+    fi
+
+    #Set the simulator IP in robot variables
+    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
+}
+
+function wait_for_service_init ()
+{
+    local service_url=$1
+
+    for delay in {1..50}; do
+        curl -sS ${service_url} && break
+        echo "$delay - Waiting for $service_url..."
+        sleep $delay
+    done
+}
diff --git a/csit/scripts/get-instance-ip.sh b/csit/scripts/get-instance-ip.sh
new file mode 100755 (executable)
index 0000000..a236c02
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+#
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1
diff --git a/csit/scripts/kill-instance.sh b/csit/scripts/kill-instance.sh
new file mode 100755 (executable)
index 0000000..5997098
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash
+#
+# Copyright 2016-2017 Huawei Technologies Co., Ltd.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# $1 nickname for the instance
+
+mkdir -p $WORKSPACE/archives
+
+running_containers=$(docker ps --filter name=$1 -q)
+if [ -z "$running_containers" ]
+then
+    echo "$1 already terminated"
+else
+    echo "Stopping and removing containers"
+    docker logs $running_containers >> $WORKSPACE/archives/$1.log
+    docker stop $running_containers
+    docker rm $running_containers
+fi
+
diff --git a/csit/scripts/osdf-properties/aaf_root_ca.cer b/csit/scripts/osdf-properties/aaf_root_ca.cer
new file mode 100644 (file)
index 0000000..e9a50d7
--- /dev/null
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV
+BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx
+NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK
+DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7
+XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn
+H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM
+pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7
+NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg
+2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY
+wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd
+ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM
+P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6
+aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY
+PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G
+A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ
+UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN
+BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz
+L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9
+7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx
+c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf
+jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2
+RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h
+PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF
+CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+
+Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A
+cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR
+ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX
+dYY=
+-----END CERTIFICATE-----
diff --git a/csit/scripts/osdf-properties/osdf.json b/csit/scripts/osdf-properties/osdf.json
new file mode 100644 (file)
index 0000000..ae059f3
--- /dev/null
@@ -0,0 +1,105 @@
+{
+    "domain": {
+        "name": "osdf",
+        "secrets": [
+            {
+                "name": "so",
+                "values": {
+                    "UserName": "",
+                    "Password": ""
+                }
+            },
+            {
+                "name": "conductor",
+                "values": {
+                    "UserName": "admin1",
+                    "Password": "plan.15"
+                }
+            },
+            {
+                "name": "policyPlatform",
+                "values": {
+                    "UserName": "testpdp",
+                    "Password": "alpha123"
+                }
+            },
+            {
+                "name": "policyClient",
+                "values": {
+                    "UserName": "python",
+                    "Password": "test"
+                }
+            },
+            {
+                "name": "dmaap",
+                "values": {
+                    "UserName": "NA",
+                    "Password": "NA"
+                }
+            },
+            {
+                "name": "sdc",
+                "values": {
+                    "UserName": "NA",
+                    "Password": "NA"
+                }
+            },
+            {
+                "name": "osdfPlacement",
+                "values": {
+                    "UserName": "test",
+                    "Password": "testpwd"
+                }
+            },
+            {
+                "name": "osdfPlacementSO",
+                "values": {
+                    "UserName": "so_test",
+                    "Password": "so_testpwd"
+                }
+            },
+            {
+                "name": "osdfPlacementVFC",
+                "values": {
+                    "UserName": "vfc_test",
+                    "Password": "vfc_testpwd"
+                }
+            },
+            {
+                "name": "osdfCMScheduler",
+                "values": {
+                    "UserName": "test1",
+                    "Password": "testpwd1"
+                }
+            },
+            {
+                "name": "configDb",
+                "values": {
+                    "UserName": "osdf",
+                    "Password": "passwd"
+                }
+            },
+            {
+                "name": "pciHMS",
+                "values": {
+                    "UserName": "",
+                    "Password": ""
+                }
+            },
+            {
+                "name": "osdfPCIOpt",
+                "values": {
+                    "UserName": "pci_test",
+                    "Password": "pci_testpwd"
+                }
+            },
+            {
+                "name": "osdfOptEngine",
+                "values": {
+                    "UserName": "opt_test",
+                    "Password": "opt_testpwd"
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/csit/scripts/osdf-properties/osdf_config.yaml b/csit/scripts/osdf-properties/osdf_config.yaml
new file mode 100755 (executable)
index 0000000..95856df
--- /dev/null
@@ -0,0 +1,52 @@
+placementVersioningEnabled: False
+
+# Placement API latest version numbers to be set in HTTP header
+placementMajorVersion: "1"
+placementMinorVersion: "0"
+placementPatchVersion: "0"
+
+# Placement API default version numbers to be set in HTTP header
+placementDefaultMajorVersion: "1"
+placementDefaultMinorVersion: "0"
+placementDefaultPatchVersion: "0"
+
+# Config for Conductor
+conductorUrl: "http://127.0.0.1:5000/simulated/oof/has-api/flow1-success-simple/main.json"
+conductorPingWaitTime: 2  # seconds to wait before calling the conductor retry URL
+conductorMaxRetries: 5  # if we don't get something in 30 minutes, give up
+# versions to be set in HTTP header
+conductorMinorVersion: 0
+
+# Policy Platform -- requires ClientAuth, Authorization, and Environment
+policyPlatformUrl: http://127.0.0.1:5000/simulated/policy/pdpx/decision/v1 # Policy Dev platform URL
+policyPlatformEnv: TEST  # Environment for policy platform
+
+# Config for DMaaP
+messageReaderHosts: https://DMAAP-HOST1:3905,https://DMAAP-HOST2:3905,https://DMAAP-HOST3:3905
+messageReaderTopic: org.onap.oof.osdf.multicloud
+
+# Config for SDC
+sdcUrl: https://SDC-HOST:8443/sdc/v1/catalog
+sdcONAPInstanceID: ONAP-OSDF
+
+osdfPlacementUrl: "http://127.0.0.1:24699/osdf/api/v2/placement"
+
+is_aaf_enabled: False
+aaf_cache_expiry_hrs: 3
+aaf_url: https://aaftest.simpledemo.onap.org:8095
+aaf_user_roles:
+    - /api/oof/v1/placement:org.onap.osdf.access|*|read ALL
+
+# Secret Management Service from AAF
+aaf_sms_url: http://aaf-sms.onap:10443
+aaf_sms_timeout: 30
+secret_domain: osdf
+aaf_ca_certs: ssl_certs/aaf_root_ca.cer
+
+# config db api
+configDbUrl: http://127.0.0.1:5000/simulated/configdb
+configDbGetCellListUrl: 'getCellList'
+configDbGetNbrListUrl: 'getNbrList'
+
+#key
+appkey:
diff --git a/csit/scripts/osdf_proxy_settings.sh b/csit/scripts/osdf_proxy_settings.sh
new file mode 100755 (executable)
index 0000000..c17d9d5
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+# put into this file local proxy settings in case they are needed on your local environment
+echo "### This is ${WORKSPACE}/scripts/osdf_proxy_settings.sh"
+
+echo "optf/osdf proxy settings"
+if [ "$#" -eq  "1" ]; then
+     echo "$1"
+     cd $1
+     pwd
+else
+     exit 1
+fi
+
+# don't remove following lines: commands can be attached here
+
+
diff --git a/csit/scripts/osdf_script.sh b/csit/scripts/osdf_script.sh
new file mode 100755 (executable)
index 0000000..fe0b743
--- /dev/null
@@ -0,0 +1,68 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+echo "### This is ${WORKSPACE}/scripts/osdf_script.sh"
+#
+# add here whatever commands is needed to prepare the optf/osdf CSIT testing
+#
+
+# assume the base is /tmp dir
+DIR=/tmp
+
+# the directory of the script
+echo ${DIR}
+cd ${DIR}
+
+# create directory for volume and copy configuration file
+# run docker containers
+OSDF_CONF=/tmp/osdf/properties/osdf_config.yaml
+IMAGE_NAME=nexus3.onap.org:10003/onap/optf-osdf
+IMAGE_VER=latest
+
+mkdir -p /tmp/osdf/properties
+mkdir -p /tmp/sms/properties
+
+cp ${WORKSPACE}/scripts/osdf-properties/*.yaml /tmp/osdf/properties/.
+cp ${WORKSPACE}/scripts/osdf-properties/osdf.json /tmp/sms/properties/.
+
+#change conductor/configdb simulator urls
+OSDF_SIM_IP=`${WORKSPACE}/scripts/get-instance-ip.sh osdf_sim`
+echo "OSDF_SIM_IP=${OSDF_SIM_IP}"
+SMS_IP=`${WORKSPACE}/scripts/get-instance-ip.sh sms`
+echo "SMS_IP=${SMS_IP}"
+
+sed  -i -e "s%127.0.0.1:5000%${OSDF_SIM_IP}:5000%g" $OSDF_CONF
+sed  -i -e "s%aaf-sms.onap:10443%${SMS_IP}:10443%g" $OSDF_CONF
+
+#Preload secrets
+docker exec --user root -i sms  /bin/sh -c "mkdir -p /preload/config"
+docker cp /tmp/sms/properties/osdf.json sms:/preload/config/osdf.json
+docker exec --user root -i sms  /bin/sh -c "/sms/bin/preload -cacert /sms/certs/aaf_root_ca.cer -jsondir /preload/config -serviceport 10443 -serviceurl http://localhost"
+
+docker logs vault
+docker run -d --name optf-osdf -v ${OSDF_CONF}:/opt/osdf/config/osdf_config.yaml -p "8698:8699" ${IMAGE_NAME}:${IMAGE_VER}
+
+sleep 20
+
+OSDF_IP=`${WORKSPACE}/scripts/get-instance-ip.sh optf-osdf`
+${WORKSPACE}/scripts/wait_for_port.sh ${OSDF_IP} 8699
+
+echo "inspect docker things for tracing purpose"
+docker inspect optf-osdf
diff --git a/csit/scripts/setup-sms.sh b/csit/scripts/setup-sms.sh
new file mode 100755 (executable)
index 0000000..ae6bd2f
--- /dev/null
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# Copyright 2018 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Not sure why this is needed.
+source ${WORKSPACE}/scripts/common_functions.sh
+
+CONFIG_FILE=$(pwd)/config/smsconfig.json
+
+mkdir -p $(pwd)/config
+
+docker login -u docker -p docker nexus3.onap.org:10001
+docker pull nexus3.onap.org:10001/onap/aaf/sms
+docker pull docker.io/vault:1.3.3
+
+#
+# Running vault in dev server mode here for CSIT
+# In HELM it runs in production mode
+#
+docker run -e "VAULT_DEV_ROOT_TOKEN_ID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" \
+           -e SKIP_SETCAP=true \
+           --name vault -d -p 8200:8200 vault:1.3.3
+
+SMSDB_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vault)
+cat << EOF > $CONFIG_FILE
+{
+    "cafile": "auth/selfsignedca.pem",
+    "servercert": "auth/server.cert",
+    "serverkey":  "auth/server.key",
+
+    "smsdbaddress":     "http://$SMSDB_IP:8200",
+    "vaulttoken":       "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
+    "disable_tls": true
+}
+EOF
+
+cat $CONFIG_FILE
+
+docker run --workdir /sms -v $CONFIG_FILE:/sms/smsconfig.json \
+           --name sms -d -p 10443:10443 --user root nexus3.onap.org:10001/onap/aaf/sms
+
+SMS_IP=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' sms)
+
+echo "###### WAITING FOR ALL CONTAINERS TO COME UP"
+sleep 20
+for i in {1..20}; do
+    curl -sS -m 1 http://${SMSDB_IP}:8200/v1/sys/seal-status && break
+    echo sleep $i
+    sleep $i
+done
+
+#
+# add here all ROBOT_VARIABLES settings
+#
+echo "# sms robot variables settings";
+ROBOT_VARIABLES="-v SMS_HOSTNAME:http://${SMS_IP} -v SMS_PORT:10443"
+
+echo ${ROBOT_VARIABLES}
diff --git a/csit/scripts/simulator_script.sh b/csit/scripts/simulator_script.sh
new file mode 100755 (executable)
index 0000000..e146cb9
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+echo "### This is ${WORKSPACE}/scripts/simulator_script.sh"
+#
+# add here whatever commands is needed to prepare the optf/osdf CSIT testing
+#
+
+#echo "i am ${USER} : only non jenkins users may need proxy settings"
+if [ ${USER} != 'jenkins' ]; then
+
+    # add proxy settings into this script when you work behind a proxy
+    ${WORKSPACE}/scripts/osdf_proxy_settings.sh ${WORK_DIR}
+
+fi
+
+# prepare osdf_sim
+cd ${WORKSPACE}/../test/functest/simulators
+
+# check Dockerfile content
+cat ./Dockerfile
+
+# build osdf_sim
+chmod +x ./build_sim_image.sh
+./build_sim_image.sh
+
+# run osdf_sim
+docker run -d --name osdf_sim -p "5000:5000"  osdf_sim:latest;
+
+OSDF_SIM_IP=`${WORKSPACE}/scripts/get-instance-ip.sh osdf_sim`
+echo "OSDF_SIM_IP=${OSDF_SIM_IP}"
+
+${WORKSPACE}/scripts/wait_for_port.sh ${OSDF_SIM_IP} 5000
+
+
+# wait a while before continuing
+sleep 2
+
+echo "inspect docker things for tracing purpose"
+docker inspect osdf_sim
+
diff --git a/csit/scripts/wait_for_port.sh b/csit/scripts/wait_for_port.sh
new file mode 100755 (executable)
index 0000000..360fc21
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# -------------------------------------------------------------------------
+#   Copyright (c) 2018 AT&T Intellectual Property
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+
+if [[ $# -ne 2 ]]; then
+       echo "Usage: wait-for-port hostname port" >&2
+       exit 1
+fi
+
+host=$1
+port=$2
+
+echo "Waiting for $host port $port open"
+until telnet $host $port </dev/null 2>/dev/null | grep -q '^Connected'; do
+       sleep 1
+done
+
+echo "$host port $port is open"
+
+exit 0
diff --git a/csit/tests/osdf/__init__.robot b/csit/tests/osdf/__init__.robot
new file mode 100644 (file)
index 0000000..fb654d7
--- /dev/null
@@ -0,0 +1,4 @@
+*** Settings ***
+Documentation    Integration - Suite 1
+
+
diff --git a/csit/tests/osdf/data/pci-opt-request.json b/csit/tests/osdf/data/pci-opt-request.json
new file mode 100644 (file)
index 0000000..7ec9ab5
--- /dev/null
@@ -0,0 +1,20 @@
+{
+  "requestInfo": {
+    "transactionId": "xxx-xxx-xxxx",
+    "requestId": "yyy-yyy-yyyy",
+    "callbackUrl": "https://wiki.onap.org:5000/callbackUrl/",
+    "sourceId": "SO",
+    "requestType": "create",
+    "numSolutions": 1,
+    "optimizers": [
+      "placement"
+    ],
+    "timeout": 600
+  },
+  "cellInfo": {
+    "networkId": "1000",
+    "cellIdList": [
+      "cell0"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/csit/tests/osdf/data/placement_request.json b/csit/tests/osdf/data/placement_request.json
new file mode 100644 (file)
index 0000000..d9b16ca
--- /dev/null
@@ -0,0 +1,102 @@
+{
+  "requestInfo": {
+    "transactionId": "xxx-xxx-xxxx",
+    "requestId": "yyy-yyy-yyyy",
+    "callbackUrl": "https://wiki.onap.org:5000/callbackUrl/",
+    "sourceId": "SO",
+    "requestType": "create",
+    "numSolutions": 1,
+    "optimizers": ["placement"],
+    "timeout": 600
+  },
+  "placementInfo": {
+    "requestParameters": { "customerLatitude": 32.89748, "customerLongitude": -97.040443, "customerName": "xyz" },
+    "subscriberInfo": {"globalSubscriberId": "xxx-xx-xxx", "subscriberName": "subscriber_x"},
+    "placementDemands": [
+        {
+            "resourceModuleName": "vGMuxInfra",
+            "serviceResourceId": "vGMuxInfra-xx",
+            "tenantId": "vGMuxInfra-tenant",
+            "resourceModelInfo": {
+                "modelInvariantId": "vGMuxInfra-modelInvariantId",
+                "modelVersionId": "vGMuxInfra-versionId",
+                "modelName": "vGMuxInfra-model",
+                "modelType": "resource",
+                "modelVersion": "1.0",
+                "modelCustomizationName": "vGMuxInfra-customeModelName"
+            }
+        },
+        {
+            "resourceModuleName": "vG",
+            "serviceResourceId": "71d563e8-e714-4393-8f99-cc480144a05e",
+            "tenantId": "vG-tenant",
+            "resourceModelInfo": {
+                "modelInvariantId": "vG-modelInvariantId",
+                "modelVersionId": "vG-versionId",
+                "modelName": "vG-model",
+                "modelType": "resource",
+                "modelVersion": "1.0",
+                "modelCustomizationName": "vG-customeModelName"
+            },
+            "existingCandidates": [
+                {
+                    "identifierType": "serviceInstanceId",
+                    "cloudOwner": "",
+                    "identifiers": ["gjhd-098-fhd-987"]
+                }
+            ],
+            "excludedCandidates": [
+                {
+                    "identifierType": "serviceInstanceId",
+                    "cloudOwner": "",
+                    "identifiers": ["gjhd-098-fhd-987"]
+                },
+                {
+                    "identifierType": "vimId",
+                    "cloudOwner": "vmware",
+                    "identifiers": ["NYMDT67"]
+                }
+            ],
+            "requiredCandidates": [
+                {
+                    "identifierType": "vimId",
+                    "cloudOwner": "amazon",
+                    "identifiers": ["TXAUS219"]
+                }
+            ]
+        }
+    ]
+  },
+  "serviceInfo": {
+    "serviceInstanceId": "d61b2543-5914-4b8f-8e81-81e38575b8ec",
+    "serviceName": "vCPE",
+    "modelInfo": {
+      "modelInvariantId": "vCPE-invariantId",
+      "modelVersionId": "vCPE-versionId",
+      "modelName": "vCPE-model",
+      "modelType": "service",
+      "modelVersion": "1.0",
+      "modelCustomizationName": "vCPE-customeModelName"
+    }
+  },
+  "licenseInfo": {
+      "licenseDemands": [
+        {
+          "resourceModuleName": "vGMuxInfra",
+          "serviceResourceId": "vGMuxInfra-xx",
+          "resourceModelInfo": {
+            "modelInvariantId": "vGMuxInfra-modelInvariantId",
+            "modelVersionId": "vGMuxInfra-versionId",
+            "modelName": "vGMuxInfra-model",
+            "modelType": "resource",
+            "modelVersion": "1.0",
+            "modelCustomizationName": "vGMuxInfra-customeModelName"
+          },
+          "existingLicenses": {
+            "entitlementPoolUUID": ["87257b49-9602-4ca1-9817-094e52bc873b", "43257b49-9602-4fe5-9337-094e52bc9435"],
+            "licenseKeyGroupUUID": ["87257b49-9602-4ca1-9817-094e52bc873b", "43257b49-9602-4fe5-9337-094e52bc9435"]
+          }
+        }
+      ]
+  }
+}
\ No newline at end of file
diff --git a/csit/tests/osdf/optf_osdf_setup.robot b/csit/tests/osdf/optf_osdf_setup.robot
new file mode 100644 (file)
index 0000000..fdf7f3e
--- /dev/null
@@ -0,0 +1,12 @@
+*** Settings ***
+Documentation    Suite description
+Resource          ./resources/common-keywords.robot
+
+*** Test Cases ***
+Check OSDF_SIM Docker Container
+    [Documentation]    It checks osdf_simulator docker container is running
+    Verify Docker RC Status    osdf_sim
+
+Check OSDF Docker Container
+    [Documentation]    It checks optf-osdf docker container is running
+    Verify Docker RC Status    optf-osdf
\ No newline at end of file
diff --git a/csit/tests/osdf/optf_osdf_test.robot b/csit/tests/osdf/optf_osdf_test.robot
new file mode 100644 (file)
index 0000000..79a5750
--- /dev/null
@@ -0,0 +1,48 @@
+*** Settings ***
+Library       json
+Library       OperatingSystem
+Resource          ./resources/common-keywords.robot
+
+Suite Teardown  Delete All Sessions
+
+*** Variables ***
+${osdf_host}    ${OSDF_HOSTNAME}:${OSDF_PORT}
+&{placement_auth} =    username=test   password=testpwd
+&{wrong_authorization} =    username=test   password=test
+&{pci_auth}=    username=pci_test   password=pci_testpwd
+
+*** Test Cases ***
+Healthcheck
+    [Documentation]    It sends a REST GET request to healthcheck url
+    ${resp}=         Http Get         ${osdf_host}   /api/oof/v1/healthcheck
+    Should Be Equal As Integers    ${resp.status_code}    200
+
+SendPlacementWithInvalidAuth
+    [Documentation]    It sends a POST request to osdf fail authentication
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}placement_request.json
+    ${resp}=         Http Post        host=${osdf_host}   restUrl=/api/oof/v1/placement     data=${data}    auth=${wrong_authorization}
+    ${response_json}    json.loads    ${resp.content}
+    Should Be Equal     Unauthorized, check username and password    ${response_json['serviceException']['text']}
+    Should Be Equal As Integers    ${resp.status_code}    401
+
+SendPlacementWithValidAuth
+    [Documentation]    It sends a POST request to osdf with correct authentication
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}placement_request.json
+    ${resp}=         Http Post        host=${osdf_host}   restUrl=/api/oof/v1/placement     data=${data}    auth=${placement_auth}
+    ${response_json}    json.loads    ${resp.content}
+    Should Be Equal As Integers    ${resp.status_code}    202
+    Should Be Equal     accepted    ${response_json['requestStatus']}
+
+SendPCIOptimizationWithAuth
+    [Documentation]    It sends a POST request PCI Optimization service
+
+    ${data}=         Get Binary File     ${CURDIR}${/}data${/}pci-opt-request.json
+    ${resp}=         Http Post        host=${osdf_host}   restUrl=/api/oof/v1/pci     data=${data}    auth=${pci_auth}
+    ${response_json}    json.loads    ${resp.content}
+    Should Be Equal As Integers    ${resp.status_code}    202
+    Should Be Equal     accepted    ${response_json['requestStatus']}
+
+
+
+
+
diff --git a/csit/tests/osdf/resources/common-keywords.robot b/csit/tests/osdf/resources/common-keywords.robot
new file mode 100644 (file)
index 0000000..74232c5
--- /dev/null
@@ -0,0 +1,50 @@
+*** Settings ***
+Documentation    Suite description
+Library       OperatingSystem
+Library       RequestsLibrary
+Library       json
+Library       RequestsLibrary
+*** Variables ***
+&{headers}=      Content-Type=application/json  Accept=application/json
+*** Keywords ***
+Verify Docker RC Status
+    [Documentation]  Method to verify whether docker instance is up and running
+    [Arguments]  ${process_name}
+    ${rc}    ${output}=    Run and Return RC and Output    docker ps
+    Log To Console              *********************
+    Log To Console              retrurn_code = ${rc}
+    Log To Console              output = ${output}
+    Should Be Equal As Integers    ${rc}    0
+    Should Contain    ${output}    ${process_name}
+
+Http Get
+    [Documentation]  Wrapper for Http GET
+    [Arguments]  ${host}    ${restUrl}
+    Create Session   optf-osdf            ${host}
+    ${resp}=         Get Request        optf-osdf   ${restUrl}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    [Return]  ${resp}
+
+Http Post
+    [Documentation]  Wrapper for Http POST
+    [Arguments]  ${host}    ${restUrl}    ${auth}    ${data}
+    ${pci_auth}=    Create List    ${auth['username']}  ${auth['password']}
+    Create Session   optf-osdf            ${host}    headers=${headers}   auth=${pci_auth}
+    ${resp}=         Post Request        optf-osdf   ${restUrl}    data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    [Return]  ${resp}
+
+Http Put
+    [Documentation]  Wrapper for Http PUT
+    [Arguments]  ${host}    ${restUrl}    ${auth}    ${data}
+    ${pci_auth}=    Create List    ${auth['username']}  ${auth['password']}
+    Create Session   optf-osdf            ${host}    headers=${headers}   auth=${pci_auth}
+    ${resp}=         Put Request        optf-osdf   ${restUrl}    data=${data}     headers=${headers}
+    Log To Console              *********************
+    Log To Console              response = ${resp}
+    Log To Console              body = ${resp.text}
+    [Return]  ${resp}
index a7e3a48..1dd01ce 100644 (file)
@@ -20,9 +20,9 @@ attribute_mapping:
     dLThptPerUE: dl_thpt_per_ue
     uLThptPerUE: ul_thpt_per_ue
     sNSSAI: s_nssai
-    pLMNIdList: plmn_id_list
+    plmnIdList: plmn_id_list
     activityFactor: activity_factor
-    coverageAreaTAList: coverage_area_ta_List
+    coverageAreaTAList: coverage_area_ta_list
     availability: availability
     cSAvailabilityTarget: cs_availability_target
     reliability: reliability
@@ -44,6 +44,9 @@ attribute_mapping:
     expDataRate: exp_data_rate
     security: security
     maxThroughput: max_throughput
+    sliceProfileId: slice_profile_id
+    snssaiList: s_nssai_list
+    domainType: domain_type
 
   snake_to_camel:
     max_bandwidth: maxBandwidth
@@ -56,9 +59,9 @@ attribute_mapping:
     dl_thpt_per_ue: dLThptPerUE
     ul_thpt_per_ue: uLThptPerUE
     s_nssai: sNSSAI
-    plmn_id_list: pLMNIdList
+    plmn_id_list: plmnIdList
     activity_factor: activityFactor
-    coverage_area_ta_List: coverageAreaTAList
+    coverage_area_ta_list: coverageAreaTAList
     availability: availability
     cs_availability_target: cSAvailabilityTarget
     reliability: reliability
@@ -80,3 +83,6 @@ attribute_mapping:
     exp_data_rate: expDataRate
     security: security
     max_throughput: maxThroughput
+    slice_profile_id: sliceProfileId
+    s_nssai_list: snssaiList
+    domain_type: domainType
diff --git a/tox.ini b/tox.ini
index 3b15855..fb975e7 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -10,14 +10,12 @@ setenv   =
     OSDF_CONFIG_FILE={toxinidir}/test/config/osdf_config.yaml
 commands =
     /bin/cp config/slicing_config.yaml test/config/
-    /bin/cp config/slicing_config.yaml test/functest/simulators/simulated-config/
     /bin/bash test/functest/scripts/start-simulators.sh
     coverage run --module pytest --junitxml xunit-results.xml
     coverage xml --omit=".tox/py3/*","test/*"
     coverage report -m --omit=".tox/py3/*","test/*"
     /bin/bash test/functest/scripts/stop-simulators.sh
     /bin/rm test/config/slicing_config.yaml
-    /bin/rm test/functest/simulators/simulated-config/slicing_config.yaml
     # TODO: need to update the above "omit" when we package osdf as pip-installable
 deps = -r{toxinidir}/requirements.txt
     -r{toxinidir}/test/test-requirements.txt