Upgrade for stable/rocky branch
* Removed py36 env from 'tox.ini'. * Updated requirements.txt with relevant 'stable/rocky' branch libraries. * Updated test-requirements.txt with relevant 'stable/rocky' branch libraries. * Replaced 'mox' with 'mock' on unit tests. * Use stestr directly instead of ostestr to run UTs, as is done in newer upstream branches. * Specify basepython as python2.7 for pep8, cover jobs, in case a python3 version of tox is used. * Added 'flake8-import-order' and kept import-order-style as 'pep8'. * Added zuul jobs w.r.t. 'stable/rocky' release. * Removed '-U' option from toxenv install command, for stable/rocky & above branches compatibility. Change-Id: I9161749fb2d8618b695815c095bdedae0251bb76
This commit is contained in:
3
.stestr.conf
Normal file
3
.stestr.conf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
test_path=${OS_TEST_PATH:-./gbpclient/tests/unit}
|
||||||
|
top_dir=./
|
30
.zuul.yaml
30
.zuul.yaml
@@ -3,19 +3,37 @@
|
|||||||
templates:
|
templates:
|
||||||
- openstack-python-jobs
|
- openstack-python-jobs
|
||||||
- publish-to-pypi
|
- publish-to-pypi
|
||||||
|
# REVISIT: In the jobs below, the required-projects clause is needed on
|
||||||
|
# the master branch to select the correct version of the requirements
|
||||||
|
# repository. Otherwise, the master version will be used. It can be
|
||||||
|
# eliminated on the stable branches, and on the master branch once this
|
||||||
|
# repository's master branch is based on the neutron repository's master
|
||||||
|
# branch.
|
||||||
check:
|
check:
|
||||||
jobs:
|
jobs:
|
||||||
- openstack-tox-pep8:
|
- openstack-tox-pep8:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
- openstack-tox-py27:
|
- openstack-tox-py27:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
- openstack-tox-py35:
|
- openstack-tox-py35:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
gate:
|
gate:
|
||||||
jobs:
|
jobs:
|
||||||
- openstack-tox-pep8:
|
- openstack-tox-pep8:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
- openstack-tox-py27:
|
- openstack-tox-py27:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
- openstack-tox-py35:
|
- openstack-tox-py35:
|
||||||
nodeset: ubuntu-xenial
|
required-projects:
|
||||||
|
- name: openstack/requirements
|
||||||
|
override-checkout: stable/rocky
|
||||||
|
@@ -11,10 +11,11 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
from mox3 import mox
|
import mock
|
||||||
|
import requests
|
||||||
|
|
||||||
from neutronclient.common import exceptions
|
from neutronclient.common import exceptions
|
||||||
from neutronclient.tests.unit import test_cli20 as neutron_test_cli20
|
from neutronclient.tests.unit import test_cli20 as neutron_test_cli20
|
||||||
import requests
|
|
||||||
|
|
||||||
from gbpclient import gbpshell
|
from gbpclient import gbpshell
|
||||||
from gbpclient.v2_0 import client as gbpclient
|
from gbpclient.v2_0 import client as gbpclient
|
||||||
@@ -65,9 +66,6 @@ class CLITestV20Base(neutron_test_cli20.CLITestV20Base):
|
|||||||
tenant_id=None, tags=None, admin_state_up=True,
|
tenant_id=None, tags=None, admin_state_up=True,
|
||||||
extra_body=None, cmd_resource=None,
|
extra_body=None, cmd_resource=None,
|
||||||
parent_id=None, **kwargs):
|
parent_id=None, **kwargs):
|
||||||
self.mox.StubOutWithMock(cmd, "get_client")
|
|
||||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
|
||||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
|
||||||
if not cmd_resource:
|
if not cmd_resource:
|
||||||
cmd_resource = resource
|
cmd_resource = resource
|
||||||
body = {resource: {}, }
|
body = {resource: {}, }
|
||||||
@@ -91,17 +89,26 @@ class CLITestV20Base(neutron_test_cli20.CLITestV20Base):
|
|||||||
path = getattr(self.client, resource_plural + "_path")
|
path = getattr(self.client, resource_plural + "_path")
|
||||||
if parent_id:
|
if parent_id:
|
||||||
path = path % parent_id
|
path = path % parent_id
|
||||||
mox_body = MyComparator(body, self.client)
|
mock_body = MyComparator(body, self.client)
|
||||||
self.client.httpclient.request(
|
|
||||||
end_url(path), 'POST',
|
|
||||||
body=mox_body,
|
|
||||||
headers=mox.ContainsKeyValue(
|
|
||||||
'X-Auth-Token', TOKEN)).AndReturn((MyResp(200), resstr))
|
|
||||||
self.mox.ReplayAll()
|
|
||||||
cmd_parser = cmd.get_parser('create_' + resource)
|
cmd_parser = cmd.get_parser('create_' + resource)
|
||||||
|
resp = (MyResp(200), resstr)
|
||||||
|
|
||||||
|
with mock.patch.object(
|
||||||
|
cmd, "get_client", return_value=self.client
|
||||||
|
) as mock_get_client, mock.patch.object(
|
||||||
|
self.client.httpclient, "request", return_value=resp
|
||||||
|
) as mock_request:
|
||||||
gbpshell.run_command(cmd, cmd_parser, args)
|
gbpshell.run_command(cmd, cmd_parser, args)
|
||||||
self.mox.VerifyAll()
|
|
||||||
self.mox.UnsetStubs()
|
self.assert_mock_multiple_calls_with_same_arguments(
|
||||||
|
mock_get_client, mock.call(), None)
|
||||||
|
|
||||||
|
mock_request.assert_called_once_with(
|
||||||
|
end_url(path), 'POST',
|
||||||
|
body=mock_body,
|
||||||
|
headers=neutron_test_cli20.ContainsKeyValue(
|
||||||
|
{'X-Auth-Token': TOKEN}))
|
||||||
|
|
||||||
_str = self.fake_stdout.make_string()
|
_str = self.fake_stdout.make_string()
|
||||||
self.assertIn(myid, _str)
|
self.assertIn(myid, _str)
|
||||||
if name:
|
if name:
|
||||||
@@ -207,20 +214,19 @@ class CLITestV20ExceptionHandler(CLITestV20Base):
|
|||||||
self.assertEqual(e.status_code, 599)
|
self.assertEqual(e.status_code, 599)
|
||||||
|
|
||||||
def test_connection_failed(self):
|
def test_connection_failed(self):
|
||||||
self.mox.StubOutWithMock(self.client.httpclient, 'request')
|
|
||||||
self.client.httpclient.auth_token = 'token'
|
self.client.httpclient.auth_token = 'token'
|
||||||
|
excp = requests.exceptions.ConnectionError('Connection refused')
|
||||||
|
|
||||||
self.client.httpclient.request(
|
with mock.patch.object(self.client.httpclient, "request",
|
||||||
end_url('/test'), 'GET',
|
side_effect=excp) as mock_request:
|
||||||
headers=mox.ContainsKeyValue('X-Auth-Token', 'token')
|
|
||||||
).AndRaise(requests.exceptions.ConnectionError('Connection refused'))
|
|
||||||
|
|
||||||
self.mox.ReplayAll()
|
|
||||||
|
|
||||||
error = self.assertRaises(exceptions.ConnectionFailed,
|
error = self.assertRaises(exceptions.ConnectionFailed,
|
||||||
self.client.get, '/test')
|
self.client.get, '/test')
|
||||||
|
|
||||||
|
mock_request.assert_called_once_with(
|
||||||
|
end_url('/test'), 'GET',
|
||||||
|
body=None,
|
||||||
|
headers=neutron_test_cli20.ContainsKeyValue(
|
||||||
|
{'X-Auth-Token': 'token'}))
|
||||||
# NB: ConnectionFailed has no explicit status_code, so this
|
# NB: ConnectionFailed has no explicit status_code, so this
|
||||||
# tests that there is a fallback defined.
|
# tests that there is a fallback defined.
|
||||||
self.assertIsNotNone(error.status_code)
|
self.assertIsNotNone(error.status_code)
|
||||||
self.mox.VerifyAll()
|
|
||||||
self.mox.UnsetStubs()
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
# of appearance. Changing the order has an impact on the overall integration
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
pbr>=2.0.0,!=2.1.0 # Apache-2.0
|
pbr>=2.0.0,!=2.1.0 # Apache-2.0
|
||||||
python-heatclient>=1.6.1
|
python-heatclient>=1.10.0 # Apache-2.0
|
||||||
python-neutronclient>=6.3.0,<6.8
|
python-neutronclient>=6.7.0 # Apache-2.0
|
||||||
oslo.serialization>=2.18.0,!=2.19.1 # Apache-2.0
|
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
||||||
oslo.utils>=3.33.0 # Apache-2.0
|
oslo.utils>=3.33.0 # Apache-2.0
|
||||||
|
@@ -36,3 +36,6 @@ source-dir = doc/source
|
|||||||
|
|
||||||
[wheel]
|
[wheel]
|
||||||
universal = 1
|
universal = 1
|
||||||
|
|
||||||
|
[flake8]
|
||||||
|
import-order-style = pep8
|
||||||
|
@@ -1,19 +1,16 @@
|
|||||||
# The order of packages is significant, because pip processes them in the order
|
# The order of packages is significant, because pip processes them in the order
|
||||||
# of appearance. Changing the order has an impact on the overall integration
|
# of appearance. Changing the order has an impact on the overall integration
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
hacking<0.11,>=0.10.0
|
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
|
||||||
|
|
||||||
coverage!=4.4,>=4.0 # Apache-2.0
|
coverage!=4.4,>=4.0 # Apache-2.0
|
||||||
fixtures>=3.0.0 # Apache-2.0/BSD
|
flake8-import-order==0.12 # LGPLv3
|
||||||
httpretty>=0.8.0,!=0.8.1,!=0.8.2,!=0.8.3
|
httpretty>=0.8.0,!=0.8.1,!=0.8.2,!=0.8.3
|
||||||
mox3>=0.20.0 # Apache-2.0
|
|
||||||
mock>=2.0.0 # BSD
|
|
||||||
oslotest>=3.2.0 # Apache-2.0
|
oslotest>=3.2.0 # Apache-2.0
|
||||||
python-openstackclient>=3.12.0 # Apache-2.0
|
python-openstackclient>=3.12.0 # Apache-2.0
|
||||||
python-subunit>=1.0.0 # Apache-2.0/BSD
|
|
||||||
reno>=2.5.0 # Apache-2.0
|
|
||||||
requests-mock>=1.1.0 # Apache-2.0
|
|
||||||
sphinx!=1.6.6,>=1.6.2 # BSD
|
sphinx!=1.6.6,>=1.6.2 # BSD
|
||||||
|
oslosphinx>=4.7.0 # Apache-2.0
|
||||||
|
stestr>=1.0.0 # Apache-2.0
|
||||||
testrepository>=0.0.18 # Apache-2.0/BSD
|
testrepository>=0.0.18 # Apache-2.0/BSD
|
||||||
testtools>=2.2.0 # MIT
|
testtools>=2.2.0 # MIT
|
||||||
testscenarios>=0.4 # Apache-2.0/BSD
|
testscenarios>=0.4 # Apache-2.0/BSD
|
||||||
|
22
tox.ini
22
tox.ini
@@ -1,22 +1,23 @@
|
|||||||
[tox]
|
[tox]
|
||||||
envlist = py27,py33,py36,pypy,pep8
|
envlist = py27,py35,pypy,pep8
|
||||||
minversion = 1.6
|
minversion = 2.3.2
|
||||||
skipsdist = True
|
skipsdist = True
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
basepython = python3
|
|
||||||
setenv = VIRTUAL_ENV={envdir}
|
setenv = VIRTUAL_ENV={envdir}
|
||||||
LANG=en_US.UTF-8
|
LANG=en_US.UTF-8
|
||||||
LANGUAGE=en_US:en
|
LANGUAGE=en_US:en
|
||||||
LC_ALL=C
|
LC_ALL=C
|
||||||
usedevelop = True
|
usedevelop = True
|
||||||
install_command = pip install -U {opts} {packages}
|
install_command = pip install {opts} {packages}
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps =
|
||||||
|
-c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/rocky}
|
||||||
|
-r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands = python setup.py testr --testr-args='{posargs}'
|
commands = stestr run {posargs}
|
||||||
|
|
||||||
[testenv:pep8]
|
[testenv:pep8]
|
||||||
basepython = python3
|
basepython = python2.7
|
||||||
commands = flake8
|
commands = flake8
|
||||||
distribute = false
|
distribute = false
|
||||||
|
|
||||||
@@ -25,8 +26,11 @@ basepython = python3
|
|||||||
commands = {posargs}
|
commands = {posargs}
|
||||||
|
|
||||||
[testenv:cover]
|
[testenv:cover]
|
||||||
basepython = python3
|
basepython = python2.7
|
||||||
commands = python setup.py testr --coverage --testr-args='{posargs}'
|
commands =
|
||||||
|
coverage erase
|
||||||
|
coverage run -m testtools.run
|
||||||
|
coverage report --include="*gbpclient*" --omit="*test*" --omit="*.tox*" --omit="*nfp*" -m
|
||||||
|
|
||||||
[testenv:docs]
|
[testenv:docs]
|
||||||
basepython = python3
|
basepython = python3
|
||||||
|
Reference in New Issue
Block a user