From 0bb532c41e89568966ca2bfae259737e8830249b Mon Sep 17 00:00:00 2001 From: Moshe Date: Mon, 26 Feb 2018 13:39:57 +0200 Subject: Initial VNFTEST fw Issue-ID: VNFSDK-195 Change-Id: I5abf0dd033e76e5225bb8271c0afaea325d741d9 Signed-off-by: Moshe docker build Issue-ID: VNFSDK-195 Change-Id: I25eb933504c0201e6c26477b540626fd515d2887 Signed-off-by: Moshe fix requirements Issue-ID: VNFSDK-195 Change-Id: I5907fa102bfbf9cb81d42e491c133b4fdbb0d6fd Signed-off-by: Moshe rm netifaces Issue-ID: VNFSDK-195 Change-Id: I349d0c738442edfef256c90b06cbaeb446c1db13 Signed-off-by: Moshe fix tox config IssueID: VNFTEST-195 Change-Id: I5c0b0e0ab96cad1bdc56ab63860d794bfd15b5eb Signed-off-by: Moshe Add unit test IssueID: VNFTEST-195 Change-Id: I08c9ba53721306aff4b74720181f8c853c4ccabe Signed-off-by: Moshe fix setup.py Issue-ID: VNFSDK-195 Change-Id: I72bd93e4977edf5ef0b46c72fe47165b805aab7b Signed-off-by: Moshe fix test execution Issue-ID: VNFSDK-195 Change-Id: I488a6226d2562229f0e7fa6c1d20f0c43882bc3b Signed-off-by: Moshe --- docker/Dockerfile | 59 +++++++++++++++++++++++++++++++++ docker/Makefile | 43 ++++++++++++++++++++++++ docker/exec_tests.sh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++ docker/nginx.sh | 43 ++++++++++++++++++++++++ docker/supervisor.sh | 33 ++++++++++++++++++ docker/uwsgi.sh | 53 +++++++++++++++++++++++++++++ 6 files changed, 325 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/Makefile create mode 100755 docker/exec_tests.sh create mode 100755 docker/nginx.sh create mode 100755 docker/supervisor.sh create mode 100755 docker/uwsgi.sh (limited to 'docker') diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..20598c7 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,59 @@ +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/Dockerfile +FROM ubuntu:16.04 + +LABEL image=onap/vnftest + +ARG BRANCH=master + +# GIT repo directory +ENV REPOS_DIR="/home/onap/repos" \ + IMAGE_DIR="/home/onap/images/" + +# Set work directory + +# Vnftest repo +ENV VNFTEST_REPO_DIR="${REPOS_DIR}/vnftest" \ + RELENG_REPO_DIR="${REPOS_DIR}/releng" \ + STORPERF_REPO_DIR="${REPOS_DIR}/storperf" + +RUN apt-get update && apt-get install -y git python-setuptools python-pip && apt-get -y autoremove && apt-get clean +RUN easy_install -U setuptools==30.0.0 +RUN pip install appdirs==1.4.0 pyopenssl==17.5.0 python-openstackclient==3.11.0 + +RUN mkdir -p ${REPOS_DIR} + +RUN git config --global http.sslVerify false +RUN git clone --depth 1 -b $BRANCH https://gerrit.onap.org/r/vnfsdk/dovetail-integration ${VNFTEST_REPO_DIR} + +WORKDIR ${VNFTEST_REPO_DIR} +RUN ${VNFTEST_REPO_DIR}/install.sh +RUN ${VNFTEST_REPO_DIR}/docker/supervisor.sh + +RUN echo "daemon off;" >> /etc/nginx/nginx.conf + +EXPOSE 6000 + +ADD http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img ${IMAGE_DIR} +ADD http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img ${IMAGE_DIR} + +COPY ./exec_tests.sh /usr/local/bin/ + +ENV NSB_DIR="/opt/nsb_bin" \ + PYTHONPATH="${PYTHONPATH}:${NSB_DIR}/trex_client:${NSB_DIR}/trex_client/stl" + +WORKDIR ${REPOS_DIR} +CMD ["/usr/bin/supervisord"] diff --git a/docker/Makefile b/docker/Makefile new file mode 100644 index 0000000..4f9e18b --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,43 @@ +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/Makefile + +SHELL = /bin/bash + +IMAGE = onap/vnftest + +DOCKER_TAG = beijing.0 + +.PHONY: all +all: .docker + +.docker: + /usr/bin/docker build --rm=true --no-cache=true -t $(IMAGE):$(DOCKER_TAG) . + /usr/bin/docker tag $(IMAGE):$(DOCKER_TAG) $(IMAGE):latest + touch .docker + + +.PHONY: clean +clean: + @docker ps | grep $(IMAGE) | awk '{print $$1}' | xargs -r docker stop + @docker ps -a | grep $(IMAGE) | awk '{print $$1}' | xargs -r docker rm + @echo "Docker images to remove:" + @docker images | head -1 && docker images | grep $(IMAGE) || true + @image_tags=($$(docker images | grep $(IMAGE) | awk '{print $$2}')) ; \ + for tag in "$${image_tags[@]}"; do \ + echo "Removing docker image $(IMAGE):$$tag..." ; \ + docker rmi $(IMAGE):$$tag ; \ + done + rm -f .docker diff --git a/docker/exec_tests.sh b/docker/exec_tests.sh new file mode 100755 index 0000000..9e16476 --- /dev/null +++ b/docker/exec_tests.sh @@ -0,0 +1,94 @@ +#!/bin/bash +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/exec_tests.sh +set -e + +: ${VNFTEST_REPO:='https://gerrit.onap.org/gerrit/vnftest'} +: ${VNFTEST_REPO_DIR:='/home/onap/repos/vnftest'} +: ${VNFTEST_BRANCH:='master'} # branch, tag, sha1 or refspec + +# git update using reference as a branch. +# git_update_branch ref +function git_update_branch { + local git_branch=$1 + + git checkout -f origin/${git_branch} + # a local branch might not exist + git branch -D ${git_branch} || true + git checkout -b ${git_branch} +} + +# git update using reference as a branch. +# git_update_remote_branch ref +function git_update_remote_branch { + local git_branch=$1 + + git checkout -b ${git_branch} -t origin/${git_branch} +} + +# git update using reference as a tag. Be careful editing source at that repo +# as working copy will be in a detached mode +# git_update_tag ref +function git_update_tag { + local git_tag=$1 + + git tag -d ${git_tag} + # fetching given tag only + git fetch origin tag ${git_tag} + git checkout -f ${git_tag} +} + + +# OpenStack Functions + +git_checkout() +{ + local git_ref=$1 + if [[ -n "$(git show-ref refs/tags/${git_ref})" ]]; then + git_update_tag "${git_ref}" + elif [[ -n "$(git show-ref refs/heads/${git_ref})" ]]; then + git_update_branch "${git_ref}" + elif [[ -n "$(git show-ref refs/remotes/origin/${git_ref})" ]]; then + git_update_remote_branch "${git_ref}" + # check to see if it is a remote ref + elif git fetch --tags origin "${git_ref}"; then + # refspec / changeset + git checkout FETCH_HEAD + else + # if we are a random commit id we have to unshallow + # to get all the commits + git fetch --unshallow origin + git checkout -f "${git_ref}" + fi +} + +# releng is not needed, we bind-mount the credentials + +echo +echo "INFO: Updating vnftest -> ${VNFTEST_BRANCH}" +if [ ! -d ${VNFTEST_REPO_DIR} ]; then + git clone ${VNFTEST_REPO} ${VNFTEST_REPO_DIR} +fi +cd ${VNFTEST_REPO_DIR} +git_checkout ${VNFTEST_BRANCH} + +if [[ "${DEPLOY_STEP:0:2}" == "os" ]];then + # setup the environment + source ${VNFTEST_REPO_DIR}/tests/ci/prepare_env.sh +fi + +# execute tests +${VNFTEST_REPO_DIR}/tests/ci/vnftest-verify $@ diff --git a/docker/nginx.sh b/docker/nginx.sh new file mode 100755 index 0000000..ac81c73 --- /dev/null +++ b/docker/nginx.sh @@ -0,0 +1,43 @@ +#!/bin/bash +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/nginx.sh + +# nginx config +nginx_config='/etc/nginx/conf.d/vnftest.conf' + +if [[ ! -e "${nginx_config}" ]];then + + cat << EOF > "${nginx_config}" +server { + listen 6000; + server_name localhost; + index index.htm index.html; + location / { + include uwsgi_params; + client_max_body_size 2000m; + uwsgi_pass unix:///var/run/vnftest.sock; + } + + location /gui/ { + alias /etc/nginx/vnftest/gui/; + } + + location /report/ { + alias /tmp/; + } +} +EOF +fi diff --git a/docker/supervisor.sh b/docker/supervisor.sh new file mode 100755 index 0000000..0462024 --- /dev/null +++ b/docker/supervisor.sh @@ -0,0 +1,33 @@ +#!/bin/bash +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/supervisor.sh + +# nginx service start when boot +supervisor_config='/etc/supervisor/conf.d/vnftest.conf' + +if [[ ! -e "${supervisor_config}" ]];then + cat << EOF > "${supervisor_config}" +[supervisord] +nodaemon = true + +[program:nginx] +command = service nginx restart + +[program:vnftest_uwsgi] +directory = /etc/vnftest +command = uwsgi -i vnftest.ini +EOF +fi diff --git a/docker/uwsgi.sh b/docker/uwsgi.sh new file mode 100755 index 0000000..da0833a --- /dev/null +++ b/docker/uwsgi.sh @@ -0,0 +1,53 @@ +#!/bin/bash +############################################################################## +# Copyright 2018 EuropeanSoftwareMarketingLtd. +# =================================================================== +# Licensed under the ApacheLicense, Version2.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 +# +# 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 +############################################################################## +# vnftest comment: this is a modified copy of +# yardstick/docker/uwsgi.sh + +: ${VNFTEST_REPO_DIR:='/home/onap/repos/vnftest'} + +# generate uwsgi config file +mkdir -p /etc/vnftest + +# create api log directory +mkdir -p /var/log/vnftest + +# create vnftest.sock for communicating +touch /var/run/vnftest.sock + +uwsgi_config='/etc/vnftest/vnftest.ini' +if [[ ! -e "${uwsgi_config}" ]];then + + cat << EOF > "${uwsgi_config}" +[uwsgi] +master = true +debug = true +chdir = ${VNFTEST_REPO_DIR}/api +module = server +plugins = python +processes = 10 +threads = 5 +async = true +max-requests = 5000 +chmod-socket = 666 +callable = app_wrapper +enable-threads = true +close-on-exec = 1 +daemonize= /var/log/vnftest/uwsgi.log +socket = /var/run/vnftest.sock +EOF + if [[ "${VNFTEST_VENV}" ]];then + echo "virtualenv = ${VNFTEST_VENV}" >> "${uwsgi_config}" + fi +fi -- cgit 1.2.3-korg