From 4b7436673f7bc8422a793f94c9fed5c2fc671167 Mon Sep 17 00:00:00 2001 From: Dan Radez Date: Tue, 31 May 2016 22:58:00 -0400 Subject: Enabling python coverage tests in build.sh Change-Id: Iececedb03a60dd0bfc1ad6ef1275f6a0427350eb Signed-off-by: Dan Radez --- build/Makefile | 9 ++++++ ci/build.sh | 21 ++++++++++++++ lib/python/apex/deploy_env.py | 6 ++-- lib/python/apex/ip_utils.py | 6 ++-- tests/python-coverage.sh | 60 +++++++++++++++++++++++++++++++++------ tests/python_coverage_ip_utils.py | 25 ++++++++++++++++ 6 files changed, 112 insertions(+), 15 deletions(-) create mode 100644 tests/python_coverage_ip_utils.py diff --git a/build/Makefile b/build/Makefile index 8a498a66..4d024a3b 100644 --- a/build/Makefile +++ b/build/Makefile @@ -56,6 +56,15 @@ $(RPMCOM): # build the common RPM rpmbuild --clean -ba opnfv-apex-common.spec -D '_topdir %(echo `pwd`)' -D '_builddir %(echo `pwd`)' -D '_sourcedir %(echo `pwd`)' -D '_rpmdir %(echo `pwd`)' -D '_specdir %(echo `pwd`)' -D '_srcrpmdir %(echo `pwd`)' -D "release $(shell echo $(RELEASE) | tr -d '_-')" +################## +# PYTHON TESTS # +################## + +.PHONY: python-tests +python-tests: + cd ../tests && ./python-coverage.sh + + ############### # UNDERCLOUD # ############### diff --git a/ci/build.sh b/ci/build.sh index dd9f9fd1..12e0f9d1 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -34,6 +34,7 @@ BUILD_BASE=$(readlink -e ../build/) CACHE_DEST="" CACHE_DIR="cache" CACHE_NAME="apex-cache" +PYTHON_TESTS="TRUE" MAKE_TARGETS="images" REQUIRED_PKGS="rpm-build python-docutils" @@ -63,6 +64,11 @@ parse_cmdline() { echo "Buiding opnfv-apex RPMs" shift 1 ;; + --skip-python-tests ) + PYTHON_TESTS="FALSE" + echo "Skipping Python Tests" + shift 1 + ;; --debug ) debug="TRUE" echo "Enable debug output" @@ -145,6 +151,21 @@ if ! rpm -q python34-devel > /dev/null; then fi fi +if [ "$PYTHON_TESTS" == "TRUE" ]; then + # Make sure coverage is installed + if ! python3 -c "import coverage" &> /dev/null; then sudo easy_install-3.4 coverage; fi + + run_make python-tests + pushd ../tests/ > /dev/null + percent=$(coverage3 report --include '*lib/python/*' -m | grep TOTAL | tr -s ' ' | awk '{ print $4 }' | cut -d % -f 1) + if [[ percent -lt 80 ]]; then + echo "Python Coverage: $percent" + echo "Does not meet 80% requirement" + exit 1 + fi + popd +fi + # Execute make against targets for t in $MAKE_TARGETS; do run_make $t diff --git a/lib/python/apex/deploy_env.py b/lib/python/apex/deploy_env.py index be8779a9..bfb94f50 100644 --- a/lib/python/apex/deploy_env.py +++ b/lib/python/apex/deploy_env.py @@ -45,10 +45,10 @@ class DeploySettings: if 'deploy_options' not in self.deploy_settings: raise DeploySettingsException("No deploy options provided in" - "deploy settings file") + " deploy settings file") if 'global_params' not in self.deploy_settings: raise DeploySettingsException("No global options provided in" - "deploy settings file") + " deploy settings file") deploy_options = self.deploy_settings['deploy_options'] if not isinstance(deploy_options, dict): @@ -61,7 +61,7 @@ class DeploySettings: for required_setting in REQ_DEPLOY_SETTINGS: if required_setting not in deploy_options: - self.deploy_settings['deploy_options'][required] = False + self.deploy_settings['deploy_options']['required'] = False if 'performance' in deploy_options: if not isinstance(deploy_options['performance'], dict): diff --git a/lib/python/apex/ip_utils.py b/lib/python/apex/ip_utils.py index d7099db5..f51f227a 100644 --- a/lib/python/apex/ip_utils.py +++ b/lib/python/apex/ip_utils.py @@ -56,7 +56,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, end_index = -1 - end_offset else: raise IPUtilsException("Argument error: must pass in exactly 2 of" - "start_offset, end_offset and count") + " start_offset, end_offset and count") start_ip = cidr[start_index] end_ip = cidr[end_index] @@ -77,7 +77,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, else: raise IPUtilsException( "Argument error: must pass in exactly 2 of" - "start_offset, end_offset and count") + " start_offset, end_offset and count") else: if count and start_offset and not end_offset: start_ip = network[start_offset] @@ -91,7 +91,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, else: raise IPUtilsException( "Argument error: must pass in exactly 2 of" - "start_offset, end_offset and count") + " start_offset, end_offset and count") else: raise IPUtilsException("Must pass in cidr or interface to generate" diff --git a/tests/python-coverage.sh b/tests/python-coverage.sh index ee471446..8de6157d 100755 --- a/tests/python-coverage.sh +++ b/tests/python-coverage.sh @@ -3,21 +3,63 @@ set -x all_networks="admin_network private_network storage_network external_network" # exercise help -coverage-3.4 run ../lib/python/apex-python-utils.py -l /dev/null > /dev/null +coverage3 run ../lib/python/apex-python-utils.py -l /dev/null > /dev/null # exercise parse-net-settings # throw debug on the first to exercise it -coverage-3.4 run -a ../lib/python/apex-python-utils.py --debug parse-net-settings -s ../config/network/network_settings.yaml -i True -e ../build/network-environment.yaml> /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py --debug parse-net-settings -s ../config/network/network_settings.yaml -i True -e ../build/network-environment.yaml > /dev/null # exercise proper nic-template runs -coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 4 > /dev/null -coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 6 > /dev/null -coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 4 > /dev/null -coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 6 > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 4 > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e interface -af 6 > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 4 > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null nic-template -t ../config/network/network_settings.yaml -n "$all_networks" -e br-ex -af 6 > /dev/null # exercise find-ip -coverage-3.4 run -a ../lib/python/apex-python-utils.py -l /dev/null find-ip -i $(ip a | grep 2: | cut -d \ -f 2 | head -n 1 | cut -d : -f 1) > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null find-ip -i $(ip a | grep 2: | cut -d \ -f 2 | head -n 1 | cut -d : -f 1) > /dev/null + +# exercise parse-deploy-settings +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f ../config/deploy/os-nosdn-nofeature-noha.yaml > /dev/null +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f ../config/deploy/os-nosdn-performance-ha.yaml > /dev/null + +# exercise parse-deploy-settings errors +echo "global_params:" > /tmp/python-coverage.test +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +echo "deploy_options: string" > /tmp/python-coverage.test +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +echo "global_params:" >> /tmp/python-coverage.test +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +cat > /tmp/python-coverage.test << EOF +global_params: +deploy_options: + error: error +EOF +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +cat > /tmp/python-coverage.test << EOF +global_params: +deploy_options: + performance: string +EOF +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +cat > /tmp/python-coverage.test << EOF +global_params: +deploy_options: + performance: + error: error +EOF +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null +cat > /tmp/python-coverage.test << EOF +global_params: +deploy_options: + performance: + Controller: + error: error +EOF +coverage3 run -a ../lib/python/apex-python-utils.py -l /dev/null parse-deploy-settings -f /tmp/python-coverage.test &> /dev/null + +# coverage for ip_utils +PYTHONPATH=../lib/python/ coverage3 run -a python_coverage_ip_utils.py $(ip r | grep default | awk '{ print $5 }') # generate reports -coverage-3.4 report --include '*lib/python/*' -m -coverage-3.4 html --include '*lib/python/*' +coverage3 html --include '*lib/python/*' +coverage3 report --include '*lib/python/*' -m diff --git a/tests/python_coverage_ip_utils.py b/tests/python_coverage_ip_utils.py new file mode 100644 index 00000000..35280c18 --- /dev/null +++ b/tests/python_coverage_ip_utils.py @@ -0,0 +1,25 @@ +import sys +from apex import ip_utils + +iface = ip_utils.get_interface(sys.argv[1]) + +erroring_tests = ( + "ip_utils.get_interface('')", + "ip_utils.get_interface('lo', address_family=0)", + "ip_utils.get_interface('lo', address_family=6)", + "ip_utils.get_interface('lo')", + "ip_utils.get_ip_range()", + "ip_utils.get_ip_range(interface=iface)") + +for t in erroring_tests: + try: + eval(t) + except: + pass + +ip_utils.find_gateway(interface=iface) +ip_utils.get_ip(1, cidr="10.10.10.0/24") +ip_utils.get_ip(1, interface=iface) +ip_utils.get_ip_range(interface=iface, start_offset=1, end_offset=20) +ip_utils.get_ip_range(interface=iface, start_offset=1, count=10) +ip_utils.get_ip_range(interface=iface, end_offset=20, count=10) -- cgit 1.2.3-korg