summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xjjb/apex/apex-deploy.sh2
-rw-r--r--jjb/apex/apex.yml23
-rw-r--r--jjb/armband/armband-ci-jobs.yml14
-rwxr-xr-xjjb/armband/armband-deploy.sh4
-rw-r--r--jjb/compass4nfv/compass-ci-jobs.yml2
-rw-r--r--jjb/compass4nfv/compass-deploy.sh7
-rw-r--r--jjb/compass4nfv/compass-project-jobs.yml2
-rw-r--r--jjb/compass4nfv/compass-verify-jobs.yml4
-rwxr-xr-xjjb/daisy4nfv/daisy4nfv-download-artifact.sh13
-rwxr-xr-xjjb/escalator/escalator-basic.sh5
-rwxr-xr-xjjb/escalator/escalator-build.sh33
-rwxr-xr-xjjb/escalator/escalator-upload-artifact.sh89
-rw-r--r--jjb/escalator/escalator.yml326
-rwxr-xr-xjjb/fuel/fuel-download-artifact.sh4
-rw-r--r--jjb/infra/bifrost-verify-jobs.yml43
-rwxr-xr-xjjb/kvmfornfv/kvmfornfv-test.sh9
-rw-r--r--jjb/kvmfornfv/kvmfornfv.yml10
-rw-r--r--jjb/multisite/multisite-daily-jobs.yml247
-rw-r--r--jjb/opnfv/installer-params.yml10
-rw-r--r--jjb/opnfv/opnfv-docs.yml2
-rw-r--r--jjb/opnfv/opnfv-lint.yml2
-rw-r--r--jjb/opnfv/slave-params.yml10
-rw-r--r--jjb/qtip/qtip-project-jobs.yml7
-rw-r--r--jjb/vswitchperf/vswitchperf.yml22
-rw-r--r--jjb/yardstick/yardstick-project-jobs.yml2
-rw-r--r--modules/README.rst2
-rw-r--r--modules/opnfv/utils/OPNFVExceptions.py126
-rw-r--r--modules/opnfv/utils/constants.py15
-rwxr-xr-xmodules/run_unit_tests.sh36
-rw-r--r--modules/setup.py6
-rw-r--r--modules/tests/__init__.py0
-rw-r--r--modules/tests/unit/__init__.py0
-rw-r--r--modules/tests/unit/utils/__init__.py0
-rw-r--r--modules/tests/unit/utils/test_OPNFVExceptions.py74
-rw-r--r--prototypes/bifrost/playbooks/test-bifrost-infracloud.yaml3
-rwxr-xr-xprototypes/bifrost/scripts/test-bifrost-deployment.sh3
-rwxr-xr-xutils/test/reporting/functest/reporting-status.py8
37 files changed, 1100 insertions, 65 deletions
diff --git a/jjb/apex/apex-deploy.sh b/jjb/apex/apex-deploy.sh
index e21387ac6..bbceb4b88 100755
--- a/jjb/apex/apex-deploy.sh
+++ b/jjb/apex/apex-deploy.sh
@@ -176,6 +176,8 @@ else
# settings for bare metal deployment
if [ "$IPV6_FLAG" == "True" ]; then
NETWORK_FILE="/root/network/network_settings_v6.yaml"
+ elif [[ "$JOB_NAME" == *master* ]]; then
+ NETWORK_FILE="/root/network/network_settings-master.yaml"
else
NETWORK_FILE="/root/network/network_settings.yaml"
fi
diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml
index 643972bd2..8bfc53d59 100644
--- a/jjb/apex/apex.yml
+++ b/jjb/apex/apex.yml
@@ -220,13 +220,13 @@
git-revision: false
block: true
same-node: true
-# - trigger-builds:
-# - project: 'functest-apex-{verify-slave}-suite-{stream}'
-# predefined-parameters: |
-# DEPLOY_SCENARIO=os-odl_l2-nofeature-ha
-# FUNCTEST_SUITE_NAME=healthcheck
-# block: true
-# same-node: true
+ - trigger-builds:
+ - project: 'functest-apex-{verify-slave}-suite-{stream}'
+ predefined-parameters: |
+ DEPLOY_SCENARIO=os-odl_l2-nofeature-ha
+ FUNCTEST_SUITE_NAME=healthcheck
+ block: true
+ same-node: true
- 'apex-workspace-cleanup'
- job-template:
@@ -949,11 +949,16 @@
- trigger:
name: 'apex-master'
triggers:
- - timed: '0 0 20 8 *'
+ - timed: '0 3 * * 0'
+ - timed: '0 3 * * 4'
- trigger:
name: 'apex-colorado'
triggers:
- - timed: '0 3 * * *'
+ - timed: '0 3 * * 1'
+ - timed: '0 3 * * 2'
+ - timed: '0 3 * * 3'
+ - timed: '0 3 * * 5'
+ - timed: '0 3 * * 6'
- trigger:
name: 'apex-gs-clean-{stream}'
triggers:
diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml
index 2122959a9..b1cd9bf75 100644
--- a/jjb/armband/armband-ci-jobs.yml
+++ b/jjb/armband/armband-ci-jobs.yml
@@ -303,31 +303,31 @@
- trigger:
name: 'fuel-os-odl_l2-nofeature-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 1'
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 2'
- trigger:
name: 'fuel-os-odl_l3-nofeature-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 3'
- trigger:
name: 'fuel-os-odl_l2-bgpvpn-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 4'
- trigger:
name: 'fuel-os-odl_l2-nofeature-noha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 5'
- trigger:
name: 'fuel-os-odl_l2-sfc-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 6'
- trigger:
name: 'fuel-os-odl_l2-sfc-noha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 2 * * 7'
#--------------------------------------------------------------------
# Enea Armband CI Virtual Triggers running against colorado branch
#--------------------------------------------------------------------
diff --git a/jjb/armband/armband-deploy.sh b/jjb/armband/armband-deploy.sh
index c8e58afa8..e0631c424 100755
--- a/jjb/armband/armband-deploy.sh
+++ b/jjb/armband/armband-deploy.sh
@@ -61,6 +61,10 @@ if [[ $LAB_CONFIG_URL =~ ^(git|ssh):// ]]; then
fi
fi
+if [[ "$NODE_NAME" =~ "virtual" ]]; then
+ POD_NAME="virtual_kvm"
+fi
+
# releng wants us to use nothing else but opnfv.iso for now. We comply.
ISO_FILE=$WORKSPACE/opnfv.iso
diff --git a/jjb/compass4nfv/compass-ci-jobs.yml b/jjb/compass4nfv/compass-ci-jobs.yml
index d806195b0..b70bfc67b 100644
--- a/jjb/compass4nfv/compass-ci-jobs.yml
+++ b/jjb/compass4nfv/compass-ci-jobs.yml
@@ -247,8 +247,8 @@
- choice:
name: COMPASS_OPENSTACK_VERSION
choices:
- - 'newton'
- 'mitaka'
+ - 'newton'
- 'liberty'
- choice:
name: COMPASS_OS_VERSION_OPTION
diff --git a/jjb/compass4nfv/compass-deploy.sh b/jjb/compass4nfv/compass-deploy.sh
index aa3bd3619..256717953 100644
--- a/jjb/compass4nfv/compass-deploy.sh
+++ b/jjb/compass4nfv/compass-deploy.sh
@@ -29,10 +29,15 @@ cd $WORKSPACE
export OS_VERSION=${COMPASS_OS_VERSION}
export OPENSTACK_VERSION=${COMPASS_OPENSTACK_VERSION}
-if [[ "${COMPASS_OS_VERSION_OPTION}" = "xenial" ]] && [[ "${OPENSTACK_VERSION}" = "mitaka" || "${OPENSTACK_VERSION}" = "newton" ]]; then
+if [[ "${COMPASS_OS_VERSION_OPTION}" = "xenial" ]] && [[ "${OPENSTACK_VERSION}" = "mitaka" ]]; then
export OPENSTACK_VERSION=${OPENSTACK_VERSION}_${COMPASS_OS_VERSION_OPTION}
export OS_VERSION=${COMPASS_OS_VERSION_OPTION}
fi
+if [[ "${OPENSTACK_VERSION}" = "newton" ]]; then
+ export OS_VERSION="xenial"
+ export OPENSTACK_VERSION=${OPENSTACK_VERSION}_${OS_VERSION}
+fi
+
if [[ "${DEPLOY_SCENARIO}" =~ "-ocl" ]]; then
export NETWORK_CONF_FILE=network_ocl.yml
diff --git a/jjb/compass4nfv/compass-project-jobs.yml b/jjb/compass4nfv/compass-project-jobs.yml
index 4d01610a0..50ff072fb 100644
--- a/jjb/compass4nfv/compass-project-jobs.yml
+++ b/jjb/compass4nfv/compass-project-jobs.yml
@@ -124,8 +124,8 @@
- choice:
name: COMPASS_OPENSTACK_VERSION
choices:
- - 'newton'
- 'mitaka'
+ - 'newton'
- 'liberty'
- choice:
name: COMPASS_OS_VERSION
diff --git a/jjb/compass4nfv/compass-verify-jobs.yml b/jjb/compass4nfv/compass-verify-jobs.yml
index ece59b2c2..cc04ad3da 100644
--- a/jjb/compass4nfv/compass-verify-jobs.yml
+++ b/jjb/compass4nfv/compass-verify-jobs.yml
@@ -124,7 +124,7 @@
name: basic
condition: SUCCESSFUL
projects:
- - name: 'compass-verify-basic-{stream}'
+ - name: 'opnfv-lint-verify-{stream}'
current-parameters: true
node-parameters: true
kill-phase-on: FAILURE
@@ -242,8 +242,8 @@
- choice:
name: COMPASS_OPENSTACK_VERSION
choices:
- - 'newton'
- 'mitaka'
+ - 'newton'
- 'liberty'
- choice:
name: COMPASS_OS_VERSION
diff --git a/jjb/daisy4nfv/daisy4nfv-download-artifact.sh b/jjb/daisy4nfv/daisy4nfv-download-artifact.sh
index 7ac76a5eb..90b5fa62f 100755
--- a/jjb/daisy4nfv/daisy4nfv-download-artifact.sh
+++ b/jjb/daisy4nfv/daisy4nfv-download-artifact.sh
@@ -11,26 +11,31 @@
set -o errexit
set -o pipefail
+# use proxy url to replace the nomral URL, for googleusercontent.com will be blocked randomly
+[[ "$NODE_NAME" =~ (zte) ]] && GS_URL=$GS_BASE_PROXY
+
if [[ "$JOB_NAME" =~ "merge" ]]; then
echo "Downloading http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties"
# get the properties file for the Daisy4nfv BIN built for a merged change
- curl -s -o $WORKSPACE/latest.properties http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties
+ curl -L -s -o $WORKSPACE/latest.properties http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties
else
# get the latest.properties file in order to get info regarding latest artifact
echo "Downloading http://$GS_URL/latest.properties"
- curl -s -o $WORKSPACE/latest.properties http://$GS_URL/latest.properties
+ curl -L -s -o $WORKSPACE/latest.properties http://$GS_URL/latest.properties
fi
# check if we got the file
-[[ -f latest.properties ]] || exit 1
+[[ -f $WORKSPACE/latest.properties ]] || exit 1
# source the file so we get artifact metadata
-source latest.properties
+source $WORKSPACE/latest.properties
# echo the info about artifact that is used during the deployment
OPNFV_ARTIFACT=${OPNFV_ARTIFACT_URL/*\/}
echo "Using $OPNFV_ARTIFACT for deployment"
+[[ "$NODE_NAME" =~ (zte) ]] && OPNFV_ARTIFACT_URL=${GS_BASE_PROXY%%/*}/$OPNFV_ARTIFACT_URL
+
# log info to console
echo "Downloading the $INSTALLER_TYPE artifact using URL http://$OPNFV_ARTIFACT_URL"
echo "This could take some time..."
diff --git a/jjb/escalator/escalator-basic.sh b/jjb/escalator/escalator-basic.sh
new file mode 100755
index 000000000..9c739c422
--- /dev/null
+++ b/jjb/escalator/escalator-basic.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+echo "--------------------------------------------------------"
+echo "This is escalator basic job!"
+echo "--------------------------------------------------------"
+
diff --git a/jjb/escalator/escalator-build.sh b/jjb/escalator/escalator-build.sh
new file mode 100755
index 000000000..0e35c27d9
--- /dev/null
+++ b/jjb/escalator/escalator-build.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+echo "--------------------------------------------------------"
+echo "This is escalator build job!"
+echo "--------------------------------------------------------"
+
+# set OPNFV_ARTIFACT_VERSION
+if [[ "$JOB_NAME" =~ "merge" ]]; then
+ echo "Building Escalator TAR for a merged change"
+ export OPNFV_ARTIFACT_VERSION="gerrit-$GERRIT_CHANGE_NUMBER"
+else
+ export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S")
+fi
+
+# build output directory
+OUTPUT_DIR=$WORKSPACE/build_output
+mkdir -p $OUTPUT_DIR
+
+# start the build
+cd $WORKSPACE
+./ci/build.sh $OUTPUT_DIR $OPNFV_ARTIFACT_VERSION
+
+# save information regarding artifact into file
+(
+ echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
+ echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
+ echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
+ echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.bin"
+ echo "OPNFV_BUILD_URL=$BUILD_URL"
+) > $WORKSPACE/opnfv.properties
+
+echo
+echo "--------------------------------------------------------"
+echo "Done!"
diff --git a/jjb/escalator/escalator-upload-artifact.sh b/jjb/escalator/escalator-upload-artifact.sh
new file mode 100755
index 000000000..781fb3e3e
--- /dev/null
+++ b/jjb/escalator/escalator-upload-artifact.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+echo "--------------------------------------------------------"
+echo "This is escalator upload job!"
+echo "--------------------------------------------------------"
+
+set -o pipefail
+
+# check if we built something
+if [ -f $WORKSPACE/.noupload ]; then
+ echo "Nothing new to upload. Exiting."
+ /bin/rm -f $WORKSPACE/.noupload
+ exit 0
+fi
+
+# source the opnfv.properties to get ARTIFACT_VERSION
+source $WORKSPACE/opnfv.properties
+
+importkey () {
+# clone releng repository
+echo "Cloning releng repository..."
+[ -d releng ] && rm -rf releng
+git clone https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng/ &> /dev/null
+#this is where we import the siging key
+if [ -f $WORKSPACE/releng/utils/gpg_import_key.sh ]; then
+ source $WORKSPACE/releng/utils/gpg_import_key.sh
+fi
+}
+
+signtar () {
+gpg2 -vvv --batch --yes --no-tty \
+ --default-key opnfv-helpdesk@rt.linuxfoundation.org \
+ --passphrase besteffort \
+ --detach-sig $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz
+
+gsutil cp $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz.sig gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz.sig
+echo "TAR signature Upload Complete!"
+}
+
+uploadtar () {
+# log info to console
+echo "Uploading $INSTALLER_TYPE artifact. This could take some time..."
+echo
+
+cd $WORKSPACE
+# upload artifact and additional files to google storage
+gsutil cp $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz \
+ gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz > gsutil.tar.log 2>&1
+gsutil cp $WORKSPACE/opnfv.properties \
+ gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1
+if [[ ! "$JOB_NAME" =~ (verify|merge) ]]; then
+ gsutil cp $WORKSPACE/opnfv.properties \
+ gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1
+elif [[ "$JOB_NAME" =~ "merge" ]]; then
+ echo "Uploaded Escalator TAR for a merged change"
+fi
+
+gsutil -m setmeta \
+ -h "Content-Type:text/html" \
+ -h "Cache-Control:private, max-age=0, no-transform" \
+ gs://$GS_URL/latest.properties \
+ gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > /dev/null 2>&1
+
+gsutil -m setmeta \
+ -h "Cache-Control:private, max-age=0, no-transform" \
+ gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz > /dev/null 2>&1
+
+# disabled errexit due to gsutil setmeta complaints
+# BadRequestException: 400 Invalid argument
+# check if we uploaded the file successfully to see if things are fine
+gsutil ls gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz > /dev/null 2>&1
+if [[ $? -ne 0 ]]; then
+ echo "Problem while uploading artifact!"
+ echo "Check log $WORKSPACE/gsutil.bin.log on the machine where this build is done."
+ exit 1
+fi
+
+echo "Done!"
+echo
+echo "--------------------------------------------------------"
+echo
+echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.tar.gz"
+echo
+echo "--------------------------------------------------------"
+echo
+}
+
+importkey
+signtar
+uploadtar
diff --git a/jjb/escalator/escalator.yml b/jjb/escalator/escalator.yml
new file mode 100644
index 000000000..dba76f7c2
--- /dev/null
+++ b/jjb/escalator/escalator.yml
@@ -0,0 +1,326 @@
+- project:
+ name: 'escalator'
+
+ project: 'escalator'
+#####################################
+# branch definitions
+#####################################
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+#####################################
+# phases
+#####################################
+ phase:
+ - 'basic':
+ slave-label: 'opnfv-build-centos'
+ - 'build':
+ slave-label: 'opnfv-build-centos'
+#####################################
+# jobs
+#####################################
+ jobs:
+ - 'escalator-verify-{stream}'
+ - 'escalator-verify-{phase}-{stream}'
+ - 'escalator-merge-{stream}'
+ - 'escalator-merge-{phase}-{stream}'
+#####################################
+# job templates
+#####################################
+- job-template:
+ name: 'escalator-verify-{stream}'
+
+ project-type: multijob
+
+ disabled: false
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 4
+ option: 'project'
+
+ scm:
+ - gerrit-trigger-scm:
+ credentials-id: '{ssh-credentials}'
+ refspec: '$GERRIT_REFSPEC'
+ choosing-strategy: 'gerrit'
+
+ wrappers:
+ - ssh-agent-credentials:
+ users:
+ - '{ssh-credentials}'
+ - timeout:
+ timeout: 360
+ fail: true
+
+ triggers:
+ - gerrit:
+ trigger-on:
+ - patchset-created-event:
+ exclude-drafts: 'false'
+ exclude-trivial-rebase: 'false'
+ exclude-no-code-change: 'false'
+ - draft-published-event
+ - comment-added-contains-event:
+ comment-contains-value: 'recheck'
+ - comment-added-contains-event:
+ comment-contains-value: 'reverify'
+ projects:
+ - project-compare-type: 'ANT'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ forbidden-file-paths:
+ - compare-type: ANT
+ pattern: 'docs/**|.gitignore'
+ readable-message: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - 'opnfv-build-defaults'
+ - 'escalator-defaults':
+ gs-pathname: '{gs-pathname}'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: basic
+ condition: SUCCESSFUL
+ projects:
+ - name: 'escalator-verify-basic-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: build
+ condition: SUCCESSFUL
+ projects:
+ - name: 'escalator-verify-build-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+
+- job-template:
+ name: 'escalator-verify-{phase}-{stream}'
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ scm:
+ - gerrit-trigger-scm:
+ credentials-id: '{ssh-credentials}'
+ refspec: '$GERRIT_REFSPEC'
+ choosing-strategy: 'gerrit'
+
+ wrappers:
+ - ssh-agent-credentials:
+ users:
+ - '{ssh-credentials}'
+ - timeout:
+ timeout: 360
+ fail: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - '{slave-label}-defaults'
+ - 'escalator-defaults':
+ gs-pathname: '{gs-pathname}'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - '{project}-verify-{phase}-macro'
+
+- job-template:
+ name: 'escalator-merge-{stream}'
+
+ project-type: multijob
+
+ disabled: false
+
+ concurrent: true
+
+ properties:
+ - throttle:
+ enabled: true
+ max-total: 4
+ option: 'project'
+
+ scm:
+ - gerrit-trigger-scm:
+ credentials-id: '{ssh-credentials}'
+ refspec: '$GERRIT_REFSPEC'
+ choosing-strategy: 'gerrit'
+
+ wrappers:
+ - ssh-agent-credentials:
+ users:
+ - '{ssh-credentials}'
+ - timeout:
+ timeout: 360
+ fail: true
+
+ triggers:
+ - gerrit:
+ trigger-on:
+ - change-merged-event
+ - comment-added-contains-event:
+ comment-contains-value: 'remerge'
+ projects:
+ - project-compare-type: 'ANT'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ forbidden-file-paths:
+ - compare-type: ANT
+ pattern: 'docs/**|.gitignore'
+ readable-message: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - 'opnfv-build-defaults'
+ - 'escalator-defaults':
+ gs-pathname: '{gs-pathname}'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: basic
+ condition: SUCCESSFUL
+ projects:
+ - name: 'escalator-merge-basic-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: build
+ condition: SUCCESSFUL
+ projects:
+ - name: 'escalator-merge-build-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+
+- job-template:
+ name: 'escalator-merge-{phase}-{stream}'
+
+ disabled: '{obj:disabled}'
+
+ concurrent: true
+
+ scm:
+ - gerrit-trigger-scm:
+ credentials-id: '{ssh-credentials}'
+ refspec: '$GERRIT_REFSPEC'
+ choosing-strategy: 'gerrit'
+
+ wrappers:
+ - ssh-agent-credentials:
+ users:
+ - '{ssh-credentials}'
+ - timeout:
+ timeout: 360
+ fail: true
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - gerrit-parameter:
+ branch: '{branch}'
+ - '{slave-label}-defaults'
+ - 'escalator-defaults':
+ gs-pathname: '{gs-pathname}'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - '{project}-merge-{phase}-macro'
+#####################################
+# builder macros
+#####################################
+- builder:
+ name: 'escalator-verify-basic-macro'
+ builders:
+ - shell:
+ !include-raw: ./escalator-basic.sh
+
+- builder:
+ name: 'escalator-verify-build-macro'
+ builders:
+ - shell:
+ !include-raw: ./escalator-build.sh
+
+- builder:
+ name: 'escalator-merge-basic-macro'
+ builders:
+ - shell:
+ !include-raw: ./escalator-basic.sh
+
+- builder:
+ name: 'escalator-merge-build-macro'
+ builders:
+ - shell:
+ !include-raw:
+ - ./escalator-build.sh
+ - ./escalator-upload-artifact.sh
+#####################################
+# parameter macros
+#####################################
+- parameter:
+ name: 'escalator-defaults'
+ parameters:
+ - string:
+ name: BUILD_DIRECTORY
+ default: $WORKSPACE/build_output
+ description: "Directory where the build artifact will be located upon the completion of the build."
+ - string:
+ name: CACHE_DIRECTORY
+ default: $HOME/opnfv/cache/$INSTALLER_TYPE
+ description: "Directory where the cache to be used during the build is located."
+ - string:
+ name: GS_URL
+ default: artifacts.opnfv.org/$PROJECT{gs-pathname}
+ description: "URL to Google Storage."
diff --git a/jjb/fuel/fuel-download-artifact.sh b/jjb/fuel/fuel-download-artifact.sh
index fd824ca44..2a0f09a3f 100755
--- a/jjb/fuel/fuel-download-artifact.sh
+++ b/jjb/fuel/fuel-download-artifact.sh
@@ -11,7 +11,7 @@ set -o errexit
set -o pipefail
# use proxy url to replace the nomral URL, for googleusercontent.com will be blocked randomly
-[[ "$NODE_NAME" =~ (zte) ]] && GS_URL=$GS_BASE_PROXY
+[[ "$NODE_NAME" =~ (zte) ]] && GS_URL=${GS_BASE_PROXY%%/*}/$GS_URL
if [[ "$JOB_NAME" =~ "merge" ]]; then
echo "Downloading http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties"
@@ -59,7 +59,7 @@ echo "--------------------------------------------------------"
echo
# download the file
-curl -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1
+curl -L -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1
# list the file
ls -al $WORKSPACE/opnfv.iso
diff --git a/jjb/infra/bifrost-verify-jobs.yml b/jjb/infra/bifrost-verify-jobs.yml
index 751aa0c4a..be3cf9a0e 100644
--- a/jjb/infra/bifrost-verify-jobs.yml
+++ b/jjb/infra/bifrost-verify-jobs.yml
@@ -24,17 +24,24 @@
disabled: false
dib-os-release: 'trusty'
dib-os-element: 'ubuntu-minimal'
- dib-os-packages: 'openssh-server,vlan,vim,less,bridge-utils,language-pack-en,iputils-ping,rsyslog,curl'
+ dib-os-packages: 'vlan,vim,less,bridge-utils,language-pack-en,iputils-ping,rsyslog,curl'
+ extra-dib-elements: 'openssh-server'
- 'centos7':
disabled: false
dib-os-release: '7'
dib-os-element: 'centos7'
- dib-os-packages: 'openssh-server,vim,less,bridge-utils,iputils,rsyslog,curl'
+ dib-os-packages: 'vim,less,bridge-utils,iputils,rsyslog,curl'
+ extra-dib-elements: 'openssh-server'
- 'suse':
- disabled: true
- dib-os-release: 'suse'
- dib-os-element: 'suse'
- dib-os-packages: ''
+ disabled: false
+ dib-os-release: '42.2'
+ dib-os-element: 'opensuse-minimal'
+ # python-xml is needed until https://review.openstack.org/#/c/400150/ is merged
+ dib-os-packages: 'vim,less,bridge-utils,iputils,rsyslog,curl,python-xml'
+ extra-dib-elements: 'openssh-server'
+ vm-disk: '30'
+ vm-memory: '4096'
+ vm-cpu: '2'
#--------------------------------
# type
#--------------------------------
@@ -45,6 +52,16 @@
#--------------------------------
jobs:
- '{project}-bifrost-verify-{distro}-{type}-{stream}'
+
+#--------------------------------
+# VM defaults
+#--------------------------------
+- defaults:
+ name: vm_defaults
+ vm-disk: '100'
+ vm-memory: '8192'
+ vm-cpu: '4'
+
#--------------------------------
# job templates
#--------------------------------
@@ -53,6 +70,8 @@
disabled: '{obj:disabled}'
+ defaults: vm_defaults
+
concurrent: false
properties:
@@ -82,9 +101,21 @@
name: DIB_OS_ELEMENT
default: '{dib-os-element}'
- string:
+ name: EXTRA_DIB_ELEMENTS
+ default: '{extra-dib-elements}'
+ - string:
name: DIB_OS_PACKAGES
default: '{dib-os-packages}'
- string:
+ name: VM_DISK
+ default: '{vm-disk}'
+ - string:
+ name: VM_MEMORY
+ default: '{vm-memory}'
+ - string:
+ name: VM_CPU
+ default: '{vm-cpu}'
+ - string:
name: CLEAN_DIB_IMAGES
default: 'true'
- label:
diff --git a/jjb/kvmfornfv/kvmfornfv-test.sh b/jjb/kvmfornfv/kvmfornfv-test.sh
index f677f470d..b31d61cce 100755
--- a/jjb/kvmfornfv/kvmfornfv-test.sh
+++ b/jjb/kvmfornfv/kvmfornfv-test.sh
@@ -13,9 +13,16 @@ else
exit 1
fi
+echo $TEST_NAME
+
# do stuff differently based on the job type
case "$JOB_TYPE" in
- verify|daily)
+ verify)
+ #start the test
+ cd $WORKSPACE
+ ./ci/test_kvmfornfv.sh $JOB_TYPE
+ ;;
+ daily)
#start the test
cd $WORKSPACE
./ci/test_kvmfornfv.sh $JOB_TYPE $TEST_NAME
diff --git a/jjb/kvmfornfv/kvmfornfv.yml b/jjb/kvmfornfv/kvmfornfv.yml
index 2c8446e07..04fce221c 100644
--- a/jjb/kvmfornfv/kvmfornfv.yml
+++ b/jjb/kvmfornfv/kvmfornfv.yml
@@ -112,8 +112,6 @@
node-parameters: false
kill-phase-on: FAILURE
abort-all-job: true
-
-
- job-template:
name: 'kvmfornfv-verify-{phase}-{stream}'
@@ -271,7 +269,7 @@
name: build
condition: SUCCESSFUL
projects:
- - name: 'kvmfornfv-Packet_Forwarding-daily-build-{stream}'
+ - name: 'kvmfornfv-Packet_Forwarding-daily-test-{stream}'
current-parameters: false
node-parameters: false
git-revision: true
@@ -316,21 +314,21 @@
# parameter macros
########################
- parameter:
- name: 'kvmfornfv-Idle_Idle-daily-parameter'
+ name: 'kvmfornfv-Idle_Idle-daily-test-{stream}'
parameters:
- string:
name: TEST_NAME
default: 'idle_idle'
description: "Daily job to run cyclictest without applying any stress"
- parameter:
- name: 'kvmfornfv-Stress_Idle-daily-parameter'
+ name: 'kvmfornfv-Stress_Idle-daily-test-{stream}'
parameters:
- string:
name: TEST_NAME
default: 'stress_idle'
description: "Daily job to run cyclictest with stress applied"
- parameter:
- name: 'kvmfornfv-Packet_Forwarding-daily-parameter'
+ name: 'kvmfornfv-Packet_Forwarding-daily-test-{stream}'
parameters:
- string:
name: TEST_NAME
diff --git a/jjb/multisite/multisite-daily-jobs.yml b/jjb/multisite/multisite-daily-jobs.yml
new file mode 100644
index 000000000..cfb40a1fa
--- /dev/null
+++ b/jjb/multisite/multisite-daily-jobs.yml
@@ -0,0 +1,247 @@
+- project:
+ name: kingbird
+
+ project: 'multisite'
+
+ jobs:
+ - 'multisite-kingbird-virtual-daily-{stream}'
+ - 'multisite-{phase}-{stream}'
+
+ phase:
+ - 'fuel-deploy-regionone-virtual'
+ - 'fuel-deploy-regiontwo-virtual'
+ - 'register-endpoints'
+ - 'update-auth'
+ - 'kingbird-deploy-virtual'
+ - 'kingbird-functest'
+
+ stream:
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+ timed: '#@midnight'
+
+- job-template:
+ name: 'multisite-kingbird-virtual-daily-{stream}'
+
+ project-type: multijob
+
+ disabled: '{obj:disabled}'
+
+ concurrent: false
+
+ parameters:
+ - project-parameter:
+ project: '{project}'
+ - string:
+ name: KINGBIRD_LOG_FILE
+ default: $WORKSPACE/kingbird.log
+ - 'multisite-virtual-defaults'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: 'os-nosdn-multisite-noha'
+
+ triggers:
+ - timed: '{timed}'
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: fuel-deploy-virtual
+ condition: SUCCESSFUL
+ projects:
+ - name: 'multisite-fuel-deploy-regionone-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ FUEL_VERSION=latest
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ OS_REGION=RegionOne
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual2
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - name: 'multisite-fuel-deploy-regiontwo-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ FUEL_VERSION=latest
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ OS_REGION=RegionTwo
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual6
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: centralize-keystone
+ condition: SUCCESSFUL
+ projects:
+ - name: 'multisite-register-endpoints-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ OS_REGION=RegionOne
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual2
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - name: 'multisite-update-auth-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ OS_REGION=RegionTwo
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual6
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: kingbird-deploy-virtual
+ condition: SUCCESSFUL
+ projects:
+ - name: 'multisite-kingbird-deploy-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ OS_REGION=RegionOne
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual2
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: kingbird-functest
+ condition: SUCCESSFUL
+ projects:
+ - name: 'multisite-kingbird-functest-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ OS_REGION=RegionOne
+ REGIONONE_IP=10.2.117.79
+ REGIONTWO_IP=10.2.117.181
+ node-parameters: false
+ node-label-name: SLAVE_LABEL
+ node-label: intel-virtual2
+ kill-phase-on: NEVER
+ abort-all-job: false
+
+- job-template:
+ name: 'multisite-{phase}-{stream}'
+
+ concurrent: false
+
+ builders:
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - 'multisite-{phase}-builder':
+ stream: '{stream}'
+
+ publishers:
+ - 'multisite-{phase}-publisher'
+
+########################
+# builder macros
+########################
+- builder:
+ name: 'multisite-fuel-deploy-regionone-virtual-builder'
+ builders:
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we deploy fuel, extract passwords and save into file"
+- builder:
+ name: 'multisite-fuel-deploy-regiontwo-virtual-builder'
+ builders:
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we deploy fuel, extract publicUrl, privateUrl, and adminUrl and save into file"
+- builder:
+ name: 'multisite-register-endpoints-builder'
+ builders:
+ - copyartifact:
+ project: 'multisite-fuel-deploy-regiontwo-virtual-{stream}'
+ which-build: multijob-build
+ filter: "RegionTwo-Endpoints.txt"
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we register RegionTwo in RegionOne keystone"
+- builder:
+ name: 'multisite-update-auth-builder'
+ builders:
+ - copyartifact:
+ project: 'multisite-fuel-deploy-regionone-virtual-{stream}'
+ which-build: multijob-build
+ filter: "RegionOne-Passwords.txt"
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we read passwords from RegionOne-passwords.txt and replace passwords in RegionTwo"
+- builder:
+ name: 'multisite-kingbird-deploy-virtual-builder'
+ builders:
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we install kingbird"
+- builder:
+ name: 'multisite-kingbird-functest-builder'
+ builders:
+ - shell: |
+ #!/bin/bash
+
+ echo "This is where we run kingbird-functest"
+########################
+# publisher macros
+########################
+- publisher:
+ name: 'multisite-fuel-deploy-regionone-virtual-publisher'
+ publishers:
+ - archive:
+ artifacts: '/root/servicepass.ini'
+ allow-empty: false
+ only-if-success: true
+ fingerprint: true
+- publisher:
+ name: 'multisite-fuel-deploy-regiontwo-virtual-publisher'
+ publishers:
+ - archive:
+ artifacts: '/root/endpoints.ini'
+ allow-empty: false
+ only-if-success: true
+ fingerprint: true
+- publisher:
+ name: 'multisite-register-endpoints-publisher'
+ publishers:
+ - archive:
+ artifacts: 'dummy.txt'
+ allow-empty: true
+- publisher:
+ name: 'multisite-update-auth-publisher'
+ publishers:
+ - archive:
+ artifacts: 'dummy.txt'
+ allow-empty: true
+- publisher:
+ name: 'multisite-kingbird-deploy-virtual-publisher'
+ publishers:
+ - archive:
+ artifacts: 'dummy.txt'
+ allow-empty: true
+- publisher:
+ name: 'multisite-kingbird-functest-publisher'
+ publishers:
+ - archive:
+ artifacts: 'dummy.txt'
+ allow-empty: true
diff --git a/jjb/opnfv/installer-params.yml b/jjb/opnfv/installer-params.yml
index ec0b86170..55f4769b7 100644
--- a/jjb/opnfv/installer-params.yml
+++ b/jjb/opnfv/installer-params.yml
@@ -59,7 +59,7 @@
parameters:
- string:
name: INSTALLER_IP
- default: '192.168.Y.Y'
+ default: '192.168.122.5'
description: 'IP of the installer'
- string:
name: INSTALLER_TYPE
@@ -67,11 +67,11 @@
description: 'Installer used for deploying OPNFV on this POD'
- string:
name: OS_RELEASE
- default: 'mitaka'
- description: 'OpenStack release (liberty|mitaka)'
+ default: 'newton'
+ description: 'OpenStack release (mitaka|newton)'
- string:
name: EXTERNAL_NETWORK
- default: ext-net4
+ default: ext-net
description: "External network used for Floating ips."
- string:
name: LAB_CONFIG
@@ -84,7 +84,7 @@
- string:
name: UBUNTU_DISTRO
default: 'xenial'
- description: "Ubuntu distribution to use for Openstack (trusty|xenial)"
+ description: "Ubuntu distribution to use for Openstack (xenial)"
- string:
name: CPU_ARCHITECTURE
default: 'amd64'
diff --git a/jjb/opnfv/opnfv-docs.yml b/jjb/opnfv/opnfv-docs.yml
index 307c1db44..442e8ea71 100644
--- a/jjb/opnfv/opnfv-docs.yml
+++ b/jjb/opnfv/opnfv-docs.yml
@@ -19,7 +19,7 @@
disabled: false
- colorado:
branch: 'stable/{stream}'
- doc-version: '2.0'
+ doc-version: '3.0'
gs-pathname: '/{stream}/{doc-version}'
disabled: false
diff --git a/jjb/opnfv/opnfv-lint.yml b/jjb/opnfv/opnfv-lint.yml
index 6860dd037..652f28292 100644
--- a/jjb/opnfv/opnfv-lint.yml
+++ b/jjb/opnfv/opnfv-lint.yml
@@ -55,7 +55,7 @@
comment-contains-value: 'reverify'
projects:
- project-compare-type: 'REG_EXP'
- project-pattern: 'functest|sdnvpn|qtip|daisy|sfc'
+ project-pattern: 'functest|sdnvpn|qtip|daisy|sfc|escalator'
branches:
- branch-compare-type: 'ANT'
branch-pattern: '**/{branch}'
diff --git a/jjb/opnfv/slave-params.yml b/jjb/opnfv/slave-params.yml
index b46960fa7..dd0c97996 100644
--- a/jjb/opnfv/slave-params.yml
+++ b/jjb/opnfv/slave-params.yml
@@ -660,6 +660,16 @@
name: SSH_KEY
default: /root/.ssh/id_rsa
description: 'SSH key to be used'
+- parameter:
+ name: 'multisite-virtual-defaults'
+ parameters:
+ - label:
+ name: SLAVE_LABEL
+ default: 'multisite-virtual'
+ - string:
+ name: GIT_BASE
+ default: https://gerrit.opnfv.org/gerrit/$PROJECT
+ description: 'Git URL to use on this Jenkins Slave'
#####################################################
# These slaves are just dummy slaves for sandbox jobs
#####################################################
diff --git a/jjb/qtip/qtip-project-jobs.yml b/jjb/qtip/qtip-project-jobs.yml
index 722a9beb3..f192e8679 100644
--- a/jjb/qtip/qtip-project-jobs.yml
+++ b/jjb/qtip/qtip-project-jobs.yml
@@ -59,4 +59,9 @@
builders:
- shell: |
- echo "Nothing to verify!"
+ #!/bin/bash
+ set -o errexit
+ set -o pipefail
+ set -o xtrace
+
+ tox
diff --git a/jjb/vswitchperf/vswitchperf.yml b/jjb/vswitchperf/vswitchperf.yml
index 3f7f6bf2d..5f952de00 100644
--- a/jjb/vswitchperf/vswitchperf.yml
+++ b/jjb/vswitchperf/vswitchperf.yml
@@ -63,11 +63,12 @@
concurrent: true
properties:
- - throttle:
- enabled: true
- max-total: 3
- max-per-node: 2
- option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - 'vswitchperf-verify-.*'
+ - 'vswitchperf-merge-.*'
+ block-level: 'NODE'
parameters:
- project-parameter:
@@ -125,11 +126,12 @@
concurrent: true
properties:
- - throttle:
- enabled: true
- max-total: 3
- max-per-node: 2
- option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - 'vswitchperf-verify-.*'
+ - 'vswitchperf-merge-.*'
+ block-level: 'NODE'
parameters:
- project-parameter:
diff --git a/jjb/yardstick/yardstick-project-jobs.yml b/jjb/yardstick/yardstick-project-jobs.yml
index db07e9d83..abc6eeb4b 100644
--- a/jjb/yardstick/yardstick-project-jobs.yml
+++ b/jjb/yardstick/yardstick-project-jobs.yml
@@ -122,7 +122,7 @@
# install python packages
easy_install -U setuptools
easy_install -U pip
- pip install -r tests/ci/requirements.txt
+ pip install -r requirements.txt || pip install -r tests/ci/requirements.txt
pip install -e .
# unit tests
diff --git a/modules/README.rst b/modules/README.rst
index de9ff559f..caec46b1d 100644
--- a/modules/README.rst
+++ b/modules/README.rst
@@ -5,6 +5,8 @@ as follows:
from opnfv.utils import SSHUtils
from opnfv.utils import OPNFVLogger
+ from opnfv.utils import OPNFVException
+ from opnfv.utils import constants
For further information about how to use this modules directory, contact:
fatih.degirmenci@ericsson.com
diff --git a/modules/opnfv/utils/OPNFVExceptions.py b/modules/opnfv/utils/OPNFVExceptions.py
new file mode 100644
index 000000000..03b3ea981
--- /dev/null
+++ b/modules/opnfv/utils/OPNFVExceptions.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Orange and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# This class defines Python OPNFV exceptions
+#
+
+
+class OPNFVException(Exception):
+ def __call__(self, *args):
+ return self.__class__(*(self.args + args))
+
+
+# ************************************
+# Generic
+# ************************************
+class OPNFVSUTNotReachable(OPNFVException):
+ """Target System Under Test is not reachable"""
+ pass
+
+
+class OPNFVCiExecutionError(OPNFVException):
+ """Error occurs during CI exection"""
+ pass
+
+
+class TestDashboardError(OPNFVException):
+ """Impossible to report results to dashboard"""
+ pass
+
+
+class TestReportingError(OPNFVException):
+ """Impossible to report results to reporting"""
+ pass
+
+
+# ************************************
+# Exceptions related to test DB
+# ************************************
+class TestDbNotReachable(OPNFVException):
+ """Test database is not reachable"""
+ pass
+
+
+class UnknownScenario(OPNFVException):
+ """Test scenario is unknown"""
+ pass
+
+
+class UnknownPod(OPNFVException):
+ """Test POD is unknown"""
+ pass
+
+
+class UnknownProject(OPNFVException):
+ """Project is unknown"""
+ pass
+
+
+class UnknownTestCase(OPNFVException):
+ """Test case is unknown"""
+ pass
+
+
+class UnknownVersion(OPNFVException):
+ """Version is unknown"""
+ pass
+
+
+class UnknownInstaller(OPNFVException):
+ """Installer is not supported"""
+ pass
+
+
+# *******************
+# Test project errors
+# *******************
+class FunctestExecutionError(OPNFVException):
+ """Internal Functest error"""
+ pass
+
+
+class YardstickExecutionError(OPNFVException):
+ """Internal Yardstick error"""
+ pass
+
+
+# **********************************
+# Errors related to Feature projects
+# **********************************
+class TestCaseNotRunnable(OPNFVException):
+ """test case incompatible with SUT, scenario, installer"""
+ pass
+
+
+class FeatureTestIntegrationError(OPNFVException):
+ """Impossible to integrate Feature test"""
+ pass
+
+
+class FeatureTestExecutionError(OPNFVException):
+ """Error during Feature test execution"""
+ pass
+
+
+# *********************************
+# Errors related to VNF on boarding
+# *********************************
+class VNFTestNotRunnable(OPNFVException):
+ """VNF test is not compatible with SUT, scenario, installer"""
+ pass
+
+
+class VNFIntegrationError(OPNFVException):
+ """Impossible to integrate the VNF test"""
+ pass
+
+
+class VNFExecutionError(OPNFVException):
+ """Error during VNF test execution"""
+ pass
diff --git a/modules/opnfv/utils/constants.py b/modules/opnfv/utils/constants.py
new file mode 100644
index 000000000..29f0d02c5
--- /dev/null
+++ b/modules/opnfv/utils/constants.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Orange and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+INSTALLERS = ['apex', 'fuel', 'compass', 'joid']
+VERSIONS = ['arno', 'brahmaputra', 'colorado', 'danube']
+
+EXIT_OK = 0
+EXIT_RUN_ERROR = -1
+EXIT_PUSH_TO_TEST_DB_ERROR = -2
diff --git a/modules/run_unit_tests.sh b/modules/run_unit_tests.sh
new file mode 100755
index 000000000..df511ce0c
--- /dev/null
+++ b/modules/run_unit_tests.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -o errexit
+set -o pipefail
+
+# Either Workspace is set (CI)
+if [ -z $WORKSPACE ]
+then
+ WORKSPACE="."
+fi
+
+
+# ***************
+# Run unit tests
+# ***************
+echo "Running unit tests..."
+
+# start vitual env
+virtualenv $WORKSPACE/modules_venv
+source $WORKSPACE/modules_venv/bin/activate
+
+# install python packages
+easy_install -U setuptools
+easy_install -U pip
+pip install $WORKSPACE
+
+
+# unit tests
+nosetests --with-xunit \
+ --cover-package=opnfv \
+ --with-coverage \
+ --cover-xml \
+ --cover-html \
+ tests/unit
+rc=$?
+
+deactivate
diff --git a/modules/setup.py b/modules/setup.py
index 26f8a6eaa..8ac5ceac3 100644
--- a/modules/setup.py
+++ b/modules/setup.py
@@ -17,5 +17,9 @@ setup(
package_data={
},
url="https://www.opnfv.org",
- install_requires=["paramiko>=2.0.1"]
+ install_requires=["paramiko>=2.0.1",
+ "mock==1.3.0",
+ "nose==1.3.7",
+ "coverage==4.1",
+ "requests==2.9.1"]
)
diff --git a/modules/tests/__init__.py b/modules/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/tests/__init__.py
diff --git a/modules/tests/unit/__init__.py b/modules/tests/unit/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/tests/unit/__init__.py
diff --git a/modules/tests/unit/utils/__init__.py b/modules/tests/unit/utils/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/tests/unit/utils/__init__.py
diff --git a/modules/tests/unit/utils/test_OPNFVExceptions.py b/modules/tests/unit/utils/test_OPNFVExceptions.py
new file mode 100644
index 000000000..fca927b58
--- /dev/null
+++ b/modules/tests/unit/utils/test_OPNFVExceptions.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Orange and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0import requests
+import unittest
+import requests
+
+from opnfv.utils import OPNFVExceptions
+
+
+def base_function():
+ raise OPNFVExceptions.TestDbNotReachable('Test database is not reachable')
+
+
+def base_function_wrong():
+ raise OPNFVExceptions.NotSelfDefinedException
+
+
+def db_connectivity():
+ url = 'http://testresults.opnfv2.org/test/api/v1/projects/functest/cases'
+ r = requests.get(url)
+ if r.status_code is not 200:
+ raise OPNFVExceptions.TestDbNotReachable('Database not found')
+
+
+def project_unknown():
+ url = 'http://testresults.opnfv.org/test/api/v1/projects/functest2/cases'
+ r = requests.get(url)
+ if len(r.json()['testcases']) is 0:
+ raise OPNFVExceptions.UnknownProject
+
+
+class TestBasicRaise(unittest.TestCase):
+ def test(self):
+ with self.assertRaises(Exception) as context:
+ base_function()
+ self.assertTrue('Test database is not reachable' in context.exception)
+
+
+class TestWrongRaise(unittest.TestCase):
+ def test(self):
+ try:
+ base_function_wrong()
+ except OPNFVExceptions.OPNFVException:
+ assert(False)
+ except AttributeError:
+ assert(True)
+
+
+class TestCaseDBNotReachable(unittest.TestCase):
+ def test(self):
+ with self.assertRaises(Exception) as context:
+ db_connectivity()
+ self.assertTrue('Database not found' in context.exception)
+
+
+class TestUnkownProject(unittest.TestCase):
+ def test(self):
+ try:
+ project_unknown()
+ except OPNFVExceptions.TestDashboardError:
+ # should not be there
+ assert(False)
+ except OPNFVExceptions.UnknownProject:
+ assert(True)
+ except Exception:
+ assert(False)
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/prototypes/bifrost/playbooks/test-bifrost-infracloud.yaml b/prototypes/bifrost/playbooks/test-bifrost-infracloud.yaml
index a0bc28506..541a1f7d4 100644
--- a/prototypes/bifrost/playbooks/test-bifrost-infracloud.yaml
+++ b/prototypes/bifrost/playbooks/test-bifrost-infracloud.yaml
@@ -53,7 +53,8 @@
dib_imagename: "{{deploy_image}}"
dib_os_element: "{{ lookup('env','DIB_OS_ELEMENT') }}"
dib_os_release: "{{ lookup('env', 'DIB_OS_RELEASE') }}"
- dib_elements: "vm serial-console simple-init devuser infra-cloud-bridge puppet growroot {{ extra_dib_elements|default('') }}"
+ extra_dib_elements: "{{ lookup('env', 'EXTRA_DIB_ELEMENTS') | default('') }}"
+ dib_elements: "vm serial-console simple-init devuser infra-cloud-bridge puppet growroot {{ extra_dib_elements }}"
dib_packages: "{{ lookup('env', 'DIB_OS_PACKAGES') }}"
when: create_image_via_dib | bool == true and transform_boot_image | bool == false
environment:
diff --git a/prototypes/bifrost/scripts/test-bifrost-deployment.sh b/prototypes/bifrost/scripts/test-bifrost-deployment.sh
index 32a066388..63d851438 100755
--- a/prototypes/bifrost/scripts/test-bifrost-deployment.sh
+++ b/prototypes/bifrost/scripts/test-bifrost-deployment.sh
@@ -65,6 +65,9 @@ export DIB_OS_ELEMENT=${DIB_OS_ELEMENT:-ubuntu-minimal}
# for centos 7: "openssh-server,vim,less,bridge-utils,iputils,rsyslog,curl"
export DIB_OS_PACKAGES=${DIB_OS_PACKAGES:-"openssh-server,vlan,vim,less,bridge-utils,language-pack-en,iputils-ping,rsyslog,curl"}
+# Additional dib elements
+export EXTRA_DIB_ELEMENTS=${EXTRA_DIB_ELEMENTS:-}
+
# Source Ansible
# NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep
# under the hood which -x will detect, so for this step, we need to suspend
diff --git a/utils/test/reporting/functest/reporting-status.py b/utils/test/reporting/functest/reporting-status.py
index cb13b099c..66bdd57c1 100755
--- a/utils/test/reporting/functest/reporting-status.py
+++ b/utils/test/reporting/functest/reporting-status.py
@@ -55,25 +55,25 @@ logger.info("*******************************************")
# Retrieve test cases of Tier 1 (smoke)
config_tiers = functest_yaml_config.get("tiers")
-# we consider Tier 1 (smoke),2 (sdn suites) and 3 (features)
+# we consider Tier 1 (smoke),2 (features)
# to validate scenarios
# Tier > 4 are not used to validate scenarios but we display the results anyway
# tricky thing for the API as some tests are Functest tests
# other tests are declared directly in the feature projects
for tier in config_tiers:
- if tier['order'] > 0 and tier['order'] < 3:
+ if tier['order'] > 0 and tier['order'] < 2:
for case in tier['testcases']:
if case['name'] not in blacklist:
testValid.append(tc.TestCase(case['name'],
"functest",
case['dependencies']))
- elif tier['order'] == 3:
+ elif tier['order'] == 2:
for case in tier['testcases']:
if case['name'] not in blacklist:
testValid.append(tc.TestCase(case['name'],
case['name'],
case['dependencies']))
- elif tier['order'] > 3:
+ elif tier['order'] > 2:
for case in tier['testcases']:
if case['name'] not in blacklist:
otherTestCases.append(tc.TestCase(case['name'],