Merge "Adds octavia client integration"

This commit is contained in:
Zuul 2019-07-19 15:23:32 +00:00 committed by Gerrit Code Review
commit 18065e1373
5 changed files with 190 additions and 0 deletions

View File

@ -14,6 +14,7 @@ pbr>=4.0.0 # Apache-2.0
python-heatclient>=1.5.0 # Apache-2.0
python-neutronclient>=6.7.0 # Apache-2.0
python-novaclient>=9.1.0 # Apache-2.0
python-octaviaclient>=1.9.0 # Apache-2.0
python-openstackclient>=3.0.0 # Apache-2.0
stestr>=2.0 # Apache-2.0
six>=1.10.0 # MIT

View File

@ -0,0 +1,21 @@
# Copyright 2019 Red Hat
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
from tobiko.openstack.octavia import _client
octavia_client = _client.octavia_client
get_octavia_client = _client.get_octavia_client
OctaviaClientFixture = _client.OctaviaClientFixture

View File

@ -0,0 +1,62 @@
# Copyright 2019 Red Hat
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
from octaviaclient.api.v2 import octavia
import tobiko
from tobiko.openstack import _client
from tobiko.openstack import keystone
class OctaviaClientFixture(_client.OpenstackClientFixture):
def init_client(self, session):
keystone_client = keystone.get_keystone_client(session=session)
endpoint = keystone.find_service_endpoint(name='octavia',
client=keystone_client)
return octavia.OctaviaAPI(session=session, endpoint=endpoint.url)
class OctaviaClientManatger(_client.OpenstackClientManager):
def create_client(self, session):
return OctaviaClientFixture(session=session)
CLIENTS = OctaviaClientManatger()
def octavia_client(obj):
if not obj:
return get_octavia_client()
if isinstance(obj, octavia.OctaviaAPI):
return obj
fixture = tobiko.setup_fixture(obj)
if isinstance(fixture, OctaviaClientFixture):
return fixture.client
message = "Object {!r} is not an OctaviaClientFixture".format(obj)
raise TypeError(message)
def get_octavia_client(session=None, shared=True, init_client=None,
manager=None):
manager = manager or CLIENTS
client = manager.get_client(session=session, shared=shared,
init_client=init_client)
tobiko.setup_fixture(client)
return client.client

View File

@ -0,0 +1,106 @@
# Copyright 2019 Red Hat
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
import inspect
from keystoneclient.v3 import endpoints
from octaviaclient.api.v2 import octavia as octaviaclient
from tobiko.openstack import keystone
from tobiko.openstack import octavia
from tobiko.tests import unit
from tobiko.tests.unit import openstack
from tobiko.tests.unit.openstack import test_client
class KeystoneModulePatch(unit.PatchFixture):
client = object()
endpoint = endpoints.Endpoint(manager=None,
info={'url': 'http://some/endpoint'})
session = None
name = None
def setup_fixture(self):
module = inspect.getmodule(octavia.OctaviaClientFixture)
self.patch(module, 'keystone', self)
def get_keystone_client(self, session):
self.session = session
return self.client
def find_service_endpoint(self, name, client):
self.name = name
assert self.client is client
return self.endpoint
class OctaviaClientFixtureTest(test_client.OpenstackClientFixtureTest):
def setUp(self):
super(OctaviaClientFixtureTest, self).setUp()
self.useFixture(KeystoneModulePatch())
def create_client(self, session=None):
return octavia.OctaviaClientFixture(session=session)
class GetOctaviaClientTest(openstack.OpenstackTest):
def setUp(self):
super(GetOctaviaClientTest, self).setUp()
self.useFixture(KeystoneModulePatch())
def test_get_octavia_client(self, session=None, shared=True):
client1 = octavia.get_octavia_client(session=session, shared=shared)
client2 = octavia.get_octavia_client(session=session, shared=shared)
if shared:
self.assertIs(client1, client2)
else:
self.assertIsNot(client1, client2)
self.assertIsInstance(client1, octaviaclient.OctaviaAPI)
self.assertIsInstance(client2, octaviaclient.OctaviaAPI)
def test_get_octavia_client_with_not_shared(self):
self.test_get_octavia_client(shared=False)
def test_get_octavia_client_with_session(self):
session = keystone.get_keystone_session()
self.test_get_octavia_client(session=session)
class OctaviaClientTest(openstack.OpenstackTest):
def setUp(self):
super(OctaviaClientTest, self).setUp()
self.useFixture(KeystoneModulePatch())
def test_octavia_client_with_none(self):
default_client = octavia.get_octavia_client()
client = octavia.octavia_client(None)
self.assertIsInstance(client, octaviaclient.OctaviaAPI)
self.assertIs(default_client, client)
def test_octavia_client_with_client(self):
default_client = octavia.get_octavia_client()
client = octavia.octavia_client(default_client)
self.assertIsInstance(client, octaviaclient.OctaviaAPI)
self.assertIs(default_client, client)
def test_octavia_client_with_fixture(self):
fixture = octavia.OctaviaClientFixture()
client = octavia.octavia_client(fixture)
self.assertIsInstance(client, octaviaclient.OctaviaAPI)
self.assertIs(client, fixture.client)