diff options
30 files changed, 625 insertions, 1820 deletions
diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index 282ae7b54..ce673b288 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -212,12 +212,15 @@ properties: - build-blocker: use-build-blocker: true + block-level: 'NODE' blocking-jobs: - 'apex-daily.*{stream1}' - 'apex-deploy.*{stream1}' - 'apex-build.*{stream1}' - 'apex-runner.*{stream1}' - 'apex-verify-{stream1}' + - throttle: + max-per-node: 1 builders: - 'apex-build' @@ -230,11 +233,12 @@ block: true same-node: true # - trigger-builds: -# - project: 'functest-apex-{slave}-suite-{stream1}' +# - project: 'functest-apex-{verify-slave}-suite-{stream1}' # predefined-parameters: | # DEPLOY_SCENARIO=os-nosdn-nofeature-ha # FUNCTEST_SUITE_NAME=vping_userdata # block: true +# same-node: true - trigger-builds: - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream1}' predefined-parameters: | @@ -313,7 +317,7 @@ # Required Variables: # stream: branch with - in place of / (eg. stable) # branch: branch (eg. stable) - node: '{slave}' + node: '{daily-slave}' disabled: false @@ -338,8 +342,11 @@ properties: - build-blocker: use-build-blocker: true + block-level: 'NODE' blocking-jobs: - 'apex-deploy.*{stream}' + - throttle: + max-per-node: 1 builders: - 'apex-build' @@ -349,6 +356,7 @@ BUILD_DIRECTORY=apex-build-{stream}/build OPNFV_CLEAN=yes git-revision: false + same-node: true block: true - 'apex-upload-artifact' @@ -387,8 +395,11 @@ properties: - build-blocker: use-build-blocker: true + block-level: 'NODE' blocking-jobs: - 'apex-deploy.*{stream}' + - throttle: + max-per-node: 1 builders: - 'apex-deploy-virtual' @@ -604,6 +615,7 @@ properties: - build-blocker: use-build-blocker: true + block-level: 'NODE' blocking-jobs: - 'apex-verify.*{stream1}' - 'apex-deploy.*{stream1}' @@ -618,6 +630,7 @@ - project: 'apex-build-{stream1}' git-revision: true current-parameters: true + same-node: true block: true - trigger-builds: - project: 'apex-deploy-virtual-nosdn-nofeature-ha-{stream1}' diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml index 5ae8a04dc..bbf7c40a4 100644 --- a/jjb/armband/armband-ci-jobs.yml +++ b/jjb/armband/armband-ci-jobs.yml @@ -190,4 +190,4 @@ - trigger: name: 'armband-os-odl_l2-nofeature-ha-arm-pod1-brahmaputra-trigger' triggers: - - timed: '0 4 * * *' + - timed: '0 20 * * *' diff --git a/jjb/armband/armband-deploy.sh b/jjb/armband/armband-deploy.sh index 97430c114..8b0af31e3 100755 --- a/jjb/armband/armband-deploy.sh +++ b/jjb/armband/armband-deploy.sh @@ -39,10 +39,10 @@ POD_NAME=${NODE_NAME/*-} if [[ ! $LAB_NAME =~ (arm|enea) ]]; then echo "Unsupported/unidentified lab $LAB_NAME. Cannot continue!" exit 1 -else - echo "Using configuration for $LAB_NAME" fi +echo "Using configuration for $LAB_NAME" + # create TMPDIR if it doesn't exist mkdir -p $TMPDIR @@ -52,8 +52,11 @@ if [[ $LAB_CONFIG_URL =~ ^git:// ]]; then LAB_CONFIG_URL=file://${WORKSPACE}/lab-config fi +# releng wants us to use nothing else but opnfv.iso for now. We comply. +ISO_FILE=$WORKSPACE/opnfv.iso + # construct the command -DEPLOY_COMMAND="$WORKSPACE/ci/deploy.sh -b ${LAB_CONFIG_URL} -l $LAB_NAME -p $POD_NAME -s $DEPLOY_SCENARIO -i file://$WORKSPACE/opnfv.iso -H -B $BRIDGE -S $TMPDIR" +DEPLOY_COMMAND="$WORKSPACE/ci/deploy.sh -l $LAB_NAME -p $POD_NAME -b ${LAB_CONFIG_URL} -s $DEPLOY_SCENARIO -i file://${ISO_FILE} -H -B $BRIDGE -S $TMPDIR" # log info to console echo "Deployment parameters" @@ -72,9 +75,6 @@ echo "Issuing command" echo "$DEPLOY_COMMAND" echo -# FIXME -export TARGET_LAB=${LAB_NAME} -export TARGET_POD=${POD_NAME} $DEPLOY_COMMAND echo diff --git a/jjb/armband/armband-download-artifact.sh b/jjb/armband/armband-download-artifact.sh index 15ad67d6e..18b55d7a7 100755 --- a/jjb/armband/armband-download-artifact.sh +++ b/jjb/armband/armband-download-artifact.sh @@ -13,35 +13,33 @@ set -o pipefail if [[ "$JOB_NAME" =~ "merge" ]]; then echo "Downloading http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties" # get the properties file for the Armband Fuel ISO built for a merged change - curl -s -o $WORKSPACE/latest.properties http://$GS_URL/opnfv-gerrit-$GERRIT_CHANGE_NUMBER.properties + curl -f -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 -f -s -o $WORKSPACE/latest.properties http://$GS_URL/latest.properties fi -# check if we got the file -# FIXME: the file is created even if it didn't exist on the host -# We should check that the contents are sane -[[ -f latest.properties ]] || exit 1 - -# source the file so we get artifact metadata +# source the file so we get artifact metadata, it will exit if it doesn't exist source latest.properties # echo the info about artifact that is used during the deployment OPNFV_ARTIFACT=${OPNFV_ARTIFACT_URL/*\/} echo "Using $OPNFV_ARTIFACT for deployment" +# Releng doesn't want us to use anything but opnfv.iso for now. We comply. +ISO_FILE=${WORKSPACE}/opnfv.iso + # using ISOs for verify & merge jobs from local storage will be enabled later if [[ ! "$JOB_NAME" =~ (verify|merge) ]]; then # check if we already have the ISO to avoid redownload ISOSTORE="/iso_mount/opnfv_ci/${GIT_BRANCH##*/}" if [[ -f "$ISOSTORE/$OPNFV_ARTIFACT" ]]; then echo "ISO exists locally. Skipping the download and using the file from ISO store" - ln -s $ISOSTORE/$OPNFV_ARTIFACT $WORKSPACE/opnfv.iso + ln -s $ISOSTORE/$OPNFV_ARTIFACT ${ISO_FILE} echo "--------------------------------------------------------" echo - ls -al $WORKSPACE/opnfv.iso + ls -al ${ISO_FILE} echo echo "--------------------------------------------------------" echo "Done!" @@ -49,18 +47,22 @@ if [[ ! "$JOB_NAME" =~ (verify|merge) ]]; then fi fi +# Use gsutils if available +if $(which gsutil &>/dev/null); then + DOWNLOAD_URL="gs://$OPNFV_ARTIFACT_URL" + CMD="gsutil cp ${DOWNLOAD_URL} ${ISO_FILE}" +else + # download image + # -f returns error if the file was not found or on server error + DOWNLOAD_URL="http://$OPNFV_ARTIFACT_URL" + CMD="curl -f -s -o ${ISO_FILE} ${DOWNLOAD_URL}" +fi + # log info to console -echo "Downloading the $INSTALLER_TYPE artifact using URL http://$OPNFV_ARTIFACT_URL" +echo "Downloading the $INSTALLER_TYPE artifact using URL $DOWNLOAD_URL" echo "This could take some time..." echo "--------------------------------------------------------" -echo - -# download the file -curl -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL - -# The file is always created, check that it is in fact an ISO image -[[ $(file $WORKSPACE/opnfv.iso) =~ ISO ]] - -echo +echo "$CMD" +$CMD echo "--------------------------------------------------------" echo "Done!" diff --git a/jjb/fuel/fuel-ci-jobs.yml b/jjb/fuel/fuel-ci-jobs.yml index 77b711e74..acfcedabf 100644 --- a/jjb/fuel/fuel-ci-jobs.yml +++ b/jjb/fuel/fuel-ci-jobs.yml @@ -43,6 +43,8 @@ <<: *master - virtual: <<: *master + - zte-pod1: + <<: *master #-------------------------------- # scenarios #-------------------------------- @@ -311,6 +313,42 @@ name: 'fuel-os-nosdn-kvm-noha-ericsson-pod2-brahmaputra-trigger' triggers: - timed: '' + +#----------------------------------------------- +# ZTE POD1 Triggers running against master branch +#----------------------------------------------- +- trigger: + name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l2-nofeature-ha-zte-pod1-master-trigger' + triggers: + - timed: '0 12 * * *' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-onos-nofeature-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l2-sfc-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-zte-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-ovs-ha-zte-pod1-master-trigger' + triggers: + - timed: '' #----------------------------------------------- # Triggers for other PODs #----------------------------------------------- diff --git a/jjb/fuel/fuel-deploy.sh b/jjb/fuel/fuel-deploy.sh index bab6151d8..ceccc54b6 100755 --- a/jjb/fuel/fuel-deploy.sh +++ b/jjb/fuel/fuel-deploy.sh @@ -43,8 +43,8 @@ if [[ "$NODE_NAME" =~ "virtual" ]]; then POD_NAME="virtual_kvm" fi -# we currently support ericsson, intel, and lf labs -if [[ ! "$LAB_NAME" =~ (ericsson|intel|lf) ]]; then +# we currently support ericsson, intel, lf and zte labs +if [[ ! "$LAB_NAME" =~ (ericsson|intel|lf|zte) ]]; then echo "Unsupported/unidentified lab $LAB_NAME. Cannot continue!" exit 1 else diff --git a/jjb/functest/functest-ci-jobs.yml b/jjb/functest/functest-ci-jobs.yml index 6cfcfdca4..cd3f11e8e 100644 --- a/jjb/functest/functest-ci-jobs.yml +++ b/jjb/functest/functest-ci-jobs.yml @@ -218,12 +218,20 @@ builders: - 'functest-cleanup' - 'set-functest-env' - - 'functest-all' + - 'functest-daily' - 'functest-store-results' - builder: name: functest-suite-builder builders: + - 'functest-cleanup' + - 'set-functest-env' + - 'functest-suite' + + +- builder: + name: functest-suite + builders: - shell: | #!/bin/bash set -e @@ -237,8 +245,9 @@ container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1) docker exec $container_id $cmd + - builder: - name: functest-all + name: functest-daily builders: - shell: | #!/bin/bash diff --git a/jjb/genesis/genesis-foreman.yml b/jjb/genesis/genesis-foreman.yml deleted file mode 100644 index 808dd3b22..000000000 --- a/jjb/genesis/genesis-foreman.yml +++ /dev/null @@ -1,665 +0,0 @@ -######################## -# Job configuration for genesis/foreman -######################## -- project: - - name: genesis-foreman - - project: 'genesis' - - installer: 'foreman' - -# jobs: -# - 'genesis-foreman-verify-build-{stream}' -# - 'genesis-foreman-merge-{stream}' -# - 'genesis-foreman-daily-{stream}' -# - 'genesis-foreman-build-{stream}' -# - 'genesis-foreman-deploy-{stream}' -# - 'genesis-foreman-lab-reconfig-{stream}' -# - 'genesis-foreman-deploy-runner-{stream}' -# - 'genesis-foreman-verify-deploy-virtual-{stream}' - - # stream: branch with - in place of / (eg. stable-arno) - # branch: branch (eg. stable/arno) - stream: - - master: - branch: 'master' - gs-pathname: '' - disabled: true - - stable-arno: - branch: 'stable/arno' - gs-pathname: '/arno' - disabled: true -######################## -# job templates -######################## - -- job-template: - name: 'genesis-foreman-verify-build-{stream}' - - disabled: true - - node: ericsson-build - - concurrent: true - - properties: - - throttle: - enabled: true - max-total: 1 - - parameters: - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: '{branch}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '$GERRIT_REFSPEC' - choosing-strategy: 'gerrit' - - 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: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: ANT - pattern: 'common/ci/**' - - compare-type: ANT - pattern: 'common/manifests/**' - - compare-type: ANT - pattern: 'common/puppet-opnfv/**' - - compare-type: ANT - pattern: 'common/tools/**' - - compare-type: ANT - pattern: '{installer}/build/**' - - compare-type: ANT - pattern: '{installer}/ci/**' - - compare-type: ANT - pattern: '{installer}/include/**' - forbidden-file-paths: - - compare-type: ANT - pattern: 'common/docs/**' - - compare-type: ANT - pattern: '{installer}/docs/**' - - builders: - - 'foreman-build' - - 'foreman-workspace-cleanup' - -- job-template: - name: 'genesis-foreman-merge-{stream}' - - node: ericsson-build - - disabled: true - - concurrent: true - - properties: - - throttle: - enabled: true - max-total: 2 - - parameters: - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: '{branch}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '' - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - choosing-strategy: 'default' - - triggers: - - gerrit: - trigger-on: - - change-merged-event - - comment-added-contains-event: - comment-contains-value: 'remerge' - projects: - - project-compare-type: 'ANT' - project-pattern: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: ANT - pattern: 'common/ci/**' - - compare-type: ANT - pattern: 'common/manifests/**' - - compare-type: ANT - pattern: 'common/puppet-opnfv/**' - - compare-type: ANT - pattern: 'common/tools/**' - - compare-type: ANT - pattern: '{installer}/build/**' - - compare-type: ANT - pattern: '{installer}/ci/**' - - compare-type: ANT - pattern: '{installer}/include/**' - forbidden-file-paths: - - compare-type: ANT - pattern: 'common/docs/**' - - compare-type: ANT - pattern: '{installer}/docs/**' - - builders: - - 'foreman-build' - - 'foreman-workspace-cleanup' - -- job-template: - name: 'genesis-foreman-daily-{stream}' - - node: ericsson-build - - disabled: true - - triggers: - - 'foreman-{stream}' - - parameters: - - project-parameter: - project: '{project}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - trigger-builds: - - project: 'genesis-foreman-build-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'genesis-foreman-lab-reconfig-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'genesis-foreman-deploy-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'functest-foreman-{stream}' - block: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' - # - trigger-builds: - # - project: 'yardstick-foreman-{stream}' - # block: true - # block-thresholds: - # build-step-failure-threshold: 'never' - # failure-threshold: 'never' - # unstable-threshold: 'FAILURE' - - publishers: - - trigger-parameterized-builds: - - project: 'genesis-fuel-daily-{stream}' - trigger-with-no-params: true - -- job-template: - name: 'genesis-foreman-deploy-runner-{stream}' - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - properties: - - build-blocker: - use-build-blocker: true - blocking-jobs: - - "genesis-fuel-daily.*" - - "genesis-fuel-deploy-runner-{stream}" - - "genesis-foreman-daily.*" - - builders: - - 'foreman-lab-reconfig' - - trigger-builds: - - project: 'genesis-foreman-deploy-{stream}' - git-revision: true - block: true - -- job-template: - name: 'genesis-foreman-build-{stream}' - - node: ericsson-build - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - 'foreman-build' - - 'foreman-upload-artifact' - - 'foreman-workspace-cleanup' - -- job-template: - name: 'genesis-foreman-deploy-{stream}' - - disabled: true - - node: opnfv-jump-2 - - parameters: - - project-parameter: - project: '{project}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - 'foreman-deploy' - -- job-template: - name: 'genesis-foreman-lab-reconfig-{stream}' - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - properties: - - build-blocker: - use-build-blocker: true - blocking-jobs: - - "genesis-fuel-daily.*" - - builders: - - 'foreman-lab-reconfig' - -- job-template: - name: 'genesis-foreman-verify-deploy-virtual-{stream}' - - node: opnfv-jump-1 - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: '{branch}' - - foreman-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '$GERRIT_REFSPEC' - choosing-strategy: 'gerrit' - - 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: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: ANT - pattern: 'common/ci/**' - - compare-type: ANT - pattern: 'common/manifests/**' - - compare-type: ANT - pattern: 'common/puppet-opnfv/**' - - compare-type: ANT - pattern: 'common/tools/**' - - compare-type: ANT - pattern: '{installer}/build/**' - - compare-type: ANT - pattern: '{installer}/ci/**' - - compare-type: ANT - pattern: '{installer}/include/**' - forbidden-file-paths: - - compare-type: ANT - pattern: 'common/docs/**' - - compare-type: ANT - pattern: '{installer}/docs/**' - dependency-jobs: 'genesis-foreman-verify-build-{stream}' - - builders: - - 'foreman-deploy-virtual' - -######################## -# parameter macros -######################## -- parameter: - name: foreman-parameter - parameters: - - string: - name: INSTALLER - default: '{installer}' - description: "Installer to use." - - 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/genesis-$INSTALLER{gs-pathname} - description: "Directory where the cache to be used during the build is located." - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW." - - string: - name: GS_URL - default: artifacts.opnfv.org/$PROJECT/$INSTALLER{gs-pathname} - description: "URL to Google Storage." - -######################## -# builder macros -######################## -- builder: - name: 'foreman-lab-reconfig' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # check to see if ucs login info file exists - if [ -e ~/.ssh/ucs_creds ];then - source ~/.ssh/ucs_creds - else - echo "Unable to find UCS credentials for LF lab reconfiguration...Exiting" - exit 1 - fi - - # clone releng - echo "Cloning releng repo..." - if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/releng; then - echo "Unable to clone releng repo...Exiting" - exit 1 - fi - - # log info to console - echo "Starting the lab reconfiguration for $INSTALLER..." - echo "--------------------------------------------------------" - echo - - # create venv - $WORKSPACE/releng/utils/lab-reconfiguration/create_venv.sh - - # disable nounset because 'activate' script contains unbound variable(s) - set +o nounset - # enter venv - source $WORKSPACE/releng/utils/lab-reconfiguration/venv/bin/activate - # set nounset back again - set -o nounset - - # verify we are in venv - if [[ ! $(which python | grep venv) ]]; then - echo "Unable to activate venv...Exiting" - exit 1 - fi - - python $WORKSPACE/releng/utils/lab-reconfiguration/reconfigUcsNet.py -i $ucs_host -u $ucs_user -p $ucs_password -f $WORKSPACE/releng/utils/lab-reconfiguration/foreman.yaml - - # while undergoing reboot - sleep 30 - - # check to see if slave is back up - ping_counter=0 - ping_flag=0 - while [ "$ping_counter" -lt 20 ]; do - if [[ $(ping -c 5 172.30.10.72) ]]; then - ping_flag=1 - break - fi - ((ping_counter++)) - sleep 10 - done - - if [ "$ping_flag" -eq 1 ]; then - echo "Slave is pingable, now wait 180 seconds for services to start" - sleep 180 - else - echo "Slave did not come back up after reboot: please check opnfv-jump-2" - exit 1 - fi - - set +o nounset - deactivate - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'foreman-build' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Starting the build of $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - # create the cache directory if it doesn't exist - [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY - - # set OPNFV_ARTIFACT_VERSION - export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S") - - # start the build - cd $WORKSPACE/$INSTALLER/ci - ./build.sh -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY - - # list the contents of BUILD_OUTPUT directory - ls -al $BUILD_DIRECTORY - - # 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.iso" - echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)" - echo "OPNFV_BUILD_URL=$BUILD_URL" - ) > $WORKSPACE/opnfv.properties - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'foreman-deploy' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Starting the deployment using $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - # cleanup first - sudo $WORKSPACE/common/ci/clean.sh -base_config $WORKSPACE/$INSTALLER/ci/inventory/lf_pod2_ksgen_settings.yml - - echo "Sleeping for 60 seconds between clean and deploy to allow nodes to power off" - sleep 60 - - # and then initiate deployment - sudo $WORKSPACE/$INSTALLER/ci/deploy.sh -base_config $WORKSPACE/$INSTALLER/ci/inventory/lf_pod2_ksgen_settings.yml - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'foreman-deploy-virtual' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Starting the virtual deployment using $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - # cleanup baremetal first (in case baremetal was being used on pod2, remove when moved to isolated Virtual pod) - sudo $WORKSPACE/common/ci/clean.sh - - # initiate virtual deployment - sudo $WORKSPACE/$INSTALLER/ci/deploy.sh -virtual - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'foreman-upload-artifact' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Uploading the $INSTALLER artifact. This could take some time..." - echo "--------------------------------------------------------" - echo - - # source the opnfv.properties to get ARTIFACT_VERSION - source $WORKSPACE/opnfv.properties - - # upload artifact and additional files to google storage - gsutil cp $BUILD_DIRECTORY/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1 - gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1 - gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1 - - echo - echo "--------------------------------------------------------" - echo "Done!" - echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso" - -- builder: - name: 'foreman-workspace-cleanup' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # delete everything that is in $WORKSPACE - /bin/rm -rf $WORKSPACE - -######################## -# trigger macros -######################## -- trigger: - name: 'foreman-master' - triggers: - - timed: '0 11 * * *' - -- trigger: - name: 'foreman-stable-arno' - triggers: - - timed: '0 12 * * *' diff --git a/jjb/genesis/genesis-fuel-att.yml b/jjb/genesis/genesis-fuel-att.yml deleted file mode 100644 index 0202c2276..000000000 --- a/jjb/genesis/genesis-fuel-att.yml +++ /dev/null @@ -1,88 +0,0 @@ -# this is the job configuration for bgs -- project: - name: genesis-att - installer: - - fuel -# jobs: -# - 'genesis-{installer}-daily-att-{stream}' - - # stream: branch with - in place of / (eg. stable-helium) - # branch: branch (eg. stable/helium) - stream: - - master: - branch: 'master' - - project: 'genesis' - -######################## -# job templates -######################## - -- job-template: - name: 'genesis-{installer}-daily-att-{stream}' - - node: att-build - - disabled: true - - 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: GS_URL - default: 'artifacts.opnfv.org/genesis/{installer}' - description: "URL to Google Storage." - - string: - name: INSTALLER - default: '{installer}' - description: "Installer to use." - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/genesis - - string: - name: GERRIT_BRANCH - default: origin/master - description: "Branch to build, deploy and test." - - string: - name: GERRIT_REFSPEC - default: refs/heads/master - description: "Refspec to retrieve." - - scm: - - git: - skip-tag: true - url: $GIT_BASE - branches: - - $GERRIT_BRANCH - refspec: $GERRIT_REFSPEC - - triggers: - - pollscm: - cron: '@midnight' - - builders: - - '{installer}-daily-master-att' - -######################## -# builder macros -######################## - -- builder: - name: fuel-daily-master-att - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - set -x - - # set/create the cache location - OPNFV_FUEL_CACHE="$(dirname $WORKSPACE)/opnfv_fuel_cache" - [[ -d $OPNFV_FUEL_CACHE ]] || mkdir -p $OPNFV_FUEL_CACHE - - # do the build - cd $WORKSPACE/fuel/ci - ./build.sh -f t -v $BUILD_ID -c file://$OPNFV_FUEL_CACHE $BUILD_DIRECTORY diff --git a/jjb/genesis/genesis-fuel-dell.yml b/jjb/genesis/genesis-fuel-dell.yml deleted file mode 100644 index 4818b5c53..000000000 --- a/jjb/genesis/genesis-fuel-dell.yml +++ /dev/null @@ -1,88 +0,0 @@ -# this is the job configuration for bgs -- project: - name: genesis-dell - installer: - - fuel -# jobs: -# - 'genesis-{installer}-daily-dell-{stream}' - - # stream: branch with - in place of / (eg. stable-helium) - # branch: branch (eg. stable/helium) - stream: - - master: - branch: 'master' - - project: 'genesis' - -######################## -# job templates -######################## - -- job-template: - name: 'genesis-{installer}-daily-dell-{stream}' - - node: dell-build - - disabled: true - - 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: GS_URL - default: 'artifacts.opnfv.org/genesis/{installer}' - description: "URL to Google Storage." - - string: - name: INSTALLER - default: '{installer}' - description: "Installer to use." - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/genesis - - string: - name: GERRIT_BRANCH - default: origin/master - description: "Branch to build, deploy and test." - - string: - name: GERRIT_REFSPEC - default: refs/heads/master - description: "Refspec to retrieve." - - scm: - - git: - skip-tag: true - url: $GIT_BASE - branches: - - $GERRIT_BRANCH - refspec: $GERRIT_REFSPEC - - triggers: - - pollscm: - cron: '@midnight' - - builders: - - '{installer}-daily-master-dell' - -######################## -# builder macros -######################## - -- builder: - name: fuel-daily-master-dell - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - set -x - - # set/create the cache location - OPNFV_FUEL_CACHE="$(dirname $WORKSPACE)/opnfv_fuel_cache" - [[ -d $OPNFV_FUEL_CACHE ]] || mkdir -p $OPNFV_FUEL_CACHE - - # do the build - cd $WORKSPACE/fuel/ci - ./build.sh -f t -v $BUILD_ID -c file://$OPNFV_FUEL_CACHE $BUILD_DIRECTORY diff --git a/jjb/genesis/genesis-fuel.yml b/jjb/genesis/genesis-fuel.yml deleted file mode 100644 index cc134fb10..000000000 --- a/jjb/genesis/genesis-fuel.yml +++ /dev/null @@ -1,691 +0,0 @@ -######################## -# Job configuration for genesis/fuel -######################## -- project: - - name: genesis-fuel - - project: 'genesis' - - installer: 'fuel' - -# jobs: -# - 'genesis-fuel-verify-build-{stream}' -# - 'genesis-fuel-merge-{stream}' -# - 'genesis-fuel-daily-{stream}' -# - 'genesis-fuel-build-{stream}' -# - 'genesis-fuel-deploy-{stream}' -# - 'genesis-fuel-deploy-runner-{stream}' -# - 'genesis-fuel-lab-reconfig-{stream}' -# - 'genesis-fuel-verify-deploy-virtual-{stream}' - - # stream: branch with - in place of / (eg. stable-arno) - # branch: branch (eg. stable/arno) - stream: - - master: - branch: 'master' - gs-pathname: '' - disabled: true - - stable-arno: - branch: 'stable/arno' - gs-pathname: '/arno' - disabled: true - -######################## -# job templates -######################## - -- job-template: - name: 'genesis-fuel-verify-build-{stream}' - - node: ericsson-build - - disabled: true - - concurrent: true - - properties: - - throttle: - enabled: true - max-total: 3 - - parameters: - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: '{branch}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '$GERRIT_REFSPEC' - choosing-strategy: 'gerrit' - - 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: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: ANT - pattern: 'common/ci/**' - - compare-type: ANT - pattern: 'common/manifests/**' - - compare-type: ANT - pattern: 'common/puppet-opnfv/**' - - compare-type: ANT - pattern: 'common/tools/**' - - compare-type: ANT - pattern: '{installer}/build/**' - - compare-type: ANT - pattern: '{installer}/ci/**' - - compare-type: ANT - pattern: '{installer}/deploy/**' - - compare-type: ANT - pattern: '{installer}/include/**' - - compare-type: ANT - pattern: '{installer}/prototypes/**' - forbidden-file-paths: - - compare-type: ANT - pattern: 'common/docs/**' - - compare-type: ANT - pattern: '{installer}/docs/**' - - builders: - - 'fuel-build' - - 'fuel-workspace-cleanup' - -- job-template: - name: 'genesis-fuel-merge-{stream}' - - node: ericsson-build - - disabled: true - - concurrent: true - - properties: - - throttle: - enabled: true - max-total: 2 - - parameters: - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: '{branch}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '' - - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - choosing-strategy: 'default' - - triggers: - - gerrit: - trigger-on: - - change-merged-event - - comment-added-contains-event: - comment-contains-value: 'remerge' - projects: - - project-compare-type: 'ANT' - project-pattern: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: ANT - pattern: 'common/ci/**' - - compare-type: ANT - pattern: 'common/manifests/**' - - compare-type: ANT - pattern: 'common/puppet-opnfv/**' - - compare-type: ANT - pattern: 'common/tools/**' - - compare-type: ANT - pattern: '{installer}/build/**' - - compare-type: ANT - pattern: '{installer}/ci/**' - - compare-type: ANT - pattern: '{installer}/deploy/**' - - compare-type: ANT - pattern: '{installer}/include/**' - - compare-type: ANT - pattern: '{installer}/prototypes/**' - forbidden-file-paths: - - compare-type: ANT - pattern: 'common/docs/**' - - compare-type: ANT - pattern: '{installer}/docs/**' - - builders: - - 'fuel-build' - - 'fuel-workspace-cleanup' - -- job-template: - name: 'genesis-fuel-daily-{stream}' - - node: ericsson-build - - disabled: true - - triggers: - - 'genesis-fuel-{stream}-trigger' - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - trigger-builds: - - project: 'genesis-fuel-build-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'genesis-fuel-lab-reconfig-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'genesis-fuel-deploy-{stream}' - git-revision: true - block: true - - trigger-builds: - - project: 'functest-fuel-{stream}' - block: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' - # - trigger-builds: - # - project: 'yardstick-fuel-{stream}' - # block: true - # block-thresholds: - # build-step-failure-threshold: 'never' - # failure-threshold: 'never' - # unstable-threshold: 'FAILURE' - - publishers: - - trigger-parameterized-builds: - - project: 'genesis-foreman-daily-{stream}' - trigger-with-no-params: true - -- job-template: - name: 'genesis-fuel-deploy-runner-{stream}' - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - properties: - - build-blocker: - use-build-blocker: true - blocking-jobs: - - "genesis-foreman-daily.*" - - "genesis-foreman-deploy-runner-{stream}" - - "genesis-fuel-daily.*" - - builders: - - 'fuel-lab-reconfig' - - trigger-builds: - - project: 'genesis-fuel-deploy-{stream}' - git-revision: true - block: true - -- job-template: - name: 'genesis-fuel-build-{stream}' - - node: ericsson-build - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - 'fuel-build' - - 'fuel-upload-artifact' - - 'fuel-workspace-cleanup' - - publishers: - - email: - recipients: jonas.bjurel@ericsson.com stefan.k.berg@ericsson.com - -- job-template: - name: 'genesis-fuel-deploy-{stream}' - - disabled: true - - node: opnfv-jump-2 - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "POD2 has some issues with cloning using https so that's why GIT_BASE is overriden here again." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - builders: - - 'fuel-download-artifact' - - 'fuel-deploy' - - publishers: - - email: - recipients: jonas.bjurel@ericsson.com stefan.k.berg@ericsson.com - -- job-template: - name: 'genesis-fuel-lab-reconfig-{stream}' - - disabled: true - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '{gs-pathname}' - - string: - name: GIT_BASE - default: ssh://gerrit.opnfv.org:29418/$PROJECT - description: "Used for overriding the GIT URL coming from parameters macro." - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: '{branch}' - - properties: - - build-blocker: - use-build-blocker: true - blocking-jobs: - - "genesis-foreman-daily.*" - - builders: - - 'fuel-lab-reconfig' - -- job-template: - name: 'genesis-fuel-verify-deploy-virtual-{stream}' - - disabled: true - - node: ericsson-build - - parameters: - - project-parameter: - project: '{project}' - - genesis-fuel-parameter: - installer: '{installer}' - gs-pathname: '' - - scm: - - git-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - branch: 'master' - - builders: - - 'fuel-deploy-virtual' - -######################## -# parameter macros -######################## -- parameter: - name: genesis-fuel-parameter - parameters: - - string: - name: INSTALLER - default: '{installer}' - description: "Installer to use." - - 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/genesis-$INSTALLER - description: "Directory where the cache to be used during the build is located." - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW." - - string: - name: GS_URL - default: artifacts.opnfv.org/$PROJECT/$INSTALLER{gs-pathname} - description: "URL to Google Storage." - -######################## -# builder macros -######################## -- builder: - name: 'fuel-build' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Starting the build of $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - # create the cache directory if it doesn't exist - [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY - - # set OPNFV_ARTIFACT_VERSION - export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S") - - # start the build - cd $WORKSPACE/$INSTALLER/ci - ./build.sh -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY - - # list the build artifacts - ls -al $BUILD_DIRECTORY - - # 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.iso" - echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)" - echo "OPNFV_BUILD_URL=$BUILD_URL" - ) > $WORKSPACE/opnfv.properties - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'fuel-deploy' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # source the file so we get OPNFV vars - source latest.properties - - # echo the info about artifact that is used during the deployment - echo "Using $(echo $OPNFV_ARTIFACT_URL | cut -d'/' -f4) for deployment" - - # create TMPDIR if it doesn't exist - export TMPDIR=$HOME/tmpdir - [[ -d $TMPDIR ]] || mkdir -p $TMPDIR - - # change permissions down to TMPDIR - chmod a+x $HOME - chmod a+x $TMPDIR - - # set CONFDIR, BRIDGE - export CONFDIR=$WORKSPACE/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2 - export BRIDGE=pxebr - - # cleanup first - sudo $WORKSPACE/common/ci/clean.sh -base_config $WORKSPACE/foreman/ci/inventory/lf_pod2_ksgen_settings.yml - - # prepare for Fuel Deployment - sudo $WORKSPACE/common/ci/setup.sh - - # log info to console - echo "Starting the deployment using $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - # start the deployment - echo "Issuing command" - echo "sudo $WORKSPACE/fuel/ci/deploy.sh -iso $WORKSPACE/opnfv.iso -dea $CONFDIR/dea.yaml -dha $CONFDIR/dha.yaml -s $TMPDIR -b $BRIDGE -nh" - sudo $WORKSPACE/fuel/ci/deploy.sh -iso $WORKSPACE/opnfv.iso -dea $CONFDIR/dea.yaml -dha $CONFDIR/dha.yaml -s $TMPDIR -b $BRIDGE -nh - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'fuel-deploy-virtual' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Starting the deployment on virtual environment using $INSTALLER. This could take some time..." - echo "--------------------------------------------------------" - echo - - ssh -o BatchMode=yes -o TCPKeepAlive=yes cideploy@10.118.34.205 ./cideploy.sh - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'fuel-upload-artifact' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # log info to console - echo "Uploading the $INSTALLER artifact. This could take some time..." - echo "--------------------------------------------------------" - echo - - # source the opnfv.properties to get ARTIFACT_VERSION - source $WORKSPACE/opnfv.properties - - # upload artifact and additional files to google storage - gsutil cp $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1 - gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1 - gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1 - - echo - echo "--------------------------------------------------------" - echo "Done!" - echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso" - -- builder: - name: 'fuel-download-artifact' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # get the latest.properties file in order to get info regarding latest artifact - curl -s -o $WORKSPACE/latest.properties http://$GS_URL/latest.properties - - # check if we got the file - [[ -f latest.properties ]] || exit 1 - - # source the file so we get OPNFV vars - source latest.properties - - # log info to console - echo "Downloading the $INSTALLER artifact using URL http://$OPNFV_ARTIFACT_URL" - echo "This could take some time..." - echo "--------------------------------------------------------" - echo - - # download the file - curl -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1 - - # list the file - ls -al $WORKSPACE/opnfv.iso - - echo - echo "--------------------------------------------------------" - echo "Done!" - -- builder: - name: 'fuel-workspace-cleanup' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # delete everything that is in $WORKSPACE - /bin/rm -rf $WORKSPACE - -- builder: - name: 'fuel-lab-reconfig' - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # check to see if ucs login info file exists - if [ -e ~/.ssh/ucs_creds ];then - source ~/.ssh/ucs_creds - else - echo "Unable to find UCS credentials for LF lab reconfiguration...Exiting" - exit 1 - fi - - # clone releng - echo "Cloning releng repo..." - if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/releng; then - echo "Unable to clone releng repo...Exiting" - exit 1 - fi - - # log info to console - echo "Starting the lab reconfiguration for $INSTALLER..." - echo "--------------------------------------------------------" - echo - - # create venv - $WORKSPACE/releng/utils/lab-reconfiguration/create_venv.sh - - # disable nounset because 'activate' script contains unbound variable(s) - set +o nounset - # enter venv - source $WORKSPACE/releng/utils/lab-reconfiguration/venv/bin/activate - # set nounset back again - set -o nounset - - # verify we are in venv - if [[ ! $(which python | grep venv) ]]; then - echo "Unable to activate venv...Exiting" - exit 1 - fi - - python $WORKSPACE/releng/utils/lab-reconfiguration/reconfigUcsNet.py -i $ucs_host -u $ucs_user -p $ucs_password -f $WORKSPACE/releng/utils/lab-reconfiguration/fuel.yaml - - # while undergoing reboot - sleep 30 - - # check to see if slave is back up - ping_counter=0 - ping_flag=0 - while [ "$ping_counter" -lt 20 ]; do - if [[ $(ping -c 5 172.30.10.72) ]]; then - ping_flag=1 - break - fi - ((ping_counter++)) - sleep 10 - done - - if [ "$ping_flag" -eq 1 ]; then - echo "Slave is pingable, now wait 180 seconds for services to start" - sleep 180 - else - echo "Slave did not come back up after reboot: please check opnfv-jump-2" - exit 1 - fi - - set +o nounset - deactivate - - echo - echo "--------------------------------------------------------" - echo "Done!" - -######################## -# trigger macros -######################## -- trigger: - name: 'genesis-fuel-master-trigger' - triggers: - - timed: '0 5 * * *' - -- trigger: - name: 'genesis-fuel-stable-arno-trigger' - triggers: - - timed: '0 7 * * *' diff --git a/jjb/genesis/genesis-juju.yml b/jjb/genesis/genesis-juju.yml deleted file mode 100644 index 14f2e12af..000000000 --- a/jjb/genesis/genesis-juju.yml +++ /dev/null @@ -1,193 +0,0 @@ -# this is the job configuration for bgs -- project: - - name: genesis-juju - - installer: - - juju -# jobs: -# - 'genesis-juju-verify' -# - 'genesis-juju-merge' -# - 'genesis-juju-daily-{stream}' - - # stream: branch with - in place of / (eg. stable-helium) - # branch: branch (eg. stable/helium) - stream: - - master: - branch: 'master' - - project: 'genesis' - -######################## -# job templates -######################## - -- job-template: - name: 'genesis-juju-verify' - - disabled: true - - node: ericsson-build - - parameters: - - string: - name: BUILD_DIRECTORY - default: $WORKSPACE/build_output - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/genesis - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: 'master' - - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '$GERRIT_REFSPEC' - choosing-strategy: 'gerrit' - - 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: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/master' - file-paths: - - compare-type: ANT - pattern: 'common/**' - - compare-type: ANT - pattern: 'juju/**' - - builders: - - 'juju-verify' - -- job-template: - name: 'genesis-juju-merge' - - disabled: true - - # builder-merge job to run JJB update - # - # This job's purpose is to update all the JJB - - node: ericsson-build - - parameters: - - string: - name: BUILD_DIRECTORY - default: $WORKSPACE/build_output - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/genesis - - project-parameter: - project: '{project}' - - gerrit-parameter: - branch: 'master' - - scm: - - gerrit-trigger-scm: - credentials-id: '{ssh-credentials}' - refspec: '' - choosing-strategy: 'default' - - triggers: - - gerrit: - trigger-on: - - change-merged-event - - comment-added-contains-event: - comment-contains-value: 'remerge' - projects: - - project-compare-type: 'ANT' - project-pattern: 'genesis' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/master' - file-paths: - - compare-type: ANT - pattern: 'common/**' - - compare-type: ANT - pattern: 'juju/**' - - builders: - - 'juju-merge' - -- job-template: - name: 'genesis-juju-daily-{stream}' - - disabled: true - - node: ericsson-build - - 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: GS_URL - default: 'artifacts.opnfv.org/genesis/juju' - description: "URL to Google Storage." - - string: - name: INSTALLER - default: 'juju' - description: "Installer to use." - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/genesis - - string: - name: GERRIT_BRANCH - default: origin/master - description: "Branch to build, deploy and test." - - string: - name: GERRIT_REFSPEC - default: refs/heads/master - description: "Refspec to retrieve." - - scm: - - git: - skip-tag: true - url: $GIT_BASE - branches: - - $GERRIT_BRANCH - refspec: $GERRIT_REFSPEC - - triggers: - - pollscm: - cron: '@midnight' - - builders: - - 'juju-daily-master' - -- builder: - name: juju-verify - builders: - - shell: | - #!/bin/bash - echo "Hello World!" - -- builder: - name: juju-merge - builders: - - shell: | - #!/bin/bash - echo "Hello World!" - -- builder: - name: juju-daily-master - builders: - - shell: | - #!/bin/bash - echo "Hello World!" diff --git a/jjb/joid/joid-deploy.sh b/jjb/joid/joid-deploy.sh index 907db4f57..bcc4b6412 100644 --- a/jjb/joid/joid-deploy.sh +++ b/jjb/joid/joid-deploy.sh @@ -181,10 +181,17 @@ cat << EOF > $JOID_ADMIN_OPENRC export OS_USERNAME=admin export OS_PASSWORD=$OS_ADMIN_PASSWORD export OS_TENANT_NAME=admin -export OS_AUTH_URL=http://$KEYSTONE:5000/v2.0 +export OS_AUTH_URL=http://$KEYSTONE:35537/v2.0 export OS_REGION_NAME=Canonical +export OS_ENDPOINT_TYPE='adminURL' +export CINDER_ENDPOINT_TYPE='adminURL' +export GLANCE_ENDPOINT_TYPE='adminURL' +export KEYSTONE_ENDPOINT_TYPE='adminURL' +export NEUTRON_ENDPOINT_TYPE='adminURL' +export NOVA_ENDPOINT_TYPE='adminURL' export SDN_CONTROLLER=$SDN_CONTROLLER_IP export SDN_PASSWORD=$SDN_PASSWORD +export OS_INTERFACE=admin EOF ## diff --git a/jjb/oscar/oscar.yml b/jjb/netready/netready.yml index 786d44b3e..bc8f66691 100644 --- a/jjb/oscar/oscar.yml +++ b/jjb/netready/netready.yml @@ -1,34 +1,27 @@ -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: - name: oscar + name: netready project: '{name}' jobs: - - 'oscar-verify-{stream}' + - 'netready-verify-{stream}' -# only master branch is enabled at the moment to keep no of jobs sane stream: - master: - branch: 'master' + branch: '{stream}' gs-pathname: '' -# - brahmaputra: -# branch: 'stable/brahmaputra' -# gs-pathname: '/brahmaputra' + - brahmaputra: + branch: 'stable/{stream}' + gs-pathname: '/{stream}' - job-template: - name: 'oscar-verify-{stream}' + name: 'netready-verify-{stream}' parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' - scm: - gerrit-trigger-scm: credentials-id: '{ssh-credentials}' @@ -55,7 +48,7 @@ branch-pattern: '**/{branch}' forbidden-file-paths: - compare-type: ANT - pattern: 'docs/**|.gitignore' + pattern: 'docs/**' builders: - shell: | diff --git a/jjb/opnfv/opnfv-docker.sh b/jjb/opnfv/opnfv-docker.sh index 702c0ce52..1093d5fec 100644 --- a/jjb/opnfv/opnfv-docker.sh +++ b/jjb/opnfv/opnfv-docker.sh @@ -67,16 +67,18 @@ fi # cd to directory where Dockerfile is located -if [[ "$DOCKER_REPO_NAME" == "opnfv/functest" ]]; then +if [[ "$DOCKER_REPO_NAME" == "opnfv/bottlenecks" ]]; then + cd $WORKSPACE/ci/docker +elif [[ "$DOCKER_REPO_NAME" == "opnfv/cperf" ]]; then cd $WORKSPACE/docker -elif [[ "$DOCKER_REPO_NAME" == "opnfv/yardstick" ]]; then - cd $WORKSPACE/ci/docker/yardstick-ci -elif [[ "$DOCKER_REPO_NAME" == "opnfv/storperf" ]]; then +elif [[ "$DOCKER_REPO_NAME" == "opnfv/functest" ]]; then cd $WORKSPACE/docker elif [[ "$DOCKER_REPO_NAME" == "opnfv/qtip" ]]; then cd $WORKSPACE/docker -elif [[ "$DOCKER_REPO_NAME" == "opnfv/bottlenecks" ]]; then - cd $WORKSPACE/ci/docker +elif [[ "$DOCKER_REPO_NAME" == "opnfv/storeperf" ]]; then + cd $WORKSPACE/docker +elif [[ "$DOCKER_REPO_NAME" == "opnfv/yardstick" ]]; then + cd $WORKSPACE/ci/docker/yardstick-ci else echo "ERROR: DOCKER_REPO_NAME parameter not valid: $DOCKER_REPO_NAME" exit 1 diff --git a/jjb/opnfv/opnfv-docker.yml b/jjb/opnfv/opnfv-docker.yml index 936f22040..6b4924295 100644 --- a/jjb/opnfv/opnfv-docker.yml +++ b/jjb/opnfv/opnfv-docker.yml @@ -8,6 +8,7 @@ project: - 'bottlenecks' + - 'cperf' - 'functest' - 'storperf' - 'qtip' diff --git a/jjb/yardstick/yardstick-ci-jobs.yml b/jjb/yardstick/yardstick-ci-jobs.yml index e241cbeef..32191ffe3 100644 --- a/jjb/yardstick/yardstick-ci-jobs.yml +++ b/jjb/yardstick/yardstick-ci-jobs.yml @@ -111,7 +111,7 @@ - zte-pod1: installer: fuel suite: daily - auto-trigger-name: 'yardstick-daily-zte-pod1-trigger' + auto-trigger-name: 'brahmaputra-trigger-daily-disabled' <<: *master - orange-pod2: installer: joid @@ -391,7 +391,7 @@ parameters: - string: name: YARDSTICK_DB_BACKEND - default: '' + default: '-i 104.197.68.199:8086' description: 'Arguments to use in order to choose the backend DB' - parameter: @@ -439,11 +439,6 @@ ####################### # trigger for PODs to only run yardstick test suites - trigger: - name: 'yardstick-daily-zte-pod1-trigger' - triggers: - - timed: '0 2 * * *' - -- trigger: name: 'yardstick-vtcdaily-ericsson-pod1-trigger' triggers: - timed: '0 1 * * *' diff --git a/utils/test/result_collection_api/README.md b/utils/test/result_collection_api/README.md new file mode 100644 index 000000000..d73274c69 --- /dev/null +++ b/utils/test/result_collection_api/README.md @@ -0,0 +1,16 @@ +# result_collection_api + +## prepare: +Install: + +``` +pip install testtools +pip install discover +``` + +## How to: +run_test.sh: + +``` +bash ./run_test.sh +``` diff --git a/utils/test/result_collection_api/common/constants.py b/utils/test/result_collection_api/common/constants.py index 2c825c109..4d39a142d 100644 --- a/utils/test/result_collection_api/common/constants.py +++ b/utils/test/result_collection_api/common/constants.py @@ -12,3 +12,4 @@ DEFAULT_REPRESENTATION = "application/json" HTTP_BAD_REQUEST = 400 HTTP_FORBIDDEN = 403 HTTP_NOT_FOUND = 404 +HTTP_OK = 200 diff --git a/utils/test/result_collection_api/resources/handlers.py b/utils/test/result_collection_api/resources/handlers.py index c1e8eb182..fff166237 100644 --- a/utils/test/result_collection_api/resources/handlers.py +++ b/utils/test/result_collection_api/resources/handlers.py @@ -13,7 +13,8 @@ from tornado.web import RequestHandler, asynchronous, HTTPError from tornado import gen from datetime import datetime, timedelta -from models import Pod, TestProject, TestCase, TestResult +from models import TestProject, TestCase, TestResult +from resources.pod_models import Pod from common.constants import DEFAULT_REPRESENTATION, HTTP_BAD_REQUEST, \ HTTP_NOT_FOUND, HTTP_FORBIDDEN from common.config import prepare_put_request diff --git a/utils/test/result_collection_api/resources/models.py b/utils/test/result_collection_api/resources/models.py index 06e95f94f..adf6842c3 100644 --- a/utils/test/result_collection_api/resources/models.py +++ b/utils/test/result_collection_api/resources/models.py @@ -5,47 +5,41 @@ # 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
+# feng.xiaowei@zte.com.cn mv Pod to pod_models.py 6-18-2016
+# feng.xiaowei@zte.com.cn add MetaCreateResponse/MetaGetResponse 6-18-2016
##############################################################################
-class Pod:
- """ describes a POD platform """
- def __init__(self):
- self._id = ""
- self.name = ""
- self.creation_date = ""
- self.mode = ""
- self.details = ""
+class MetaCreateResponse(object):
+ def __init__(self, success=True, uri=''):
+ self.success = success
+ self.uri = uri
@staticmethod
- def pod_from_dict(pod_dict):
- if pod_dict is None:
+ def from_dict(meta_dict):
+ if meta_dict is None:
return None
- p = Pod()
- p._id = pod_dict.get('_id')
- p.creation_date = str(pod_dict.get('creation_date'))
- p.name = pod_dict.get('name')
- p.mode = pod_dict.get('mode')
- p.details = pod_dict.get('details')
- return p
+ meta = MetaCreateResponse()
+ meta.success = meta_dict.get('success')
+ meta.uri = meta_dict.get('uri')
+ return meta
- def format(self):
- return {
- "name": self.name,
- "mode": self.mode,
- "details": self.details,
- "creation_date": str(self.creation_date),
- }
- def format_http(self):
- return {
- "_id": str(self._id),
- "name": self.name,
- "mode": self.mode,
- "details": self.details,
- "creation_date": str(self.creation_date),
- }
+class MetaGetResponse(object):
+ def __init__(self, success=True, total=0):
+ self.success = success
+ self.total = total
+
+ @staticmethod
+ def from_dict(meta_dict):
+ if meta_dict is None:
+ return None
+
+ meta = MetaGetResponse()
+ meta.success = meta_dict.get('success')
+ meta.total = meta_dict.get('total')
+ return meta
class TestProject:
diff --git a/utils/test/result_collection_api/resources/pod_models.py b/utils/test/result_collection_api/resources/pod_models.py new file mode 100644 index 000000000..5c4ef7221 --- /dev/null +++ b/utils/test/result_collection_api/resources/pod_models.py @@ -0,0 +1,108 @@ +from models import MetaCreateResponse, MetaGetResponse + + +class PodCreateRequest(object): + def __init__(self, name='', mode='', details=''): + self.name = name + self.mode = mode + self.details = details + + def format(self): + return { + "name": self.name, + "mode": self.mode, + "details": self.details, + } + + @staticmethod + def from_dict(req_dict): + if req_dict is None: + return None + + req = PodCreateRequest() + req.name = req_dict.get('name') + req.mode = req_dict.get('mode') + req.details = req_dict.get('details') + return req + + +class Pod(PodCreateRequest): + """ describes a POD platform """ + def __init__(self, name='', mode='', details='', _id='', create_date=''): + super(Pod, self).__init__(name, mode, details) + self._id = _id + self.creation_date = create_date + + @staticmethod + def pod_from_dict(pod_dict): + if pod_dict is None: + return None + + p = Pod() + p._id = pod_dict.get('_id') + p.creation_date = str(pod_dict.get('creation_date')) + p.name = pod_dict.get('name') + p.mode = pod_dict.get('mode') + p.details = pod_dict.get('details') + return p + + def format(self): + f = super(Pod, self).format() + f['creation_date'] = str(self.creation_date) + return f + + def format_http(self): + f = self.format() + f['_id'] = str(self._id) + return f + + +class PodCreateResponse(object): + def __init__(self, pod=None, meta=None): + self.pod = pod + self.meta = meta + + @staticmethod + def from_dict(res_dict): + if res_dict is None: + return None + + res = PodCreateResponse() + res.pod = Pod.pod_from_dict(res_dict.get('pod')) + res.meta = MetaCreateResponse.from_dict(res_dict.get('meta')) + return res + + +class PodGetResponse(PodCreateRequest): + def __init__(self, name='', mode='', details='', create_date=''): + self.creation_date = create_date + super(PodGetResponse, self).__init__(name, mode, details) + + @staticmethod + def from_dict(req_dict): + if req_dict is None: + return None + + res = PodGetResponse() + res.creation_date = str(req_dict.get('creation_date')) + res.name = req_dict.get('name') + res.mode = req_dict.get('mode') + res.details = req_dict.get('details') + return res + + +class PodsGetResponse(object): + def __init__(self, pods=[], meta=None): + self.pods = pods + self.meta = meta + + @staticmethod + def from_dict(res_dict): + if res_dict is None: + return None + + res = PodsGetResponse() + for pod in res_dict.get('pods'): + res.pods.append(PodGetResponse.from_dict(pod)) + res.meta = MetaGetResponse.from_dict(res_dict.get('meta')) + return res diff --git a/utils/test/result_collection_api/run_test.sh b/utils/test/result_collection_api/run_test.sh new file mode 100755 index 000000000..6006fcf8b --- /dev/null +++ b/utils/test/result_collection_api/run_test.sh @@ -0,0 +1,10 @@ +#! /bin/bash + +# Before run this script, make sure that testtools and discover +# had been installed in your env +# or else using pip to install them as follows: +# pip install testtools, discover + +find . -type f -name "*.pyc" -delete +testrargs="discover ./tests/unit" +python -m testtools.run $testrargs
\ No newline at end of file diff --git a/utils/test/result_collection_api/tests/__init__.py b/utils/test/result_collection_api/tests/__init__.py new file mode 100644 index 000000000..3ed9fd0f3 --- /dev/null +++ b/utils/test/result_collection_api/tests/__init__.py @@ -0,0 +1 @@ +__author__ = 'root' diff --git a/utils/test/result_collection_api/tests/unit/__init__.py b/utils/test/result_collection_api/tests/unit/__init__.py new file mode 100644 index 000000000..3ed9fd0f3 --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/__init__.py @@ -0,0 +1 @@ +__author__ = 'root' diff --git a/utils/test/result_collection_api/tests/unit/fake_pymongo.py b/utils/test/result_collection_api/tests/unit/fake_pymongo.py new file mode 100644 index 000000000..e5ded376e --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/fake_pymongo.py @@ -0,0 +1,132 @@ +from bson.objectid import ObjectId +from concurrent.futures import ThreadPoolExecutor + +__author__ = 'serena' + + +class MemCursor(object): + def __init__(self, collection): + self.collection = collection + self.count = len(self.collection) + + def _is_next_exist(self): + return self.count != 0 + + @property + def fetch_next(self): + with ThreadPoolExecutor(max_workers=2) as executor: + result = executor.submit(self._is_next_exist) + return result + + def next_object(self): + self.count -= 1 + return self.collection.pop() + + +class MemDb(object): + + def __init__(self): + self.contents = [] + pass + + def _find_one(self, spec_or_id=None, *args): + if spec_or_id is not None and not isinstance(spec_or_id, dict): + spec_or_id = {"_id": spec_or_id} + cursor = self._find(spec_or_id, *args) + for result in cursor: + return result + return None + + def find_one(self, spec_or_id=None, *args): + with ThreadPoolExecutor(max_workers=2) as executor: + result = executor.submit(self._find_one, spec_or_id, *args) + return result + + def _insert(self, doc_or_docs): + + docs = doc_or_docs + return_one = False + if isinstance(docs, dict): + return_one = True + docs = [docs] + + ids = [] + for doc in docs: + if '_id' not in doc: + doc['_id'] = ObjectId() + if not self._find_one(doc['_id']): + ids.append(doc['_id']) + self.contents.append(doc_or_docs) + + if len(ids) == 0: + return None + if return_one: + return ids[0] + else: + return ids + + def insert(self, doc_or_docs): + with ThreadPoolExecutor(max_workers=2) as executor: + result = executor.submit(self._insert, doc_or_docs) + return result + + @staticmethod + def _in(content, *args): + for arg in args: + for k, v in arg.iteritems(): + if content.get(k, None) != v: + return False + + return True + + def _find(self, *args): + res = [] + for content in self.contents: + if self._in(content, *args): + res.append(content) + + return res + + def find(self, *args): + return MemCursor(self._find(*args)) + + def _update(self, spec, document): + updated = False + for index in range(len(self.contents)): + content = self.contents[index] + if self._in(content, spec): + for k, v in document.iteritems(): + updated = True + content[k] = v + self.contents[index] = content + return updated + + def update(self, spec, document): + with ThreadPoolExecutor(max_workers=2) as executor: + result = executor.submit(self._update, spec, document) + return result + + def _remove(self, spec_or_id=None): + if spec_or_id is None: + self.contents = [] + if not isinstance(spec_or_id, dict): + spec_or_id = {'_id': spec_or_id} + for index in range(len(self.contents)): + content = self.contents[index] + if self._in(content, spec_or_id): + del self.contents[index] + return True + return False + + def remove(self, spec_or_id=None): + with ThreadPoolExecutor(max_workers=2) as executor: + result = executor.submit(self._remove, spec_or_id) + return result + + def clear(self): + self._remove() + +pod = MemDb() +test_projects = MemDb() +test_cases = MemDb() +test_results = MemDb() diff --git a/utils/test/result_collection_api/tests/unit/test_base.py b/utils/test/result_collection_api/tests/unit/test_base.py new file mode 100644 index 000000000..98190fb94 --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/test_base.py @@ -0,0 +1,54 @@ +import json +from tornado.web import Application +from tornado.testing import AsyncHTTPTestCase + +from resources.handlers import VersionHandler, PodHandler, \ + TestProjectHandler, TestCasesHandler, TestResultsHandler, DashboardHandler +import fake_pymongo + + +class TestBase(AsyncHTTPTestCase): + headers = {'Content-Type': 'application/json; charset=UTF-8'} + + def setUp(self): + self.addCleanup(self._clear) + super(TestBase, self).setUp() + + def get_app(self): + return Application( + [ + (r"/version", VersionHandler), + (r"/pods", PodHandler), + (r"/pods/([^/]+)", PodHandler), + (r"/test_projects", TestProjectHandler), + (r"/test_projects/([^/]+)", TestProjectHandler), + (r"/test_projects/([^/]+)/cases", TestCasesHandler), + (r"/test_projects/([^/]+)/cases/([^/]+)", TestCasesHandler), + (r"/results", TestResultsHandler), + (r"/results([^/]*)", TestResultsHandler), + (r"/results/([^/]*)", TestResultsHandler), + (r"/dashboard", DashboardHandler), + (r"/dashboard([^/]*)", DashboardHandler), + (r"/dashboard/([^/]*)", DashboardHandler), + ], + db=fake_pymongo, + debug=True, + ) + + def create(self, uri, body=None): + return self.fetch(uri, + method='POST', + body=json.dumps(body), + headers=self.headers) + + def get(self, uri): + return self.fetch(uri, + method='GET', + headers=self.headers) + + @staticmethod + def _clear(): + fake_pymongo.pod.clear() + fake_pymongo.test_projects.clear() + fake_pymongo.test_cases.clear() + fake_pymongo.test_results.clear() diff --git a/utils/test/result_collection_api/tests/unit/test_fake_pymongo.py b/utils/test/result_collection_api/tests/unit/test_fake_pymongo.py new file mode 100644 index 000000000..5ddbf28d9 --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/test_fake_pymongo.py @@ -0,0 +1,52 @@ +import unittest +from tornado.web import Application +from tornado import gen +from tornado.testing import AsyncHTTPTestCase, gen_test + +import fake_pymongo + + +class MyTest(AsyncHTTPTestCase): + def setUp(self): + super(MyTest, self).setUp() + self.db = fake_pymongo + self.io_loop.run_sync(self.fixture_setup) + + def get_app(self): + return Application() + + @gen.coroutine + def fixture_setup(self): + self.test1 = {'_id': '1', 'name': 'test1'} + self.test2 = {'name': 'test2'} + yield self.db.pod.insert({'_id': '1', 'name': 'test1'}) + yield self.db.pod.insert({'name': 'test2'}) + + @gen_test + def test_find_one(self): + user = yield self.db.pod.find_one({'name': 'test1'}) + self.assertEqual(user, self.test1) + + @gen_test + def test_find(self): + cursor = self.db.pod.find() + names = [] + while (yield cursor.fetch_next): + ob = cursor.next_object() + names.append(ob.get('name')) + self.assertItemsEqual(names, ['test1', 'test2']) + + @gen_test + def test_update(self): + yield self.db.pod.update({'_id': '1'}, {'name': 'new_test1'}) + user = yield self.db.pod.find_one({'_id': '1'}) + self.assertEqual(user.get('name', None), 'new_test1') + + @gen_test + def test_remove(self): + yield self.db.pod.remove({'_id': '1'}) + user = yield self.db.pod.find_one({'_id': '1'}) + self.assertIsNone(user) + +if __name__ == '__main__': + unittest.main() diff --git a/utils/test/result_collection_api/tests/unit/test_pod.py b/utils/test/result_collection_api/tests/unit/test_pod.py new file mode 100644 index 000000000..5a3d485ab --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/test_pod.py @@ -0,0 +1,86 @@ +import unittest +import json + +from test_base import TestBase +from resources.pod_models import PodCreateRequest, \ + PodCreateResponse, PodsGetResponse +from common.constants import HTTP_OK, HTTP_BAD_REQUEST, HTTP_FORBIDDEN + + +class TestPodCreate(TestBase): + req = PodCreateRequest(name='zte-1', mode='alive', details='zte pod 1') + + def test_withoutBody(self): + res = self.create('/pods', body=None) + self.assertEqual(res.code, HTTP_BAD_REQUEST) + + def test_success(self): + res = self.create('/pods', body=self.req.format()) + self.assertEqual(res.code, HTTP_OK) + res_body = PodCreateResponse.from_dict(json.loads(res.body)) + self._assertMeta(res_body.meta, True) + self._assertBody(res_body.pod) + + def test_alreadyExist(self): + self.create('/pods', body=self.req.format()) + res = self.create('/pods', body=self.req.format()) + self.assertEqual(res.code, HTTP_FORBIDDEN) + self.assertIn('already exists', res.body) + + def _assertMeta(self, meta, success): + self.assertEqual(meta.success, success) + if success: + self.assertEqual(meta.uri, '/pods/{}'.format(self.req.name)) + + def _assertBody(self, res): + self.assertEqual(res.name, self.req.name) + self.assertEqual(res.mode, self.req.mode) + self.assertEqual(res.details, self.req.details) + self.assertIsNotNone(res.creation_date) + self.assertIsNotNone(res._id) + + +class TestPodGet(TestBase): + def test_notExist(self): + res = self.get('/pods/notExist') + body = PodsGetResponse.from_dict(json.loads(res.body)) + self._assertMeta(body.meta, 0) + + def test_getOne(self): + self.create('/pods', body=TestPodCreate.req.format()) + res = self.get('/pods/{}'.format(TestPodCreate.req.name)) + body = PodsGetResponse.from_dict(json.loads(res.body)) + self._assertMeta(body.meta, 1) + self._assertBody(TestPodCreate.req, body.pods[0]) + + def test_list(self): + req = PodCreateRequest(name='zte-2', mode='alive', details='zte pod 2') + self.create('/pods', body=TestPodCreate.req.format()) + self.create('/pods', body=req.format()) + res = self.get('/pods') + body = PodsGetResponse.from_dict(json.loads(res.body)) + self._assertMeta(body.meta, 2) + for pod in body.pods: + if req.name == pod.name: + self._assertBody(req, pod) + else: + self._assertBody(TestPodCreate.req, pod) + + def _assertMeta(self, meta, total): + def check_success(): + if total is 0: + return False + else: + return True + self.assertEqual(meta.total, total) + self.assertEqual(meta.success, check_success()) + + def _assertBody(self, req, res): + self.assertEqual(res.name, req.name) + self.assertEqual(res.mode, req.mode) + self.assertEqual(res.details, req.details) + self.assertIsNotNone(res.creation_date) + + +if __name__ == '__main__': + unittest.main() diff --git a/utils/test/result_collection_api/tests/unit/test_version.py b/utils/test/result_collection_api/tests/unit/test_version.py new file mode 100644 index 000000000..918f2f052 --- /dev/null +++ b/utils/test/result_collection_api/tests/unit/test_version.py @@ -0,0 +1,14 @@ +import unittest + +from test_base import TestBase + +__author__ = 'serena' + + +class TestVersion(TestBase): + def test_get_version(self): + response = self.fetch('/version') + self.assertEqual(response.code, 200) + +if __name__ == '__main__': + unittest.main() |