Added basic fake network coverage

This code should never be used in production, but it is always
good to have basic test coverage either way to make it easier
to understand the implementation.

Change-Id: I17e74223e5c68fe9d0799dedd94c88e399ff21ba
This commit is contained in:
Erik Olof Gunnar Andersson 2023-12-13 04:45:55 -08:00
parent ff70036bf9
commit 16e2433d25
3 changed files with 73 additions and 8 deletions

View File

@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from oslo_config import cfg
from oslo_log import log
@ -30,7 +31,7 @@ cfg.CONF.register_opts(neutron_opts)
def get_network_api(network_api_driver):
LOG.debug("Loading network_api driver: %s", network_api_driver)
LOG.debug('Loading network_api driver: %s', network_api_driver)
cls = base.NetworkAPI.get_driver(network_api_driver)

View File

@ -13,6 +13,8 @@
# 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 oslo_log import log as logging
from designate.network_api import base
@ -20,8 +22,7 @@ from designate.utils import generate_uuid
LOG = logging.getLogger(__name__)
POOL = {generate_uuid(): '192.168.2.%s' % i for i in range(0, 254)}
POOL = {generate_uuid(): '192.0.2.%s' % i for i in range(1, 254)}
ALLOCATIONS = {}
@ -43,7 +44,7 @@ def allocate_floatingip(project_id, floatingip_id=None):
ALLOCATIONS[project_id][id_] = POOL.pop(id_)
values = _format_floatingip(id_, ALLOCATIONS[project_id][id_])
LOG.debug("Allocated to id_ %s to %s - %s", id_, project_id, values)
LOG.debug('Allocated to id_ %s to %s - %s', id_, project_id, values)
return values
@ -56,8 +57,6 @@ def deallocate_floatingip(id_):
if id_ in allocated:
POOL[id_] = allocated.pop(id_)
break
else:
raise KeyError('No such FloatingIP %s' % id_)
def reset_floatingips():
@ -79,6 +78,7 @@ class FakeNetworkAPI(base.NetworkAPI):
data = list(ALLOCATIONS.get(context.project_id, {}).items())
formatted = [_format_floatingip(k, v) for k, v in data]
LOG.debug('Returning %i FloatingIPs: %s',
len(formatted), formatted)
LOG.debug(
'Returning %i FloatingIPs: %s', len(formatted), formatted
)
return formatted

View File

@ -0,0 +1,64 @@
# 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 oslo_config import fixture as cfg_fixture
import oslotest.base
import designate.conf
from designate import context
from designate.network_api import fake
from designate.network_api import get_network_api
CONF = designate.conf.CONF
class FakeNetworkAPITest(oslotest.base.BaseTestCase):
def setUp(self):
super().setUp()
self.useFixture(cfg_fixture.Config(CONF))
self.api = get_network_api('fake')
self.context = context.DesignateContext(
user_id='12345', project_id='54321',
)
self.addCleanup(fake.reset_floatingips)
def test_list_floatingips(self):
fake.allocate_floatingip(self.context.project_id)
fake.allocate_floatingip('12345')
self.assertEqual(1, len(self.api.list_floatingips(self.context)))
def test_list_floatingips_is_admin(self):
fake.allocate_floatingip(self.context.project_id)
fake.allocate_floatingip('12345')
self.context.is_admin = True
self.assertEqual(2, len(self.api.list_floatingips(self.context)))
def test_allocate_floatingip(self):
fip = fake.allocate_floatingip(self.context.project_id)
self.assertIn('192.0.2', fip['address'])
self.assertEqual('RegionOne', fip['region'])
self.assertIn('id', fip)
def test_deallocate_floatingip(self):
fip = fake.allocate_floatingip(self.context.project_id)
self.assertIn('192.0.2', fip['address'])
self.assertEqual('RegionOne', fip['region'])
self.assertIn('id', fip)
self.assertIsNone(fake.deallocate_floatingip(self.context.project_id))