Merge "Add note that you can add reviewers by group"
authorAric Gardner <agardner@linuxfoundation.org>
Sun, 19 Jun 2016 14:19:18 +0000 (14:19 +0000)
committerGerrit Code Review <gerrit@172.30.200.206>
Sun, 19 Jun 2016 14:19:18 +0000 (14:19 +0000)
49 files changed:
jjb/apex/apex-unit-test.sh [new file with mode: 0755]
jjb/apex/apex.yml
jjb/armband/armband-project-jobs.yml
jjb/availability/availability.yml
jjb/bottlenecks/bottlenecks-project-jobs.yml
jjb/conductor/conductor.yml
jjb/copper/copper.yml
jjb/doctor/doctor.yml
jjb/dpacc/dpacc.yml
jjb/fastpathmetrics/fastpathmetrics.yml
jjb/fuel/fuel-build.sh
jjb/fuel/fuel-ci-jobs.yml
jjb/functest/functest-project-jobs.yml
jjb/functest/set-functest-env.sh
jjb/ipv6/ipv6.yml
jjb/joid/joid-ci-jobs.yml
jjb/joid/joid-deploy.sh
jjb/joid/joid-project-jobs.yml
jjb/octopus/octopus.yml
jjb/onosfw/onosfw.yml
jjb/opnfv/installer-params.yml
jjb/opnfv/slave-params.yml
jjb/ovsnfv/ovsnfv.yml
jjb/parser/parser.yml
jjb/pharos/pharos.yml
jjb/prediction/prediction.yml
jjb/promise/promise.yml
jjb/qtip/qtip-project-jobs.yml
jjb/storperf/storperf.yml
jjb/vswitchperf/vswitchperf.yml
utils/fetch_os_creds.sh
utils/test/dashboard/js/opnfv_dashboard_tests_conf.js
utils/test/reporting/functest/reporting-status.py
utils/test/reporting/functest/reporting-tempest.py
utils/test/reporting/functest/reporting-vims.py
utils/test/reporting/functest/reportingConf.py
utils/test/reporting/functest/reportingUtils.py
utils/test/reporting/functest/template/index-tempest-tmpl.html
utils/test/reporting/functest/template/index-vims-tmpl.html
utils/test/reporting/functest/testCase.py
utils/test/result_collection_api/opnfv_testapi/resources/handlers.py
utils/test/result_collection_api/opnfv_testapi/tests/unit/fake_pymongo.py
utils/test/result_collection_api/opnfv_testapi/tests/unit/test_fake_pymongo.py
utils/test/result_collection_api/opnfv_testapi/tests/unit/test_result.py
utils/test/result_collection_api/opnfv_testapi/tests/unit/test_testcase.py
utils/test/result_collection_api/requirements.txt
utils/test/result_collection_api/update/changes.py
utils/test/result_collection_api/update/restore.py
utils/test/scripts/mongo_to_elasticsearch.py

diff --git a/jjb/apex/apex-unit-test.sh b/jjb/apex/apex-unit-test.sh
new file mode 100755 (executable)
index 0000000..5c43417
--- /dev/null
@@ -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!"
index efd8a47..6c14a81 100644 (file)
                 - 'apex-verify-{stream2}'
 
     builders:
+        - 'apex-unit-test'
         - 'apex-build'
         - trigger-builds:
           - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream2}'
             max-total: 10
 
     builders:
+        - 'apex-unit-test'
         - 'apex-build'
         - trigger-builds:
           - project: 'apex-deploy-virtual-os-nosdn-nofeature-ha-{stream1}'
 ########################
 # builder macros
 ########################
+- builder:
+    name: 'apex-unit-test'
+    builders:
+        - shell:
+            !include-raw: ./apex-unit-test.sh
+
 - builder:
     name: 'apex-build'
     builders:
index b40949d..aa089e0 100644 (file)
@@ -27,7 +27,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index a320ff7..0d887e7 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 7dbaeae..a28e2a4 100644 (file)
@@ -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:
index b2c4b1f..247f4f2 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 1b16864..8aad3f2 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index b2cbb02..cf9f643 100644 (file)
@@ -22,7 +22,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 0258c23..9d788ba 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index e8aca18..db06afc 100644 (file)
         - 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:
 
     project-type: freestyle
 
+    disabled: '{obj:disabled}'
+
     concurrent: true
 
     properties:
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index a32e532..662a1f4 100755 (executable)
@@ -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
index bd51dc2..4b26990 100644 (file)
         - virtual:
             slave-label: fuel-virtual
             <<: *brahmaputra
-
-# just in case if things go wrong
-        - lf-pod2:
-            slave-label: '{pod}'
-            <<: *master
 #--------------------------------
 #        None-CI PODs
 #--------------------------------
             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':
 - 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:
     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:
     name: 'fuel-os-odl_l3-nofeature-ha-virtual-daily-master-trigger'
     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:
     name: 'fuel-os-odl_l3-nofeature-ha-zte-pod1-daily-master-trigger'
     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:
index 93a359b..7f86281 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index b3be3ab..aae6f76 100755 (executable)
@@ -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
index 67bc788..5b96912 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index b13b51f..f6f1229 100644 (file)
             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':
     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: ''
index bd25973..37b0c0d 100644 (file)
@@ -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"
 
 ##
index b314da1..d5a206b 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index cceda50..1cb71cc 100644 (file)
@@ -25,7 +25,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 7dc0241..0335b71 100644 (file)
@@ -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}'
index 98a15de..f95d79f 100644 (file)
@@ -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
index ee74914..da0808b 100644 (file)
             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:
             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."
index dbe0a25..ec5761b 100644 (file)
         - 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}'
 - 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}'
index 01f51aa..b8a40cc 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 3bef225..98d7128 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index f8fdceb..b6471bf 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 7999fb5..97a8b3e 100644 (file)
@@ -26,7 +26,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index c77bac7..75f7511 100644 (file)
@@ -23,7 +23,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 3b31bad..fb70df7 100644 (file)
@@ -19,7 +19,7 @@
 - job-template:
     name: 'storperf-verify-{stream}'
 
-    node: opnfv-build
+    node: opnfv-build-ubuntu
 
     parameters:
         - project-parameter:
 - 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:
     # Required Variables:
     #     stream:    branch with - in place of / (eg. stable)
     #     branch:    branch (eg. stable)
-    node: opnfv-build
+    node: opnfv-build-ubuntu
 
     disabled: true
 
index fe6ea49..0cf7f97 100644 (file)
@@ -65,7 +65,7 @@
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
             project: '{project}'
         - gerrit-parameter:
             branch: '{branch}'
-        - 'opnfv-build-defaults'
+        - 'opnfv-build-ubuntu-defaults'
 
     scm:
         - gerrit-trigger-scm:
index 8f5aa08..a8eee3d 100755 (executable)
@@ -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."
index 6e230d8..870357c 100644 (file)
@@ -31,21 +31,21 @@ opnfv_dashboard_installers_scenarios['joid']=
 \r
 var opnfv_dashboard_testcases = {\r
     'VIM': {\r
-        'Tempest': ['Tempest duration',\r
+        'vping_ssh': ['vPing duration'],\r
+        'vping_userdata': ['vPing_userdata duration'],\r
+        'tempest': ['Tempest duration',\r
                 'Tempest nb tests/nb failures'],\r
-        'vPing': ['vPing duration'],\r
-        'vPing_userdata': ['vPing_userdata duration'],\r
-        'Rally': ['rally duration']\r
+        'rally_sanity': ['rally duration']\r
     },\r
     'Controller': {\r
-        'ODL': ['ODL nb tests/nb failures'],\r
-        'ONOS': ['ONOS FUNCvirNet duration ',\r
+        'odl': ['ODL nb tests/nb failures'],\r
+        'onos': ['ONOS FUNCvirNet duration ',\r
                 'ONOS FUNCvirNet nb tests/nb failures',\r
                 'ONOS FUNCvirNetL3 duration',\r
                 'ONOS FUNCvirNetL3 nb tests/nb failures']\r
     },\r
     'Features': {\r
-        'vIMS': ['vIMS nb tests passed/failed/skipped',\r
+        'vims': ['vIMS nb tests passed/failed/skipped',\r
                 'vIMS orchestrator/VNF/test duration'],\r
         'promise': ['Promise duration ',\r
                 'Promise nb tests/nb failures'],\r
index e6ee8d3..2ce5efb 100644 (file)
@@ -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
index e9662d5..a065ef4 100644 (file)
@@ -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')
 
index 5ba92d6..922c6f3 100644 (file)
@@ -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:
index e390a18..649246d 100644 (file)
@@ -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'
index 7170b83..0db570f 100644 (file)
@@ -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)
index b8260ed..c562143 100644 (file)
@@ -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>
index 8858182..25499dc 100644 (file)
@@ -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>
index f6ab95a..f0e8f59 100644 (file)
@@ -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"
index df920c4..8737011 100644 (file)
@@ -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:
index ef9c719..6ab98c7 100644 (file)
@@ -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()
index 9bc311c..27382f0 100644 (file)
@@ -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()
index dbc4431..bba3b22 100644 (file)
@@ -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):
index a145c00..cb76784 100644 (file)
@@ -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):
index 42ab67b..b3e2380 100644 (file)
@@ -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'})
     ]
 }
index c3e06cc..c45a0e6 100644 (file)
@@ -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.')
 
 
index 51b6913..8c36d30 100644 (file)
@@ -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