Add python 3.7 unit and functional tox jobs

Without these, if you try to run tox -epy37,functional-py37 you'll
get a successful tox run, but no actual tests are run, which is
rather misleading. Given the generaly availability of python 3.7
this is a bad thing.

Running the tests under python 3.7 identified a few minor tests
failures, also fixed here. Each is a result of a change in behavior in
python 3.7:

* printable unicode changes with a new Unicode 11-based unicodedata
  package
* intentionally raising StopIteration in a generator is now considered a
  RuntimeError, 'return' should be used instead
* an exception message is different beween python 3 and python 2, and the
  guard for it was mapping python 3.5 and 3.6 but not 3.7.

zuul configuration is adjusted to add an experimental job for python 3.7
unit. A functional test job is not added, because we don't have 3.6 yet,
and we probably want to get through that first.

Closes-Bug: #1807976
Closes-Bug: #1807970
Change-Id: I37779a12d3b36eb3dc7e2733d07fe0ed23ab3da6
This commit is contained in:
Chris Dent 2018-12-10 11:22:54 +00:00 committed by Matt Riedemann
parent 1f2a80c195
commit 2ea552e019
5 changed files with 19 additions and 5 deletions

View File

@ -266,3 +266,4 @@
irrelevant-files: *dsvm-irrelevant-files
- os-vif-ovs:
irrelevant-files: *dsvm-irrelevant-files
- openstack-tox-py37

View File

@ -105,13 +105,13 @@ def query_wrapper(ctx, fn, *args, **kwargs):
# we won't call into the implementation's comparison routines)
# wrapping the sentinel indicating timeout.
yield RecordWrapper(ctx, None, context.did_not_respond_sentinel)
raise StopIteration
return
except Exception as e:
# Here, we yield a RecordWrapper (no sort_ctx needed since
# we won't call into the implementation's comparison routines)
# wrapping the exception object indicating failure.
yield RecordWrapper(ctx, None, e.__class__(e.args))
raise StopIteration
return
@six.add_metaclass(abc.ABCMeta)

View File

@ -467,7 +467,7 @@ class PatternPropertiesTestCase(APIValidationTestCase):
# Note(jrosenboom): This is referencing an internal python error
# string, which is no stable interface. We need a patch in the
# jsonschema library in order to fix this properly.
if sys.version[:3] in ['3.5', '3.6']:
if sys.version[:3] in ['3.5', '3.6', '3.7']:
detail = "expected string or bytes-like object"
else:
detail = "expected string or buffer"

View File

@ -187,8 +187,8 @@ class CreateInstanceTypeTest(test.TestCase):
self.assertInvalidInput('foobar\x00', 64, 1, 120)
def test_name_with_non_printable_characters(self):
# Names cannot contain printable characters
self.assertInvalidInput(u'm1.\u0868 #', 64, 1, 120)
# Names cannot contain non printable characters
self.assertInvalidInput(u'm1.\u0C77 #', 64, 1, 120)
def test_name_length_checks(self):
MAX_LEN = 255

13
tox.ini
View File

@ -52,6 +52,12 @@ basepython = python3.6
commands =
{[testenv:py35]commands}
[testenv:py37]
# TODO(efried): Remove this once https://github.com/tox-dev/tox/issues/425 is fixed.
basepython = python3.7
commands =
{[testenv:py35]commands}
[testenv:pep8]
description =
Run style checks.
@ -105,6 +111,13 @@ setenv = {[testenv]setenv}
commands =
{[testenv:functional]commands}
[testenv:functional-py37]
basepython = python3.7
envdir = {toxworkdir}/py37
setenv = {[testenv]setenv}
commands =
{[testenv:functional]commands}
[testenv:api-samples]
envdir = {toxworkdir}/shared
setenv =