diff --git a/test-requirements.txt b/test-requirements.txt index 9ad1804..51dd9ef 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -15,5 +15,4 @@ testrepository>=0.0.18 # Apache-2.0/BSD testtools>=1.4.0 # MIT coverage>=4.0 # Apache-2.0 -http://tarballs.openstack.org/nova/nova-master.tar.gz#egg=nova oslotest>=1.10.0 # Apache-2.0 diff --git a/tools/tox_install.sh b/tools/tox_install.sh new file mode 100755 index 0000000..397d697 --- /dev/null +++ b/tools/tox_install.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# The blazar-nova repo suffers from the problem of depending on nova, which +# does not exist on PyPI. + +# This wrapper for tox's package installer will use the existing package +# if it exists, else use zuul-cloner if that program exists, else grab it +# from nova master via a hard-coded URL. That last case should only +# happen with devs running unit tests locally. + +# From the tox.ini config page: +# install_command=ARGV +# default: +# pip install {opts} {packages} + +ZUUL_CLONER=/usr/zuul-env/bin/zuul-cloner +BRANCH_NAME=${NOVA_BRANCH:-master} +nova_installed=$(echo "import nova" | python 2>/dev/null ; echo $?) +NOVA_DIR=$HOME/nova + +set -e +set -x + +install_cmd="pip install -c$1" +shift + +# The devstack based functional tests have nova checked out in +# $NOVA_DIR on the test systems - with the change to test in it. +# Use this directory if it exists, so that this script installs the +# nova version to test here. +# Note that the functional tests use sudo to run tox and thus +# variables used for zuul-cloner to check out the correct version are +# lost. +if [ -d "$NOVA_DIR" ]; then + echo "FOUND Nova code at $NOVA_DIR - using" + $install_cmd -U -e $NOVA_DIR +elif [ $nova_installed -eq 0 ]; then + echo "ALREADY INSTALLED" > /tmp/tox_install.txt + location=$(python -c "import nova; print(nova.__file__)") + echo "ALREADY INSTALLED at $location" + + echo "Nova already installed; using existing package" +elif [ -x "$ZUUL_CLONER" ]; then + echo "ZUUL CLONER" > /tmp/tox_install.txt + # Make this relative to current working directory so that + # git clean can remove it. We cannot remove the directory directly + # since it is referenced after $install_cmd -e. + mkdir -p .tmp + NOVA_DIR=$(/bin/mktemp -d -p $(pwd)/.tmp) + pushd $NOVA_DIR + $ZUUL_CLONER --cache-dir \ + /opt/git \ + --branch $BRANCH_NAME \ + git://git.openstack.org \ + openstack/nova + cd openstack/nova + $install_cmd -e . + popd +else + echo "PIP HARDCODE" > /tmp/tox_install.txt + if [ -z "$NOVA_PIP_LOCATION" ]; then + NOVA_PIP_LOCATION="git+https://git.openstack.org/openstack/nova@$BRANCH_NAME#egg=nova" + fi + $install_cmd -U -e ${NOVA_PIP_LOCATION} +fi + +$install_cmd -U $* +exit $? diff --git a/tox.ini b/tox.ini index 10b49bc..8c55821 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,11 @@ [tox] envlist = py35,py34,py27,pep8 -minversion = 1.6 +minversion = 2.0 skipsdist = True [testenv] usedevelop = True -install_command = pip install -U {opts} {packages} +install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages} deps = -r{toxinidir}/test-requirements.txt -r{toxinidir}/requirements.txt setenv = VIRTUAL_ENV={envdir} @@ -27,7 +27,7 @@ commands = {posargs} [flake8] show-source = true builtins = _ -exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,tools +exclude = .venv,.git,.tmp,.tox,dist,doc,*lib/python*,*egg,tools [hacking] import_exceptions = nova.openstack.common.gettextutils