From 6befbbe76cc9afedcefb032de9d67b26ce04cd0d Mon Sep 17 00:00:00 2001
From: Monty Taylor <mordred@inaugust.com>
Date: Sat, 22 Sep 2018 06:18:26 -0500
Subject: [PATCH] Clean up python3 test and split networking into a job

We want to run with python3 always with python2 being the exception.

Update the functional tests to be python3 by default with a
python2 job to check compat.

Remove python3.5 jobs, since that's covered by python3.6 and the
differences between 3.5 and 3.6 are covered by also having 2.7 in the
gate.

Similarly, make the tips jobs python 3.6 only because they are jobs that
aim to ensure interactions between openstacksdk and keystoneauth and
os-client-config and shade are correct at the unit test level. The
individual unit tests should catch actual python 2.7 issues.

Remove cover jobs because we historically haven't cared about the output
and they take up test nodes. In general it's not that big of a deal, but
we tend to be patch-heavy around here, so it feels extravagant to run a
job we don't actually care about the output of.

Split advanced networking services into a job

We're hitting timeouts like crazy- maybe we're just running low on
resources. Split octavia and designate into their own job. Turn
swift off in that job.

Skip sdk layer dns functional tests when designate is not present. We
should refactor these to deal with both cases.

Change-Id: Ica5a47cc200c8abff1d20af9883c5192fcbb95e1
---
 .zuul.yaml                                    | 100 +++++++++---------
 .../functional/network/v2/test_floating_ip.py |   2 +
 tox.ini                                       |  10 +-
 3 files changed, 51 insertions(+), 61 deletions(-)

diff --git a/.zuul.yaml b/.zuul.yaml
index 9b0739afd..779e97f80 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,23 +1,8 @@
 - job:
-    name: openstacksdk-tox-py27-tips
-    parent: openstack-tox-py27
+    name: openstacksdk-tox-py36-tips
+    parent: openstack-tox-py36
     description: |
-      Run tox python 27 unittests against master of important libs
-    vars:
-      tox_install_siblings: true
-    # openstacksdk in required-projects so that os-client-config
-    # and keystoneauth can add the job as well
-    required-projects:
-      - openstack-infra/shade
-      - openstack/keystoneauth
-      - openstack/openstacksdk
-      - openstack/os-client-config
-
-- job:
-    name: openstacksdk-tox-py35-tips
-    parent: openstack-tox-py35
-    description: |
-      Run tox python 35 unittests against master of important libs
+      Run tox python 36 unittests against master of important libs
     vars:
       tox_install_siblings: true
     # openstacksdk in required-projects so that osc and keystoneauth
@@ -32,12 +17,10 @@
     name: openstacksdk-tox-tips
     check:
       jobs:
-        - openstacksdk-tox-py27-tips
-        - openstacksdk-tox-py35-tips
+        - openstacksdk-tox-py36-tips
     gate:
       jobs:
-        - openstacksdk-tox-py27-tips
-        - openstacksdk-tox-py35-tips
+        - openstacksdk-tox-py36-tips
 
 - job:
     name: openstacksdk-functional-devstack-minimum
@@ -79,24 +62,14 @@
     parent: openstacksdk-functional-devstack-minimum
     description: |
       Base job for devstack-based functional tests
-    required-projects:
-      - name: openstack/heat
-      - name: openstack/swift
     vars:
+      devstack_plugins:
+        neutron: https://git.openstack.org/openstack/neutron
       devstack_local_conf:
         post-config:
           $CINDER_CONF:
             DEFAULT:
               osapi_max_limit: 6
-      devstack_services:
-        s-account: true
-        s-container: true
-        s-object: true
-        s-proxy: true
-      devstack_plugins:
-        heat: https://git.openstack.org/openstack/heat
-      tox_environment:
-        OPENSTACKSDK_HAS_HEAT: 1
 
 - job:
     name: openstacksdk-functional-devstack-legacy
@@ -120,11 +93,29 @@
     description: |
       Run openstacksdk functional tests against a master devstack
     required-projects:
-      - openstack/designate
-      - openstack/octavia
+      - openstack/heat
     vars:
       devstack_localrc:
         DISABLE_AMP_IMAGE_BUILD: true
+        Q_SERVICE_PLUGIN_CLASSES: qos,trunk
+      devstack_plugins:
+        heat: https://git.openstack.org/openstack/heat
+      tox_environment:
+        OPENSTACKSDK_HAS_HEAT: 1
+      devstack_services:
+        neutron-qos: true
+        neutron-trunk: true
+
+- job:
+    name: openstacksdk-functional-devstack-networking
+    parent: openstacksdk-functional-devstack
+    description: |
+      Run openstacksdk functional tests against a devstack with advanced
+      networking services enabled.
+    required-projects:
+      - openstack/designate
+      - openstack/octavia
+    vars:
       devstack_local_conf:
         post-config:
           $OCTAVIA_CONF:
@@ -138,7 +129,6 @@
               cert_manager: local_cert_manager
       devstack_plugins:
         designate: https://git.openstack.org/openstack/designate
-        neutron: https://git.openstack.org/openstack/neutron
         octavia: https://git.openstack.org/openstack/octavia
       devstack_services:
         designate: true
@@ -148,20 +138,26 @@
         o-hm: true
         o-hk: true
         neutron-dns: true
-        neutron-qos: true
-        neutron-trunk: true
+        s-account: false
+        s-container: false
+        s-object: false
+        s-proxy: false
+        h-eng: false
+        h-api: false
+        h-api-cfn: false
       tox_environment:
         OPENSTACKSDK_HAS_DESIGNATE: 1
-        OPENSTACKSDK_HAS_OCTAVIA: 1
+        OPENSTACKSDK_HAS_SWIFT: 0
+        OPENSTACKSDK_HAS_HEAT: 0
 
 - job:
-    name: openstacksdk-functional-devstack-python3
+    name: openstacksdk-functional-devstack-python2
     parent: openstacksdk-functional-devstack
     description: |
-      Run openstacksdk functional tests using python3 against a master devstack
+      Run openstacksdk functional tests using python2 against a master devstack
     vars:
       tox_environment:
-        OPENSTACKSDK_TOX_PYTHON: python3
+        OPENSTACKSDK_TOX_PYTHON: python2
 
 - job:
     name: openstacksdk-functional-devstack-tips
@@ -178,14 +174,14 @@
       tox_install_siblings: true
 
 - job:
-    name: openstacksdk-functional-devstack-tips-python3
+    name: openstacksdk-functional-devstack-tips-python2
     parent: openstacksdk-functional-devstack-tips
     description: |
       Run openstacksdk functional tests with tips of library dependencies using
-      python3 against a master devstack.
+      python2 against a master devstack.
     vars:
       tox_environment:
-        OPENSTACKSDK_TOX_PYTHON: python3
+        OPENSTACKSDK_TOX_PYTHON: python2
 
 - job:
     name: openstacksdk-functional-devstack-magnum
@@ -342,19 +338,17 @@
     check:
       jobs:
         - openstacksdk-functional-devstack-tips
-        - openstacksdk-functional-devstack-tips-python3
+        - openstacksdk-functional-devstack-tips-python2
     gate:
       jobs:
         - openstacksdk-functional-devstack-tips
-        - openstacksdk-functional-devstack-tips-python3
+        - openstacksdk-functional-devstack-tips-python2
 
 - project:
     templates:
       - check-requirements
-      - openstack-cover-jobs
       - openstack-lower-constraints-jobs
       - openstack-python-jobs
-      - openstack-python35-jobs
       - openstack-python36-jobs
       - openstacksdk-functional-tips
       - openstacksdk-tox-tips
@@ -371,12 +365,13 @@
         - openstacksdk-ansible-stable-2.6-functional-devstack:
             voting: false
         - openstacksdk-functional-devstack
+        - openstacksdk-functional-devstack-networking
         - openstacksdk-functional-devstack-senlin
         - openstacksdk-functional-devstack-magnum:
             voting: false
         - openstacksdk-functional-devstack-ironic:
             voting: false
-        - openstacksdk-functional-devstack-python3
+        - openstacksdk-functional-devstack-python2
         - osc-functional-devstack-tips:
             voting: false
         - neutron-grenade
@@ -385,7 +380,8 @@
     gate:
       jobs:
         - openstacksdk-functional-devstack
-        - openstacksdk-functional-devstack-python3
+        - openstacksdk-functional-devstack-python2
+        - openstacksdk-functional-devstack-networking
         - openstacksdk-functional-devstack-senlin
         - neutron-grenade
         - nodepool-functional-py35-src
diff --git a/openstack/tests/functional/network/v2/test_floating_ip.py b/openstack/tests/functional/network/v2/test_floating_ip.py
index 1a7d19273..69e6e9ed1 100644
--- a/openstack/tests/functional/network/v2/test_floating_ip.py
+++ b/openstack/tests/functional/network/v2/test_floating_ip.py
@@ -36,6 +36,8 @@ class TestFloatingIP(base.BaseFunctionalTest):
 
     def setUp(self):
         super(TestFloatingIP, self).setUp()
+        if not self.conn.has_service('dns'):
+            self.skipTest('dns service not supported by cloud')
         self.TIMEOUT_SCALING_FACTOR = 1.5
         self.ROT_NAME = self.getUniqueString()
         self.EXT_NET_NAME = self.getUniqueString()
diff --git a/tox.ini b/tox.ini
index af3f6ba9f..2ed269a94 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,6 +7,7 @@ skipsdist = True
 usedevelop = True
 install_command = pip install {opts} {packages}
 passenv = OS_* OPENSTACKSDK_*
+basepython = {env:OPENSTACKSDK_TOX_PYTHON:python3}
 setenv =
     VIRTUAL_ENV={envdir}
     LANG=en_US.UTF-8
@@ -23,12 +24,10 @@ commands = stestr run {posargs}
            stestr slowest
 
 [testenv:examples]
-basepython = python3
 commands = stestr --test-path ./openstack/tests/examples run {posargs}
            stestr slowest
 
 [testenv:functional]
-basepython = {env:OPENSTACKSDK_TOX_PYTHON:python2}
 setenv =
     {[testenv]setenv}
     OS_TEST_TIMEOUT=90
@@ -36,7 +35,6 @@ commands = stestr --test-path ./openstack/tests/functional/{env:OPENSTACKSDK_TES
            stestr slowest
 
 [testenv:pep8]
-basepython = python3
 usedevelop = False
 skip_install = True
 deps =
@@ -51,18 +49,15 @@ commands =
     flake8
 
 [testenv:venv]
-basepython = python3
 commands = {posargs}
 
 [testenv:debug]
-basepython = python3
 whitelist_externals = find
 commands =
     find . -type f -name "*.pyc" -delete
     oslo_debug_helper {posargs}
 
 [testenv:cover]
-basepython = python3
 setenv =
     {[testenv]setenv}
     PYTHON=coverage run --source openstack --parallel-mode
@@ -82,7 +77,6 @@ deps =
 commands = {toxinidir}/extras/run-ansible-tests.sh -e {envdir} {posargs}
 
 [testenv:docs]
-basepython = python3
 deps =
     -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
     -r{toxinidir}/requirements.txt
@@ -90,7 +84,6 @@ deps =
 commands = sphinx-build -W -d doc/build/doctrees -b html doc/source/ doc/build/html
 
 [testenv:releasenotes]
-basepython = python3
 usedevelop = False
 skip_install = True
 commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
@@ -112,7 +105,6 @@ exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
 extensions = .rst, .yaml
 
 [testenv:lower-constraints]
-basepython = python3
 deps =
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt