diff options
49 files changed, 407 insertions, 219 deletions
diff --git a/jjb/apex/apex-unit-test.sh b/jjb/apex/apex-unit-test.sh new file mode 100755 index 000000000..5c4341741 --- /dev/null +++ b/jjb/apex/apex-unit-test.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -o errexit +set -o nounset +set -o pipefail +# log info to console +echo "Starting unit tests for Apex..." +echo "---------------------------------------------------------------------------------------" +echo + + +pushd ci/ > /dev/null +sudo CONFIG="${WORKSPACE}/build" LIB="${WORKSPACE}/lib" ./clean.sh +./test.sh +popd + +echo "--------------------------------------------------------" +echo "Unit Tests Done!" diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index efd8a4757..6c14a8107 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -127,6 +127,7 @@ - 'apex-verify-{stream2}' builders: + - 'apex-unit-test' - 'apex-build' - trigger-builds: - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream2}' @@ -227,6 +228,7 @@ max-total: 10 builders: + - 'apex-unit-test' - 'apex-build' - trigger-builds: - project: 'apex-deploy-virtual-os-nosdn-nofeature-ha-{stream1}' @@ -787,6 +789,12 @@ # builder macros ######################## - builder: + name: 'apex-unit-test' + builders: + - shell: + !include-raw: ./apex-unit-test.sh + +- builder: name: 'apex-build' builders: - shell: diff --git a/jjb/armband/armband-project-jobs.yml b/jjb/armband/armband-project-jobs.yml index b40949d27..aa089e0d5 100644 --- a/jjb/armband/armband-project-jobs.yml +++ b/jjb/armband/armband-project-jobs.yml @@ -27,7 +27,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/availability/availability.yml b/jjb/availability/availability.yml index a320ff732..0d887e760 100644 --- a/jjb/availability/availability.yml +++ b/jjb/availability/availability.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/bottlenecks/bottlenecks-project-jobs.yml b/jjb/bottlenecks/bottlenecks-project-jobs.yml index 7dbaeae6b..a28e2a407 100644 --- a/jjb/bottlenecks/bottlenecks-project-jobs.yml +++ b/jjb/bottlenecks/bottlenecks-project-jobs.yml @@ -40,7 +40,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: @@ -79,7 +79,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/conductor/conductor.yml b/jjb/conductor/conductor.yml index b2c4b1f52..247f4f268 100644 --- a/jjb/conductor/conductor.yml +++ b/jjb/conductor/conductor.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/copper/copper.yml b/jjb/copper/copper.yml index 1b16864b8..8aad3f26b 100644 --- a/jjb/copper/copper.yml +++ b/jjb/copper/copper.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/doctor/doctor.yml b/jjb/doctor/doctor.yml index b2cbb0242..cf9f6430b 100644 --- a/jjb/doctor/doctor.yml +++ b/jjb/doctor/doctor.yml @@ -22,7 +22,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/dpacc/dpacc.yml b/jjb/dpacc/dpacc.yml index 0258c23fd..9d788ba0b 100644 --- a/jjb/dpacc/dpacc.yml +++ b/jjb/dpacc/dpacc.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/fastpathmetrics/fastpathmetrics.yml b/jjb/fastpathmetrics/fastpathmetrics.yml index e8aca182b..db06afca4 100644 --- a/jjb/fastpathmetrics/fastpathmetrics.yml +++ b/jjb/fastpathmetrics/fastpathmetrics.yml @@ -16,19 +16,23 @@ - master: branch: '{stream}' gs-pathname: '' + disabled: false - brahmaputra: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' + branch: '{stream}' + gs-pathname: '' + disabled: true - job-template: name: 'fastpathmetrics-verify-{stream}' + disabled: '{obj:disabled}' + parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: @@ -70,6 +74,8 @@ project-type: freestyle + disabled: '{obj:disabled}' + concurrent: true properties: @@ -83,7 +89,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: @@ -119,6 +125,8 @@ project-type: freestyle + disabled: '{obj:disabled}' + concurrent: true properties: @@ -132,7 +140,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/fuel/fuel-build.sh b/jjb/fuel/fuel-build.sh index a32e5323a..662a1f46e 100755 --- a/jjb/fuel/fuel-build.sh +++ b/jjb/fuel/fuel-build.sh @@ -14,7 +14,7 @@ set -o pipefail cd $WORKSPACE # remove the expired items from cache -./ci/clean_cache.sh $CACHE_DIRECTORY +test -f $WORKSPACE/ci/clean_cache.sh && $WORKSPACE/ci/clean_cache.sh $CACHE_DIRECTORY LATEST_ISO_PROPERTIES=$WORKSPACE/latest.iso.properties if [[ "$JOB_NAME" =~ "daily" ]]; then diff --git a/jjb/fuel/fuel-ci-jobs.yml b/jjb/fuel/fuel-ci-jobs.yml index bd51dc258..4b269909b 100644 --- a/jjb/fuel/fuel-ci-jobs.yml +++ b/jjb/fuel/fuel-ci-jobs.yml @@ -37,11 +37,6 @@ - virtual: slave-label: fuel-virtual <<: *brahmaputra - -# just in case if things go wrong - - lf-pod2: - slave-label: '{pod}' - <<: *master #-------------------------------- # None-CI PODs #-------------------------------- @@ -59,12 +54,14 @@ auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-odl_l3-nofeature-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - - 'os-onos-nofeature-ha': + - 'os-onos-sfc-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - - 'os-odl_l2-bgpvpn-ha': + - 'os-onos-nofeature-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-odl_l2-sfc-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' + - 'os-odl_l2-bgpvpn-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-kvm-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-ovs-ha': @@ -227,26 +224,30 @@ - trigger: name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '' + - timed: '0 19 * * *' - trigger: name: 'fuel-os-odl_l2-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '' + - timed: '0 0 * * *' - trigger: name: 'fuel-os-odl_l3-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '' + - timed: '0 5 * * *' - trigger: - name: 'fuel-os-onos-nofeature-ha-baremetal-daily-master-trigger' + name: 'fuel-os-onos-sfc-ha-baremetal-daily-master-trigger' triggers: - - timed: '' + - timed: '0 10 * * *' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-baremetal-daily-master-trigger' + name: 'fuel-os-onos-nofeature-ha-baremetal-daily-master-trigger' triggers: - timed: '' - trigger: name: 'fuel-os-odl_l2-sfc-ha-baremetal-daily-master-trigger' triggers: + - timed: '0 15 * * *' +- trigger: + name: 'fuel-os-odl_l2-bgpvpn-ha-baremetal-daily-master-trigger' + triggers: - timed: '' - trigger: name: 'fuel-os-nosdn-kvm-ha-baremetal-daily-master-trigger' @@ -261,45 +262,6 @@ triggers: - timed: '' #----------------------------------------------- -# Triggers for job running on lf-pod2 against master branch -#----------------------------------------------- -- trigger: - name: 'fuel-os-nosdn-nofeature-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl_l2-nofeature-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl_l3-nofeature-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl_l2-sfc-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-ovs-ha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-noha-lf-pod2-daily-master-trigger' - triggers: - - timed: '' -#----------------------------------------------- # Triggers for job running on fuel-virtual against master branch #----------------------------------------------- - trigger: @@ -315,6 +277,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-onos-sfc-ha-virtual-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-onos-nofeature-ha-virtual-daily-master-trigger' triggers: - timed: '' @@ -354,6 +320,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-onos-sfc-ha-zte-pod1-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-onos-nofeature-ha-zte-pod1-daily-master-trigger' triggers: - timed: '' diff --git a/jjb/functest/functest-project-jobs.yml b/jjb/functest/functest-project-jobs.yml index 93a359b8c..7f86281fc 100644 --- a/jjb/functest/functest-project-jobs.yml +++ b/jjb/functest/functest-project-jobs.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/functest/set-functest-env.sh b/jjb/functest/set-functest-env.sh index b3be3abe1..aae6f768a 100755 --- a/jjb/functest/set-functest-env.sh +++ b/jjb/functest/set-functest-env.sh @@ -17,6 +17,9 @@ if [[ ${INSTALLER_TYPE} == 'apex' ]]; then fi INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk {'print $1'}) sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa" + sudo scp root@${INSTALLER_IP}:/home/stack/stackrc . + stackrc="-v ./stackrc:/home/opnfv/functest/conf/stackrc" + if sudo iptables -C FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable 2> ${redirect}; then sudo iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable fi @@ -45,7 +48,7 @@ test -f ${HOME}/opnfv/functest/custom/params_${DOCKER_TAG} && custom_params=$(ca echo "Functest: Pulling image opnfv/functest:${DOCKER_TAG}" docker pull opnfv/functest:$DOCKER_TAG >/dev/null -cmd="sudo docker run --privileged=true -id ${envs} ${labconfig} ${sshkey} ${res_volume} ${custom_params} opnfv/functest:${DOCKER_TAG} /bin/bash" +cmd="sudo docker run --privileged=true -id ${envs} ${labconfig} ${sshkey} ${res_volume} ${custom_params} ${stackrc} opnfv/functest:${DOCKER_TAG} /bin/bash" echo "Functest: Running docker run command: ${cmd}" ${cmd} >${redirect} sleep 5 diff --git a/jjb/ipv6/ipv6.yml b/jjb/ipv6/ipv6.yml index 67bc7885e..5b9691257 100644 --- a/jjb/ipv6/ipv6.yml +++ b/jjb/ipv6/ipv6.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/joid/joid-ci-jobs.yml b/jjb/joid/joid-ci-jobs.yml index b13b51fec..f6f12298a 100644 --- a/jjb/joid/joid-ci-jobs.yml +++ b/jjb/joid/joid-ci-jobs.yml @@ -57,6 +57,10 @@ auto-trigger-name: 'daily-trigger-disabled' - 'os-nosdn-nofeature-ha': auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-lxd-ha': + auto-trigger-name: 'daily-trigger-disabled' + - 'os-nosdn-lxd-noha': + auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' - 'os-odl_l2-nofeature-ha': auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' - 'os-onos-nofeature-ha': @@ -308,3 +312,75 @@ name: 'joid-os-onos-nofeature-ha-juniper-pod1-brahmaputra-trigger' triggers: - timed: '' + +# os-nosdn-lxd-noha trigger - branch: master +- trigger: + name: 'joid-os-nosdn-lxd-noha-baremetal-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-orange-pod2-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-juniper-pod1-master-trigger' + triggers: + - timed: '' + +# os-nosdn-lxd-noha trigger - branch: stable/brahmaputra +- trigger: + name: 'joid-os-nosdn-lxd-noha-baremetal-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-virtual-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-orange-pod2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-noha-juniper-pod1-brahmaputra-trigger' + triggers: + - timed: '' + +# os-nosdn-lxd-ha trigger - branch: master +- trigger: + name: 'joid-os-nosdn-lxd-ha-baremetal-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-orange-pod2-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-juniper-pod1-master-trigger' + triggers: + - timed: '' + +# os-nosdn-lxd-ha trigger - branch: stable/brahmaputra +- trigger: + name: 'joid-os-nosdn-lxd-ha-baremetal-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-virtual-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-orange-pod2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-lxd-ha-juniper-pod1-brahmaputra-trigger' + triggers: + - timed: '' diff --git a/jjb/joid/joid-deploy.sh b/jjb/joid/joid-deploy.sh index bd2597320..37b0c0dc3 100644 --- a/jjb/joid/joid-deploy.sh +++ b/jjb/joid/joid-deploy.sh @@ -140,9 +140,9 @@ sed -i -r -- "s/^(\s+osd-reformat: )'no'/\1'$CEPH_REFORMAT'/" $SRCBUNDLE ## echo "------ Deploy with juju ------" -echo "Execute: ./deploy.sh -t $HA_MODE -o $OS_RELEASE -s $SDN_CONTROLLER -l $POD_NAME -d $UBUNTU_DISTRO" +echo "Execute: ./deploy.sh -t $HA_MODE -o $OS_RELEASE -s $SDN_CONTROLLER -l $POD_NAME -d $UBUNTU_DISTRO -f $NFV_FEATURES" -./deploy.sh -t $HA_MODE -o $OS_RELEASE -s $SDN_CONTROLLER -l $POD_NAME -d $UBUNTU_DISTRO +./deploy.sh -t $HA_MODE -o $OS_RELEASE -s $SDN_CONTROLLER -l $POD_NAME -d $UBUNTU_DISTRO -f $NFV_FEATURES exit_on_error $? "Main deploy FAILED" ## diff --git a/jjb/joid/joid-project-jobs.yml b/jjb/joid/joid-project-jobs.yml index b314da1fa..d5a206bf9 100644 --- a/jjb/joid/joid-project-jobs.yml +++ b/jjb/joid/joid-project-jobs.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/octopus/octopus.yml b/jjb/octopus/octopus.yml index cceda50aa..1cb71cc69 100644 --- a/jjb/octopus/octopus.yml +++ b/jjb/octopus/octopus.yml @@ -25,7 +25,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/onosfw/onosfw.yml b/jjb/onosfw/onosfw.yml index 7dc0241f9..0335b71b2 100644 --- a/jjb/onosfw/onosfw.yml +++ b/jjb/onosfw/onosfw.yml @@ -29,7 +29,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: @@ -68,7 +68,7 @@ parameters: - project-parameter: project: '{project}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - git-scm: @@ -91,7 +91,7 @@ parameters: - project-parameter: project: '{project}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' - string: name: GS_URL default: '$GS_BASE{gs-pathname}' diff --git a/jjb/opnfv/installer-params.yml b/jjb/opnfv/installer-params.yml index 98a15de79..f95d79f93 100644 --- a/jjb/opnfv/installer-params.yml +++ b/jjb/opnfv/installer-params.yml @@ -87,7 +87,7 @@ description: "Reinstall MAAS and Bootstrap before deploy [true/false]" - string: name: UBUNTU_DISTRO - default: 'trusty' + default: 'xenial' description: "Ubuntu distribution to use for Openstack (trusty|xenial)" - string: name: CPU_ARCHITECTURE diff --git a/jjb/opnfv/slave-params.yml b/jjb/opnfv/slave-params.yml index ee749141f..da0808b76 100644 --- a/jjb/opnfv/slave-params.yml +++ b/jjb/opnfv/slave-params.yml @@ -401,68 +401,6 @@ name: GIT_BASE default: https://gerrit.opnfv.org/gerrit/$PROJECT description: 'Git URL to use on this Jenkins Slave' - -- parameter: - name: 'opnfv-build-defaults' - parameters: - - label: - name: SLAVE_LABEL - default: 'opnfv-build' - description: 'Slave label on Jenkins' - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: 'Git URL to use on this Jenkins Slave' - - string: - name: BUILD_DIRECTORY - default: $WORKSPACE/build_output - description: "Directory where the build artifact will be located upon the completion of the build." - -- parameter: - name: 'intel-build1-defaults' - parameters: - - node: - name: SLAVE_NAME - description: 'Slave name on Jenkins' - allowed-slaves: - - intel-build1 - default-slaves: - - intel-build1 - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: 'Git URL to use on this Jenkins Slave' - -- parameter: - name: 'intel-build2-defaults' - parameters: - - node: - name: SLAVE_NAME - description: 'Slave name on Jenkins' - allowed-slaves: - - intel-build2 - default-slaves: - - intel-build2 - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: 'Git URL to use on this Jenkins Slave' - -- parameter: - name: 'intel-build3-defaults' - parameters: - - node: - name: SLAVE_NAME - description: 'Slave name on Jenkins' - allowed-slaves: - - intel-build3 - default-slaves: - - intel-build3 - - string: - name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - description: 'Git URL to use on this Jenkins Slave' - - parameter: name: 'zte-pod1-defaults' parameters: @@ -683,3 +621,32 @@ name: LAB_CONFIG_URL default: ssh://git@git.enea.com/pharos/lab-config description: 'Base URI to the configuration directory' +- parameter: + name: 'opnfv-build-centos-defaults' + parameters: + - label: + name: SLAVE_LABEL + default: 'opnfv-build-centos' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: BUILD_DIRECTORY + default: $WORKSPACE/build_output + description: "Directory where the build artifact will be located upon the completion of the build." +- parameter: + name: 'opnfv-build-ubuntu-defaults' + parameters: + - label: + name: SLAVE_LABEL + default: 'opnfv-build-ubuntu' + description: 'Slave label on Jenkins' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: BUILD_DIRECTORY + default: $WORKSPACE/build_output + description: "Directory where the build artifact will be located upon the completion of the build." diff --git a/jjb/ovsnfv/ovsnfv.yml b/jjb/ovsnfv/ovsnfv.yml index dbe0a25fa..ec5761b74 100644 --- a/jjb/ovsnfv/ovsnfv.yml +++ b/jjb/ovsnfv/ovsnfv.yml @@ -12,9 +12,11 @@ - master: branch: '{stream}' gs-pathname: '' + disabled: false - brahmaputra: branch: 'stable/{stream}' gs-pathname: '/{stream}' + disabled: true - job-template: name: 'ovsnfv-verify-{stream}' @@ -24,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'intel-build2-defaults' + - 'opnfv-build-centos-defaults' - string: name: GS_URL default: '$GS_BASE{gs-pathname}' @@ -71,7 +73,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'intel-build2-defaults' + - 'opnfv-build-centos-defaults' - string: name: GS_URL default: '$GS_BASE{gs-pathname}' @@ -112,10 +114,12 @@ - job-template: name: 'ovsnfv-daily-{stream}' + disabled: '{obj:disabled}' + parameters: - project-parameter: project: '{project}' - - 'intel-build2-defaults' + - 'opnfv-build-centos-defaults' - string: name: GS_URL default: '$GS_BASE{gs-pathname}' diff --git a/jjb/parser/parser.yml b/jjb/parser/parser.yml index 01f51aa68..b8a40cc93 100644 --- a/jjb/parser/parser.yml +++ b/jjb/parser/parser.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/pharos/pharos.yml b/jjb/pharos/pharos.yml index 3bef22578..98d71286c 100644 --- a/jjb/pharos/pharos.yml +++ b/jjb/pharos/pharos.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/prediction/prediction.yml b/jjb/prediction/prediction.yml index f8fdceb81..b6471bf9f 100644 --- a/jjb/prediction/prediction.yml +++ b/jjb/prediction/prediction.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/promise/promise.yml b/jjb/promise/promise.yml index 7999fb5ce..97a8b3eb3 100644 --- a/jjb/promise/promise.yml +++ b/jjb/promise/promise.yml @@ -26,7 +26,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/qtip/qtip-project-jobs.yml b/jjb/qtip/qtip-project-jobs.yml index c77bac722..75f75116a 100644 --- a/jjb/qtip/qtip-project-jobs.yml +++ b/jjb/qtip/qtip-project-jobs.yml @@ -23,7 +23,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/jjb/storperf/storperf.yml b/jjb/storperf/storperf.yml index 3b31badfb..fb70df751 100644 --- a/jjb/storperf/storperf.yml +++ b/jjb/storperf/storperf.yml @@ -19,7 +19,7 @@ - job-template: name: 'storperf-verify-{stream}' - node: opnfv-build + node: opnfv-build-ubuntu parameters: - project-parameter: @@ -82,11 +82,7 @@ - job-template: name: 'storperf-merge-{stream}' - # builder-merge job to run JJB update - # - # This job's purpose is to update all the JJB - - node: opnfv-build + node: opnfv-build-ubuntu parameters: - project-parameter: @@ -148,7 +144,7 @@ # Required Variables: # stream: branch with - in place of / (eg. stable) # branch: branch (eg. stable) - node: opnfv-build + node: opnfv-build-ubuntu disabled: true diff --git a/jjb/vswitchperf/vswitchperf.yml b/jjb/vswitchperf/vswitchperf.yml index fe6ea49c6..0cf7f9786 100644 --- a/jjb/vswitchperf/vswitchperf.yml +++ b/jjb/vswitchperf/vswitchperf.yml @@ -65,7 +65,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: @@ -122,7 +122,7 @@ project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'opnfv-build-defaults' + - 'opnfv-build-ubuntu-defaults' scm: - gerrit-trigger-scm: diff --git a/utils/fetch_os_creds.sh b/utils/fetch_os_creds.sh index 8f5aa0800..a8eee3dd0 100755 --- a/utils/fetch_os_creds.sh +++ b/utils/fetch_os_creds.sh @@ -82,7 +82,7 @@ if [ "$installer_type" == "fuel" ]; then # Check if controller is alive (online='True') controller_ip=$(sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \ - 'fuel node | grep controller | grep "True\| 1" | awk "{print \$10}" | tail -1') &> /dev/null + 'fuel node | grep controller | grep "True\| 1" | awk -F\| "{print \$5}" | tail -1') &> /dev/null if [ -z $controller_ip ]; then error "The controller $controller_ip is not up. Please check that the POD is correctly deployed." diff --git a/utils/test/dashboard/js/opnfv_dashboard_tests_conf.js b/utils/test/dashboard/js/opnfv_dashboard_tests_conf.js index 6e230d8e4..870357c6d 100644 --- a/utils/test/dashboard/js/opnfv_dashboard_tests_conf.js +++ b/utils/test/dashboard/js/opnfv_dashboard_tests_conf.js @@ -31,21 +31,21 @@ opnfv_dashboard_installers_scenarios['joid']= var opnfv_dashboard_testcases = {
'VIM': {
- 'Tempest': ['Tempest duration',
+ 'vping_ssh': ['vPing duration'],
+ 'vping_userdata': ['vPing_userdata duration'],
+ 'tempest': ['Tempest duration',
'Tempest nb tests/nb failures'],
- 'vPing': ['vPing duration'],
- 'vPing_userdata': ['vPing_userdata duration'],
- 'Rally': ['rally duration']
+ 'rally_sanity': ['rally duration']
},
'Controller': {
- 'ODL': ['ODL nb tests/nb failures'],
- 'ONOS': ['ONOS FUNCvirNet duration ',
+ 'odl': ['ODL nb tests/nb failures'],
+ 'onos': ['ONOS FUNCvirNet duration ',
'ONOS FUNCvirNet nb tests/nb failures',
'ONOS FUNCvirNetL3 duration',
'ONOS FUNCvirNetL3 nb tests/nb failures']
},
'Features': {
- 'vIMS': ['vIMS nb tests passed/failed/skipped',
+ 'vims': ['vIMS nb tests passed/failed/skipped',
'vIMS orchestrator/VNF/test duration'],
'promise': ['Promise duration ',
'Promise nb tests/nb failures'],
diff --git a/utils/test/reporting/functest/reporting-status.py b/utils/test/reporting/functest/reporting-status.py index e6ee8d321..2ce5efbd0 100644 --- a/utils/test/reporting/functest/reporting-status.py +++ b/utils/test/reporting/functest/reporting-status.py @@ -24,7 +24,7 @@ otherTestCases = [] # init just tempest to get the list of scenarios # as all the scenarios run Tempest -tempest = tc.TestCase("Tempest", "functest", -1) +tempest = tc.TestCase("tempest_smoke_serial", "functest", -1) # Retrieve the Functest configuration to detect which tests are relevant # according to the installer, scenario diff --git a/utils/test/reporting/functest/reporting-tempest.py b/utils/test/reporting/functest/reporting-tempest.py index e9662d5c2..a065ef442 100644 --- a/utils/test/reporting/functest/reporting-tempest.py +++ b/utils/test/reporting/functest/reporting-tempest.py @@ -10,7 +10,7 @@ PERIOD = 7 print "Generate Tempest automatic reporting" for installer in installers: # we consider the Tempest results of the last PERIOD days - url = "http://testresults.opnfv.org/test/api/v1/results?case=Tempest" + url = "http://testresults.opnfv.org/test/api/v1/results?case=tempest_smoke_serial" request = Request(url + '&period=' + str(PERIOD) + '&installer=' + installer + '&version=master') diff --git a/utils/test/reporting/functest/reporting-vims.py b/utils/test/reporting/functest/reporting-vims.py index 5ba92d6c3..922c6f342 100644 --- a/utils/test/reporting/functest/reporting-vims.py +++ b/utils/test/reporting/functest/reporting-vims.py @@ -24,7 +24,7 @@ installers = ["fuel", "compass", "joid", "apex"] step_order = ["initialisation", "orchestrator", "vIMS", "sig_test"] for installer in installers: - request = Request('http://testresults.opnfv.org/test/api/v1/results?case=vIMS&installer=' + installer) + request = Request('http://testresults.opnfv.org/test/api/v1/results?case=vims&installer=' + installer) try: response = urlopen(request) @@ -34,7 +34,6 @@ for installer in installers: print 'No kittez. Got an error code:', e test_results = results['results'] - test_results.reverse() scenario_results = {} for r in test_results: diff --git a/utils/test/reporting/functest/reportingConf.py b/utils/test/reporting/functest/reportingConf.py index e390a18d2..649246d64 100644 --- a/utils/test/reporting/functest/reportingConf.py +++ b/utils/test/reporting/functest/reportingConf.py @@ -15,3 +15,4 @@ installers = ["apex", "compass", "fuel", "joid"] versions = ["master"] PERIOD = 10 MAX_SCENARIO_CRITERIA = 18 +URL_BASE = 'http://testresults.opnfv.org/test/api/v1/results' diff --git a/utils/test/reporting/functest/reportingUtils.py b/utils/test/reporting/functest/reportingUtils.py index 7170b8398..0db570f32 100644 --- a/utils/test/reporting/functest/reportingUtils.py +++ b/utils/test/reporting/functest/reportingUtils.py @@ -19,7 +19,7 @@ def getApiResults(case, installer, scenario, version): # urllib2.install_opener(opener) # url = "http://127.0.0.1:8000/results?case=" + case + \ # "&period=30&installer=" + installer - url = ("http://testresults.opnfv.org/test/api/v1/results?case=" + case + + url = (reportingConf.URL_BASE + "?case=" + case + "&period=" + str(reportingConf.PERIOD) + "&installer=" + installer + "&scenario=" + scenario + "&version=" + version) request = Request(url) @@ -38,7 +38,7 @@ def getScenarios(case, installer, version): case = case.getName() print case - url = ("http://testresults.opnfv.org/test/api/v1/results?case=" + case + + url = (reportingConf.URL_BASE + "?case=" + case + "&period=" + str(reportingConf.PERIOD) + "&installer=" + installer + "&version=" + version) request = Request(url) diff --git a/utils/test/reporting/functest/template/index-tempest-tmpl.html b/utils/test/reporting/functest/template/index-tempest-tmpl.html index b8260ed3c..c56214346 100644 --- a/utils/test/reporting/functest/template/index-tempest-tmpl.html +++ b/utils/test/reporting/functest/template/index-tempest-tmpl.html @@ -49,7 +49,7 @@ <div class="panel-heading"> <div class="progress-bar" role="progressbar" aria-valuenow="{{result.pr_step_ok}}" aria-valuemin="0" aria-valuemax="100" style="width: {{result.pr_step_ok}}%"></div> <span class="panel-header-item"> - <h4><b>{{result.creation_date}}</b></h4> + <h4><b>{{result.start_date}}</b></h4> </span> <span class="badge panel-pod-name">{{result.pod_name}}</span> </div> diff --git a/utils/test/reporting/functest/template/index-vims-tmpl.html b/utils/test/reporting/functest/template/index-vims-tmpl.html index 8858182c1..25499dc46 100644 --- a/utils/test/reporting/functest/template/index-vims-tmpl.html +++ b/utils/test/reporting/functest/template/index-vims-tmpl.html @@ -23,7 +23,7 @@ <ul class="nav nav-justified"> <li class="active"><a href="index.html">Home</a></li> <li><a href="index-vims-fuel.html">Fuel</a></li> - <li><a href="index--vims-compass.html">Compass</a></li> + <li><a href="index-vims-compass.html">Compass</a></li> <li><a href="index-vims-joid.html">JOID</a></li> <li><a href="index-vims-apex.html">APEX</a></li> </ul> @@ -49,7 +49,7 @@ <div class="panel-heading"> <div class="progress-bar" role="progressbar" aria-valuenow="{{result.pr_step_ok}}" aria-valuemin="0" aria-valuemax="100" style="width: {{result.pr_step_ok}}%"></div> <span class="panel-header-item"> - <h4><b>{{result.creation_date}}</b></h4> + <h4><b>{{result.start_date}}</b></h4> </span> <span class="badge panel-pod-name">{{result.pod_name}}</span> </div> diff --git a/utils/test/reporting/functest/testCase.py b/utils/test/reporting/functest/testCase.py index f6ab95a05..f0e8f5995 100644 --- a/utils/test/reporting/functest/testCase.py +++ b/utils/test/reporting/functest/testCase.py @@ -86,17 +86,17 @@ class TestCase(object): # '<name in the config>':'<name in the DB>' # I know it is uggly... test_match_matrix = {'healthcheck': 'healthcheck', - 'vping_ssh': 'vPing', - 'vping_userdata': 'vPing_userdata', - 'odl': 'ODL', - 'onos': 'ONOS', - 'ovno': 'ovno', - 'tempest_smoke_serial': 'Tempest', + 'vping_ssh': 'vping_ssh', + 'vping_userdata': 'vping_userdata', + 'odl': 'odl', + 'onos': 'onos', + 'ocl': 'ocl', + 'tempest_smoke_serial': 'tempest_smoke_serial', 'tempest_full_parallel': 'tempest_full_parallel', - 'rally_sanity': 'Rally', + 'rally_sanity': 'rally_sanity', 'bgpvpn': 'bgpvpn', 'rally_full': 'rally_full', - 'vims': 'vIMS', + 'vims': 'vims', 'doctor': 'doctor-notification', 'promise': 'promise' } @@ -104,3 +104,25 @@ class TestCase(object): return test_match_matrix[self.name] except: return "unknown" + + def getTestDisplayName(self): + # Correspondance name of the test case / name in the DB + test_match_matrix = {'healthcheck': 'healthcheck', + 'vping_ssh': 'vPing (ssh)', + 'vping_userdata': 'vPing (userdata)', + 'odl': 'ODL', + 'onos': 'ONOS', + 'ocl': 'OCL', + 'tempest_smoke_serial': 'Tempest (smoke)', + 'tempest_full_parallel': 'Tempest (full)', + 'rally_sanity': 'Rally (smoke)', + 'bgpvpn': 'bgpvpn', + 'rally_full': 'Rally (full)', + 'vims': 'vIMS', + 'doctor': 'Doctor', + 'promise': 'Promise' + } + try: + return test_match_matrix[self.name] + except: + return "unknown" diff --git a/utils/test/result_collection_api/opnfv_testapi/resources/handlers.py b/utils/test/result_collection_api/opnfv_testapi/resources/handlers.py index df920c48f..873701103 100644 --- a/utils/test/result_collection_api/opnfv_testapi/resources/handlers.py +++ b/utils/test/result_collection_api/opnfv_testapi/resources/handlers.py @@ -96,8 +96,10 @@ class GenericApiHandler(RequestHandler): code, message = error(data) raise HTTPError(code, message) - data.creation_date = datetime.now() - _id = yield self._eval_db(self.table, 'insert', data.format()) + if self.table != 'results': + data.creation_date = datetime.now() + _id = yield self._eval_db(self.table, 'insert', data.format(), + check_keys=False) if 'name' in self.json_args: resource = data.name else: @@ -173,7 +175,8 @@ class GenericApiHandler(RequestHandler): edit_request.update(self._update_requests(data)) """ Updating the DB """ - yield self._eval_db(self.table, 'update', query, edit_request) + yield self._eval_db(self.table, 'update', query, edit_request, + check_keys=False) edit_request['_id'] = str(data._id) self.finish_request(edit_request) @@ -214,8 +217,8 @@ class GenericApiHandler(RequestHandler): query[key] = new return equal, query - def _eval_db(self, table, method, *args): - return eval('self.db.%s.%s(*args)' % (table, method)) + def _eval_db(self, table, method, *args, **kwargs): + return eval('self.db.%s.%s(*args, **kwargs)' % (table, method)) def _eval_db_find_one(self, query, table=None): if table is None: diff --git a/utils/test/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py b/utils/test/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py index ef9c719be..6ab98c720 100644 --- a/utils/test/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py +++ b/utils/test/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py @@ -80,11 +80,15 @@ class MemDb(object): return_one = True docs = [docs] + if check_keys: + for doc in docs: + self._check_keys(doc) + ids = [] for doc in docs: if '_id' not in doc: doc['_id'] = str(ObjectId()) - if not check_keys or not self._find_one(doc['_id']): + if not self._find_one(doc['_id']): ids.append(doc['_id']) self.contents.append(doc_or_docs) @@ -131,8 +135,12 @@ class MemDb(object): def find(self, *args): return MemCursor(self._find(*args)) - def _update(self, spec, document): + def _update(self, spec, document, check_keys=True): updated = False + + if check_keys: + self._check_keys(document) + for index in range(len(self.contents)): content = self.contents[index] if self._in(content, spec): @@ -142,8 +150,8 @@ class MemDb(object): self.contents[index] = content return updated - def update(self, spec, document): - return thread_execute(self._update, spec, document) + def update(self, spec, document, check_keys=True): + return thread_execute(self._update, spec, document, check_keys) def _remove(self, spec_or_id=None): if spec_or_id is None: @@ -163,6 +171,17 @@ class MemDb(object): def clear(self): self._remove() + def _check_keys(self, doc): + for key in doc.keys(): + print('key', key, 'value', doc.get(key)) + if '.' in key: + raise NameError('key {} must not contain .'.format(key)) + if key.startswith('$'): + raise NameError('key {} must not start with $'.format(key)) + if isinstance(doc.get(key), dict): + self._check_keys(doc.get(key)) + + pods = MemDb() projects = MemDb() testcases = MemDb() diff --git a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_fake_pymongo.py b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_fake_pymongo.py index 9bc311cf3..27382f089 100644 --- a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_fake_pymongo.py +++ b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_fake_pymongo.py @@ -53,25 +53,70 @@ class MyTest(AsyncHTTPTestCase): user = yield self.db.pods.find_one({'_id': '1'}) self.assertEqual(user.get('name', None), 'new_test1') + def test_update_dot_error(self): + self._update_assert({'_id': '1', 'name': {'1. name': 'test1'}}, + 'key 1. name must not contain .') + + def test_update_dot_no_error(self): + self._update_assert({'_id': '1', 'name': {'1. name': 'test1'}}, + None, + check_keys=False) + + def test_update_dollar_error(self): + self._update_assert({'_id': '1', 'name': {'$name': 'test1'}}, + 'key $name must not start with $') + + def test_update_dollar_no_error(self): + self._update_assert({'_id': '1', 'name': {'$name': 'test1'}}, + None, + check_keys=False) + @gen_test def test_remove(self): yield self.db.pods.remove({'_id': '1'}) user = yield self.db.pods.find_one({'_id': '1'}) self.assertIsNone(user) - @gen_test - def test_insert_check_keys(self): - yield self.db.pods.insert({'_id': '1', 'name': 'test1'}, - check_keys=False) - cursor = self.db.pods.find({'_id': '1'}) - names = [] - while (yield cursor.fetch_next): - ob = cursor.next_object() - names.append(ob.get('name')) - self.assertItemsEqual(names, ['test1', 'test1']) + def test_insert_dot_error(self): + self._insert_assert({'_id': '1', '2. name': 'test1'}, + 'key 2. name must not contain .') + + def test_insert_dot_no_error(self): + self._insert_assert({'_id': '1', '2. name': 'test1'}, + None, + check_keys=False) + + def test_insert_dollar_error(self): + self._insert_assert({'_id': '1', '$name': 'test1'}, + 'key $name must not start with $') + + def test_insert_dollar_no_error(self): + self._insert_assert({'_id': '1', '$name': 'test1'}, + None, + check_keys=False) def _clear(self): self.db.pods.clear() + def _update_assert(self, docs, error=None, **kwargs): + self._db_assert('update', error, {'_id': '1'}, docs, **kwargs) + + def _insert_assert(self, docs, error=None, **kwargs): + self._db_assert('insert', error, docs, **kwargs) + + @gen_test + def _db_assert(self, method, error, *args, **kwargs): + name_error = None + try: + yield self._eval_pods_db(method, *args, **kwargs) + except NameError as err: + name_error = err.args[0] + finally: + self.assertEqual(name_error, error) + + def _eval_pods_db(self, method, *args, **kwargs): + return eval('self.db.pods.%s(*args, **kwargs)' % method) + + if __name__ == '__main__': unittest.main() diff --git a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py index dbc4431ce..bba3b228f 100644 --- a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py +++ b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py @@ -7,6 +7,7 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## import unittest +import copy from opnfv_testapi.common.constants import HTTP_OK, HTTP_BAD_REQUEST, \ HTTP_NOT_FOUND @@ -161,6 +162,13 @@ class TestResultCreate(TestResultBase): self.assertEqual(code, HTTP_OK) self.assert_href(body) + def test_key_with_doc(self): + req = copy.deepcopy(self.req_d) + req.details = {'1.name': 'dot_name'} + (code, body) = self.create(req) + self.assertEqual(code, HTTP_OK) + self.assert_href(body) + class TestResultGet(TestResultBase): def test_getOne(self): diff --git a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_testcase.py b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_testcase.py index a145c00da..cb767844a 100644 --- a/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_testcase.py +++ b/utils/test/result_collection_api/opnfv_testapi/tests/unit/test_testcase.py @@ -7,6 +7,7 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## import unittest +import copy from test_base import TestBase from opnfv_testapi.resources.testcase_models import TestcaseCreateRequest, \ @@ -168,6 +169,13 @@ class TestCaseUpdate(TestCaseBase): self.assertEqual(_id, new_body._id) self.assert_update_body(self.req_d, new_body, self.update_e) + def test_with_dollar(self): + self.create_d() + update = copy.deepcopy(self.update_d) + update.description = {'2. change': 'dollar change'} + code, body = self.update(update, self.req_d.name) + self.assertEqual(code, HTTP_OK) + class TestCaseDelete(TestCaseBase): def test_notFound(self): diff --git a/utils/test/result_collection_api/requirements.txt b/utils/test/result_collection_api/requirements.txt index a0685a4be..e1fd9e4cc 100644 --- a/utils/test/result_collection_api/requirements.txt +++ b/utils/test/result_collection_api/requirements.txt @@ -6,3 +6,4 @@ pbr>=1.6 setuptools>=16.0 tornado>=3.1 epydoc>=0.3.1 +motor diff --git a/utils/test/result_collection_api/update/changes.py b/utils/test/result_collection_api/update/changes.py index 42ab67b22..b3e23803d 100644 --- a/utils/test/result_collection_api/update/changes.py +++ b/utils/test/result_collection_api/update/changes.py @@ -5,21 +5,43 @@ # 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 +# 09/06/2016: change for migration after refactoring +# 16/06/2016: Alignment of test name (JIRA: FUNCTEST-304) ############################################################################## collections_old2New = { - 'pod': 'pods', - 'test_projects': 'projects', - 'test_testcases': 'testcases', - 'test_results': 'results' + # 'pod': 'pods', + # 'test_projects': 'projects', + # 'test_testcases': 'testcases', + # 'test_results': 'results' } fields_old2New = { - 'test_results': [({}, {'creation_date': 'start_date'})] + # 'test_results': [({}, {'creation_date': 'start_date'})] } docs_old2New = { - 'test_results': [ - ({'criteria': 'failed'}, {'criteria': 'FAILED'}), - ({'criteria': 'passed'}, {'criteria': 'PASS'}) + # 'test_results': [ + # ({'criteria': 'failed'}, {'criteria': 'FAILED'}), + # ({'criteria': 'passed'}, {'criteria': 'PASS'}) + # ] + 'testcases': [ + ({'name': 'vPing'}, {'name': 'vping_ssh'}), + ({'name': 'Tempest'}, {'name': 'tempest_smoke_serial'}), + ({'name': 'Rally'}, {'name': 'rally_sanity'}), + ({'name': 'ODL'}, {'name': 'odl'}), + ({'name': 'vIMS'}, {'name': 'vims'}), + ({'name': 'ONOS'}, {'name': 'onos'}), + ({'name': 'vPing_userdata'}, {'name': 'vping_userdata'}), + ({'name': 'ovno'}, {'name': 'ocl'}) + ], + 'results': [ + ({'case_name': 'vPing'}, {'case_name': 'vping_ssh'}), + ({'case_name': 'Tempest'}, {'case_name': 'tempest_smoke_serial'}), + ({'case_name': 'Rally'}, {'case_name': 'rally_sanity'}), + ({'case_name': 'ODL'}, {'case_name': 'odl'}), + ({'case_name': 'vIMS'}, {'case_name': 'vims'}), + ({'case_name': 'ONOS'}, {'case_name': 'onos'}), + ({'case_name': 'vPing_userdata'}, {'case_name': 'vping_userdata'}), + ({'case_name': 'ovno'}, {'case_name': 'ocl'}) ] } diff --git a/utils/test/result_collection_api/update/restore.py b/utils/test/result_collection_api/update/restore.py index c3e06cc1c..c45a0e621 100644 --- a/utils/test/result_collection_api/update/restore.py +++ b/utils/test/result_collection_api/update/restore.py @@ -24,7 +24,7 @@ parser.add_argument('-i', '--input_dir', parser.add_argument('-d', '--db', type=str, required=False, - default=None, + default='test_results_collection', help='database name after the restore.') diff --git a/utils/test/scripts/mongo_to_elasticsearch.py b/utils/test/scripts/mongo_to_elasticsearch.py index 51b6913f7..8c36d3007 100644 --- a/utils/test/scripts/mongo_to_elasticsearch.py +++ b/utils/test/scripts/mongo_to_elasticsearch.py @@ -16,10 +16,13 @@ file_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(messag logger.addHandler(file_handler) -def _get_dicts_from_list(dict_list, keys): +def _get_dicts_from_list(testcase, dict_list, keys): dicts = [] for dictionary in dict_list: # iterate over dictionaries in input list + if not isinstance(dictionary, dict): + logger.info("Skipping non-dict details testcase [{}]".format(testcase)) + continue if keys == set(dictionary.keys()): # check the dictionary structure dicts.append(dictionary) @@ -45,9 +48,16 @@ def _get_results_from_list_of_dicts(list_of_dict_statuses, dict_indexes, expecte return test_results +def _convert_value(value): + return value if value != '' else 0 + + def _convert_duration(duration): if (isinstance(duration, str) or isinstance(duration, unicode)) and ':' in duration: hours, minutes, seconds = duration.split(":") + hours = _convert_value(hours) + minutes = _convert_value(minutes) + seconds = _convert_value(seconds) int_duration = 3600 * int(hours) + 60 * int(minutes) + float(seconds) else: int_duration = duration @@ -86,7 +96,7 @@ def modify_functest_vims(testcase): -> details.orchestrator.duration """ testcase_details = testcase['details'] - sig_test_results = _get_dicts_from_list(testcase_details['sig_test']['result'], + sig_test_results = _get_dicts_from_list(testcase, testcase_details['sig_test']['result'], {'duration', 'result', 'name', 'error'}) if len(sig_test_results) < 1: logger.info("No 'result' from 'sig_test' found in vIMS details, skipping") @@ -134,10 +144,10 @@ def modify_functest_onos(testcase): testcase_details = testcase['details'] funcvirnet_details = testcase_details['FUNCvirNet']['status'] - funcvirnet_statuses = _get_dicts_from_list(funcvirnet_details, {'Case result', 'Case name:'}) + funcvirnet_statuses = _get_dicts_from_list(testcase, funcvirnet_details, {'Case result', 'Case name:'}) funcvirnetl3_details = testcase_details['FUNCvirNetL3']['status'] - funcvirnetl3_statuses = _get_dicts_from_list(funcvirnetl3_details, {'Case result', 'Case name:'}) + funcvirnetl3_statuses = _get_dicts_from_list(testcase, funcvirnetl3_details, {'Case result', 'Case name:'}) if len(funcvirnet_statuses) < 0: logger.info("No results found in 'FUNCvirNet' part of ONOS results") @@ -186,7 +196,7 @@ def modify_functest_rally(testcase): -> details.tests -> details.success_percentage """ - summaries = _get_dicts_from_list(testcase['details'], {'summary'}) + summaries = _get_dicts_from_list(testcase, testcase['details'], {'summary'}) if len(summaries) != 1: logger.info("Found zero or more than one 'summaries' in Rally details, skipping") @@ -211,7 +221,8 @@ def modify_functest_odl(testcase): -> details.failures -> details.success_percentage? """ - test_statuses = _get_dicts_from_list(testcase['details']['details'], {'test_status', 'test_doc', 'test_name'}) + test_statuses = _get_dicts_from_list(testcase, testcase['details']['details'], + {'test_status', 'test_doc', 'test_name'}) if len(test_statuses) < 1: logger.info("No 'test_status' found in ODL details, skipping") return False @@ -354,13 +365,13 @@ def modify_mongo_entry(testcase): def publish_mongo_data(output_destination): tmp_filename = 'mongo-{}.log'.format(uuid.uuid4()) try: - subprocess.check_call(['mongoexport', '--db', 'test_results_collection', '-c', 'test_results', '--out', + subprocess.check_call(['mongoexport', '--db', 'test_results_collection', '-c', 'results', '--out', tmp_filename]) with open(tmp_filename) as fobj: for mongo_json_line in fobj: test_result = json.loads(mongo_json_line) if modify_mongo_entry(test_result): - shared_utils.publish_json(test_result, output_destination, es_user, es_passwd) + shared_utils.publish_json(test_result, es_user, es_passwd, output_destination) finally: if os.path.exists(tmp_filename): os.remove(tmp_filename) @@ -368,7 +379,7 @@ def publish_mongo_data(output_destination): def get_mongo_data(days): past_time = datetime.datetime.today() - datetime.timedelta(days=days) - mongo_json_lines = subprocess.check_output(['mongoexport', '--db', 'test_results_collection', '-c', 'test_results', + mongo_json_lines = subprocess.check_output(['mongoexport', '--db', 'test_results_collection', '-c', 'results', '--query', '{{"creation_date":{{$gt:"{}"}}}}' .format(past_time)]).splitlines() @@ -417,7 +428,7 @@ if __name__ == '__main__': help='the url of mongodb, defaults to http://localhost:8082') args = parser.parse_args() - base_elastic_url = urlparse.urljoin(args.elasticsearch_url, '/test_results/mongo2elastic') + base_elastic_url = urlparse.urljoin(args.elasticsearch_url, '/results/mongo2elastic') output_destination = args.output_destination days = args.merge_latest es_user = args.elasticsearch_username |