From a36f0a1e4edaaf9705e8eb74fd60f991149710bb Mon Sep 17 00:00:00 2001
From: Jesse Pretorius <jesse.pretorius@rackspace.co.uk>
Date: Fri, 8 Jul 2016 13:33:56 +0100
Subject: [PATCH] Update tox configuration

In order to prepare for implementing requirements management by the
OpenStack requirements management process, and to improve the
reliability and effectiveness of test execution, this patch implements
some changes to the tox configuration:

- The minimum tox version is increased in order to be able to use
  constraints for the python packages.
- The OpenStack upper-constraints are used when preparing the test
  venv for the linters checks.
- Any proxy environment variables set on the test host are passed
  into the venv to enable testing from behind a proxy.
- The docs test will clean-up an existing build directory before
  executing the docs build.
- The releasenotes build cannot use upper-constraints at this point,
  so it doesn't.
- The ansible test requirements are removed as they are not used for
  this repository at this time.

Change-Id: I338eb58dfebe2ac03f7a81dd9e93b057f7e64f73
---
 test-requirements.txt |  2 --
 tox.ini               | 46 +++++++++++++++++++++++++++++++++----------
 2 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/test-requirements.txt b/test-requirements.txt
index af4d44a5..c1b238ac 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,5 +1,3 @@
-ansible-lint<=2.3.9
-ansible>=1.9.1,<2.0.0,!=1.9.6
 bashate>=0.2 # Apache-2.0
 flake8>=2.5.4,<2.6.0  # MIT
 
diff --git a/tox.ini b/tox.ini
index 17294936..ad81608e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,31 +1,59 @@
 [tox]
-minversion = 1.6
+minversion = 2.0
 skipsdist = True
-envlist = docs,linters
+envlist = docs,linters,functional
 
 
 [testenv]
 usedevelop = True
-install_command = pip install -U {opts} {packages}
-deps = -r{toxinidir}/test-requirements.txt
-commands = /usr/bin/find . -type f -name "*.pyc" -delete
+install_command =
+    pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}
+deps =
+    -r{toxinidir}/test-requirements.txt
+commands =
+    /usr/bin/find . -type f -name "*.pyc" -delete
 passenv =
     HOME
+    http_proxy
+    HTTP_PROXY
+    https_proxy
+    HTTPS_PROXY
+    no_proxy
+    NO_PROXY
 whitelist_externals =
     bash
+    git
+    rm
+    wget
 setenv =
     VIRTUAL_ENV={envdir}
 
 
 [testenv:docs]
 commands=
+    bash -c "rm -rf doc/build"
     python setup.py build_sphinx
 
 
+[testenv:releasenotes]
+# NOTE(sdague): this target does not use constraints because
+# upstream infra does not yet support it. Once that's fixed, we can
+# drop the install_command.
+install_command =
+    pip install -U --force-reinstall {opts} {packages}
+commands =
+    sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
+
+
 # environment used by the -infra templated docs job
 [testenv:venv]
-deps = -r{toxinidir}/test-requirements.txt
-commands = {posargs}
+# NOTE(jaegerandi): this target does not use constraints because
+# upstream infra does not yet support it. Once that's fixed, we can
+# drop the install_command.
+install_command =
+    pip install -U --force-reinstall {opts} {packages}
+commands =
+    {posargs}
 
 
 [testenv:pep8]
@@ -40,6 +68,7 @@ commands =
         --exclude-dir doc \
         {toxinidir} | xargs flake8 --verbose"
 
+
 [flake8]
 # Ignores the following rules due to how ansible modules work in general
 #     F403 'from ansible.module_utils.basic import *' used;
@@ -69,6 +98,3 @@ commands =
 commands =
     {[testenv:pep8]commands}
     {[testenv:bashate]commands}
-
-[testenv:releasenotes]
-commands = sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html