Use openstacksdk test generate_fake_resources factory

Instead of building fake test objects in the local fakes.py file,
use existing generate_fake_resource(s) factory methods to automatically
populate class attributes. Doing this ensures that fake objects are always
build with actual attributes of the class.

Change-Id: If424b87c79e7dab102cbd8a7938df85411c9465d
Signed-off-by: Miro Tomaska <mtomaska@redhat.com>
This commit is contained in:
Miro Tomaska
2025-11-06 16:11:59 -05:00
parent 97c2238df1
commit dedc1a342c
7 changed files with 70 additions and 185 deletions

View File

@@ -101,12 +101,12 @@ class CreateTapFlow(command.ShowOne):
if parsed_args.port is not None:
source_port = client.find_port(
parsed_args.port, ignore_missing=False
)['id']
).id
attrs['source_port'] = source_port
if parsed_args.tap_service is not None:
tap_service_id = client.find_tap_service(
parsed_args.tap_service, ignore_missing=False
)['id']
).id
attrs['tap_service_id'] = tap_service_id
if parsed_args.direction is not None:
attrs['direction'] = parsed_args.direction

View File

@@ -99,7 +99,7 @@ class CreateTapMirror(command.ShowOne):
if parsed_args.port_id is not None:
port_id = client.find_port(
parsed_args.port_id, ignore_missing=False
)['id']
).id
attrs['port_id'] = port_id
if parsed_args.directions is not None:
attrs['directions'] = parsed_args.directions

View File

@@ -79,7 +79,7 @@ class CreateTapService(command.ShowOne):
if parsed_args.port_id is not None:
port_id = client.find_port(
parsed_args.port_id, ignore_missing=False
)['id']
).id
attrs['port_id'] = port_id
if 'project' in parsed_args and parsed_args.project is not None:
attrs['project_id'] = common.find_project(

View File

@@ -1,118 +0,0 @@
# All Rights Reserved 2020
#
# 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.
import copy
from oslo_utils import uuidutils
class FakeTapService:
@staticmethod
def create_tap_service(attrs=None):
"""Create a fake tap service."""
attrs = attrs or {}
tap_service_attrs = {
'id': uuidutils.generate_uuid(),
'tenant_id': uuidutils.generate_uuid(),
'name': 'test_tap_service' + uuidutils.generate_uuid(),
'status': 'ACTIVE',
}
tap_service_attrs.update(attrs)
return copy.deepcopy(tap_service_attrs)
@staticmethod
def create_tap_services(attrs=None, count=1):
"""Create multiple fake tap services."""
tap_services = []
for i in range(0, count):
if attrs is None:
attrs = {'id': f'fake_id{i}'}
elif getattr(attrs, 'id', None) is None:
attrs['id'] = f'fake_id{i}'
tap_services.append(FakeTapService.create_tap_service(attrs=attrs))
return tap_services
class FakeTapFlow:
@staticmethod
def create_tap_flow(attrs=None):
"""Create a fake tap service."""
attrs = attrs or {}
tap_flow_attrs = {
'id': uuidutils.generate_uuid(),
'tenant_id': uuidutils.generate_uuid(),
'name': 'test_tap_flow' + uuidutils.generate_uuid(),
'status': 'ACTIVE',
'direction': 'BOTH',
}
tap_flow_attrs.update(attrs)
return copy.deepcopy(tap_flow_attrs)
@staticmethod
def create_tap_flows(attrs=None, count=1):
"""Create multiple fake tap flows."""
tap_flows = []
for i in range(0, count):
if attrs is None:
attrs = {
'id': f'fake_id{i}',
'source_port': uuidutils.generate_uuid(),
'tap_service_id': uuidutils.generate_uuid(),
}
elif getattr(attrs, 'id', None) is None:
attrs['id'] = f'fake_id{i}'
tap_flows.append(FakeTapFlow.create_tap_flow(attrs=attrs))
return tap_flows
class FakeTapMirror:
@staticmethod
def create_tap_mirror(attrs=None):
"""Create a fake tap mirror."""
attrs = attrs or {}
tap_mirror_attrs = {
'id': uuidutils.generate_uuid(),
'tenant_id': uuidutils.generate_uuid(),
'name': 'test_tap_mirror' + uuidutils.generate_uuid(),
'port_id': uuidutils.generate_uuid(),
'directions': 'IN=99',
'remote_ip': '192.10.10.2',
'mirror_type': 'gre',
}
tap_mirror_attrs.update(attrs)
return copy.deepcopy(tap_mirror_attrs)
@staticmethod
def create_tap_mirrors(attrs=None, count=1):
"""Create multiple fake tap mirrors."""
tap_mirrors = []
for i in range(0, count):
if attrs is None:
attrs = {
'id': f'fake_id{i}',
'port_id': uuidutils.generate_uuid(),
'name': f'test_tap_mirror_{i}',
'directions': f'IN={99 + i}',
'remote_ip': f'192.10.10.{i + 3}',
}
elif getattr(attrs, 'id', None) is None:
attrs['id'] = f'fake_id{i}'
tap_mirrors.append(FakeTapMirror.create_tap_mirror(attrs=attrs))
return tap_mirrors

View File

@@ -17,13 +17,14 @@ import operator
import uuid
from openstack.network.v2 import tap_flow as _tap_flow
from openstack.network.v2 import tap_service as _tap_service
from openstack.test import fakes as sdk_fakes
from osc_lib import utils as osc_utils
from osc_lib.utils import columns as column_util
from openstackclient.network.v2.taas import tap_flow as osc_tap_flow
from openstackclient.network.v2.taas import tap_service as osc_tap_service
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit.network.v2.taas import fakes
columns_long = tuple(
@@ -47,9 +48,11 @@ def _get_data(attrs, columns=sorted_columns):
class TestCreateTapFlow(network_fakes.TestNetworkV2):
columns = (
'description',
'direction',
'id',
'name',
'project_id',
'source_port',
'status',
'tap_service_id',
@@ -61,22 +64,23 @@ class TestCreateTapFlow(network_fakes.TestNetworkV2):
def test_create_tap_flow(self):
"""Test Create Tap Flow."""
fake_tap_service = fakes.FakeTapService.create_tap_service(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_service = sdk_fakes.generate_fake_resource(
_tap_service.TapService
)
port_id = str(uuid.uuid4())
fake_tap_flow = fakes.FakeTapFlow.create_tap_flow(
attrs={
fake_port = network_fakes.create_one_port(attrs={'id': port_id})
fake_tap_flow = sdk_fakes.generate_fake_resource(
_tap_flow.TapFlow,
**{
'source_port': port_id,
'tap_service_id': fake_tap_service['id'],
}
'direction': 'BOTH',
},
)
self.app.client_manager.network.create_tap_flow.return_value = (
fake_tap_flow
)
self.app.client_manager.network.find_port.return_value = {
'id': port_id
}
self.app.client_manager.network.find_port.return_value = fake_port
self.app.client_manager.network.find_tap_service.return_value = (
fake_tap_service
)
@@ -122,12 +126,8 @@ class TestListTapFlow(network_fakes.TestNetworkV2):
def test_list_tap_flows(self):
"""Test List Tap Flow."""
fake_tap_flows = fakes.FakeTapFlow.create_tap_flows(
attrs={
'source_port': str(uuid.uuid4()),
'tap_service_id': str(uuid.uuid4()),
},
count=2,
fake_tap_flows = list(
sdk_fakes.generate_fake_resources(_tap_flow.TapFlow, count=2)
)
self.app.client_manager.network.tap_flows.return_value = fake_tap_flows
arg_list = []
@@ -159,13 +159,7 @@ class TestDeleteTapFlow(network_fakes.TestNetworkV2):
def test_delete_tap_flow(self):
"""Test Delete tap flow."""
fake_tap_flow = fakes.FakeTapFlow.create_tap_flow(
attrs={
'source_port': str(uuid.uuid4()),
'tap_service_id': str(uuid.uuid4()),
}
)
fake_tap_flow = sdk_fakes.generate_fake_resource(_tap_flow.TapFlow)
arg_list = [
fake_tap_flow['id'],
]
@@ -184,9 +178,11 @@ class TestDeleteTapFlow(network_fakes.TestNetworkV2):
class TestShowTapFlow(network_fakes.TestNetworkV2):
columns = (
'description',
'direction',
'id',
'name',
'project_id',
'source_port',
'status',
'tap_service_id',
@@ -201,12 +197,7 @@ class TestShowTapFlow(network_fakes.TestNetworkV2):
def test_show_tap_flow(self):
"""Test Show tap flow."""
fake_tap_flow = fakes.FakeTapFlow.create_tap_flow(
attrs={
'source_port': str(uuid.uuid4()),
'tap_service_id': str(uuid.uuid4()),
}
)
fake_tap_flow = sdk_fakes.generate_fake_resource(_tap_flow.TapFlow)
self.app.client_manager.network.get_tap_flow.return_value = (
fake_tap_flow
)
@@ -234,12 +225,19 @@ class TestShowTapFlow(network_fakes.TestNetworkV2):
class TestUpdateTapFlow(network_fakes.TestNetworkV2):
_new_name = 'new_name'
# NOTE(mtomaska): The Resource class from which TapFlow inherits from
# returns duplicate `ID and `Name` keys.
columns = (
'Direction',
'ID',
'ID',
'Name',
'Name',
'Status',
'Tenant',
'description',
'location',
'project_id',
'source_port',
'tap_service_id',
)
@@ -253,12 +251,7 @@ class TestUpdateTapFlow(network_fakes.TestNetworkV2):
def test_update_tap_flow(self):
"""Test update tap service"""
fake_tap_flow = fakes.FakeTapFlow.create_tap_flow(
attrs={
'source_port': str(uuid.uuid4()),
'tap_service_id': str(uuid.uuid4()),
}
)
fake_tap_flow = sdk_fakes.generate_fake_resource(_tap_flow.TapFlow)
new_tap_flow = copy.deepcopy(fake_tap_flow)
new_tap_flow['name'] = self._new_name
@@ -280,4 +273,4 @@ class TestUpdateTapFlow(network_fakes.TestNetworkV2):
mock_update_t_f = self.app.client_manager.network.update_tap_flow
mock_update_t_f.assert_called_once_with(new_tap_flow['id'], **attrs)
self.assertEqual(self.columns, columns)
self.assertEqual(_get_data(new_tap_flow), data)
self.assertEqual(_get_data(new_tap_flow, self.columns), data)

View File

@@ -15,12 +15,12 @@ import operator
import uuid
from openstack.network.v2 import tap_mirror
from openstack.test import fakes as sdk_fakes
from osc_lib import utils as osc_utils
from osc_lib.utils import columns as column_util
from openstackclient.network.v2.taas import tap_mirror as osc_tap_mirror
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit.network.v2.taas import fakes
columns_long = tuple(
@@ -44,11 +44,13 @@ def _get_data(attrs, columns=sorted_columns):
class TestCreateTapMirror(network_fakes.TestNetworkV2):
columns = (
'description',
'directions',
'id',
'mirror_type',
'name',
'port_id',
'project_id',
'remote_ip',
)
@@ -58,15 +60,14 @@ class TestCreateTapMirror(network_fakes.TestNetworkV2):
def test_create_tap_mirror(self):
port_id = str(uuid.uuid4())
fake_tap_mirror = fakes.FakeTapMirror.create_tap_mirror(
attrs={'port_id': port_id}
fake_port = network_fakes.create_one_port(attrs={'id': port_id})
fake_tap_mirror = sdk_fakes.generate_fake_resource(
tap_mirror.TapMirror, **{'port_id': port_id, 'directions': 'IN=99'}
)
self.app.client_manager.network.create_tap_mirror.return_value = (
fake_tap_mirror
)
self.app.client_manager.network.find_port.return_value = {
'id': port_id
}
self.app.client_manager.network.find_port.return_value = fake_port
self.app.client_manager.network.find_tap_mirror.side_effect = (
lambda _, name_or_id: {'id': name_or_id}
)
@@ -124,8 +125,8 @@ class TestListTapMirror(network_fakes.TestNetworkV2):
def test_list_tap_mirror(self):
"""Test List Tap Mirror."""
fake_tap_mirrors = fakes.FakeTapMirror.create_tap_mirrors(
attrs={'port_id': str(uuid.uuid4())}, count=4
fake_tap_mirrors = list(
sdk_fakes.generate_fake_resources(tap_mirror.TapMirror, count=4)
)
self.app.client_manager.network.tap_mirrors.return_value = (
fake_tap_mirrors
@@ -162,8 +163,8 @@ class TestDeleteTapMirror(network_fakes.TestNetworkV2):
def test_delete_tap_mirror(self):
"""Test Delete Tap Mirror."""
fake_tap_mirror = fakes.FakeTapMirror.create_tap_mirror(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_mirror = sdk_fakes.generate_fake_resource(
tap_mirror.TapMirror
)
arg_list = [
@@ -183,11 +184,13 @@ class TestDeleteTapMirror(network_fakes.TestNetworkV2):
class TestShowTapMirror(network_fakes.TestNetworkV2):
columns = (
'description',
'directions',
'id',
'mirror_type',
'name',
'port_id',
'project_id',
'remote_ip',
)
@@ -203,8 +206,8 @@ class TestShowTapMirror(network_fakes.TestNetworkV2):
def test_show_tap_mirror(self):
"""Test Show Tap Mirror."""
fake_tap_mirror = fakes.FakeTapMirror.create_tap_mirror(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_mirror = sdk_fakes.generate_fake_resource(
tap_mirror.TapMirror
)
self.app.client_manager.network.get_tap_mirror.return_value = (
fake_tap_mirror
@@ -232,11 +235,13 @@ class TestShowTapMirror(network_fakes.TestNetworkV2):
class TestUpdateTapMirror(network_fakes.TestNetworkV2):
_new_name = 'new_name'
columns = (
'description',
'directions',
'id',
'mirror_type',
'name',
'port_id',
'project_id',
'remote_ip',
)
@@ -251,8 +256,8 @@ class TestUpdateTapMirror(network_fakes.TestNetworkV2):
def test_update_tap_mirror(self):
"""Test update Tap Mirror"""
fake_tap_mirror = fakes.FakeTapMirror.create_tap_mirror(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_mirror = sdk_fakes.generate_fake_resource(
tap_mirror.TapMirror
)
new_tap_mirror = copy.deepcopy(fake_tap_mirror)
new_tap_mirror['name'] = self._new_name

View File

@@ -17,12 +17,12 @@ import operator
import uuid
from openstack.network.v2 import tap_service
from openstack.test import fakes as sdk_fakes
from osc_lib import utils as osc_utils
from osc_lib.utils import columns as column_util
from openstackclient.network.v2.taas import tap_service as osc_tap_service
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
from openstackclient.tests.unit.network.v2.taas import fakes
columns_long = tuple(
@@ -46,9 +46,11 @@ def _get_data(attrs, columns=sorted_columns):
class TestCreateTapService(network_fakes.TestNetworkV2):
columns = (
'description',
'id',
'name',
'port_id',
'project_id',
'status',
)
@@ -59,15 +61,14 @@ class TestCreateTapService(network_fakes.TestNetworkV2):
def test_create_tap_service(self):
"""Test Create Tap Service."""
port_id = str(uuid.uuid4())
fake_tap_service = fakes.FakeTapService.create_tap_service(
attrs={'port_id': port_id}
fake_port = network_fakes.create_one_port(attrs={'id': port_id})
fake_tap_service = sdk_fakes.generate_fake_resource(
tap_service.TapService, **{'port_id': port_id}
)
self.app.client_manager.network.create_tap_service.return_value = (
fake_tap_service
)
self.app.client_manager.network.find_port.return_value = {
'id': port_id
}
self.app.client_manager.network.find_port.return_value = fake_port
self.app.client_manager.network.find_tap_service.side_effect = (
lambda _, name_or_id: {'id': name_or_id}
)
@@ -110,8 +111,8 @@ class TestListTapService(network_fakes.TestNetworkV2):
def test_list_tap_service(self):
"""Test List Tap Service."""
fake_tap_services = fakes.FakeTapService.create_tap_services(
attrs={'port_id': str(uuid.uuid4())}, count=4
fake_tap_services = list(
sdk_fakes.generate_fake_resources(tap_service.TapService, count=4)
)
self.app.client_manager.network.tap_services.return_value = (
fake_tap_services
@@ -148,8 +149,8 @@ class TestDeleteTapService(network_fakes.TestNetworkV2):
def test_delete_tap_service(self):
"""Test Delete tap service."""
fake_tap_service = fakes.FakeTapService.create_tap_service(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_service = sdk_fakes.generate_fake_resource(
tap_service.TapService
)
arg_list = [
@@ -169,9 +170,11 @@ class TestDeleteTapService(network_fakes.TestNetworkV2):
class TestShowTapService(network_fakes.TestNetworkV2):
columns = (
'description',
'id',
'name',
'port_id',
'project_id',
'status',
)
@@ -187,8 +190,8 @@ class TestShowTapService(network_fakes.TestNetworkV2):
def test_show_tap_service(self):
"""Test Show tap service."""
fake_tap_service = fakes.FakeTapService.create_tap_service(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_service = sdk_fakes.generate_fake_resource(
tap_service.TapService
)
self.app.client_manager.network.get_tap_service.return_value = (
fake_tap_service
@@ -217,9 +220,11 @@ class TestUpdateTapService(network_fakes.TestNetworkV2):
_new_name = 'new_name'
columns = (
'description',
'id',
'name',
'port_id',
'project_id',
'status',
)
@@ -234,8 +239,8 @@ class TestUpdateTapService(network_fakes.TestNetworkV2):
def test_update_tap_service(self):
"""Test update tap service"""
fake_tap_service = fakes.FakeTapService.create_tap_service(
attrs={'port_id': str(uuid.uuid4())}
fake_tap_service = sdk_fakes.generate_fake_resource(
tap_service.TapService
)
new_tap_service = copy.deepcopy(fake_tap_service)
new_tap_service['name'] = self._new_name