Adopt sdk_fakes for compute.test_flavor

Use sdk_fakes inside test_flavor. The only left fake is for
flavor_access, for which there is no resource in SDK.

Change-Id: I8fcfb734eb45308b80aa1478c2935c9881fee928
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
This commit is contained in:
Artem Goncharov
2023-06-07 15:43:16 +02:00
committed by Stephen Finucane
parent d90e18b08c
commit a312e9cdad

View File

@@ -16,12 +16,13 @@ from unittest import mock
from openstack.compute.v2 import flavor as _flavor
from openstack import exceptions as sdk_exceptions
from openstack.identity.v3 import project as _project
from openstack.test import fakes as sdk_fakes
from osc_lib.cli import format_columns
from osc_lib import exceptions
from openstackclient.compute.v2 import flavor
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
from openstackclient.tests.unit import utils as tests_utils
@@ -34,59 +35,60 @@ class TestFlavor(compute_fakes.TestComputev2):
class TestFlavorCreate(TestFlavor):
flavor = compute_fakes.create_one_flavor(attrs={'links': 'flavor-links'})
project = identity_fakes.FakeProject.create_one_project()
columns = (
'OS-FLV-DISABLED:disabled',
'OS-FLV-EXT-DATA:ephemeral',
'description',
'disk',
'id',
'name',
'os-flavor-access:is_public',
'properties',
'ram',
'rxtx_factor',
'swap',
'vcpus',
)
data = (
flavor.is_disabled,
flavor.ephemeral,
flavor.description,
flavor.disk,
flavor.id,
flavor.name,
flavor.is_public,
format_columns.DictColumn(flavor.extra_specs),
flavor.ram,
flavor.rxtx_factor,
flavor.swap,
flavor.vcpus,
)
data_private = (
flavor.is_disabled,
flavor.ephemeral,
flavor.description,
flavor.disk,
flavor.id,
flavor.name,
False,
format_columns.DictColumn(flavor.extra_specs),
flavor.ram,
flavor.rxtx_factor,
flavor.swap,
flavor.vcpus,
)
def setUp(self):
super().setUp()
# Return a project
self.flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, links='flavor-links'
)
self.project = sdk_fakes.generate_fake_resource(_project.Project)
self.columns = (
'OS-FLV-DISABLED:disabled',
'OS-FLV-EXT-DATA:ephemeral',
'description',
'disk',
'id',
'name',
'os-flavor-access:is_public',
'properties',
'ram',
'rxtx_factor',
'swap',
'vcpus',
)
self.data = (
self.flavor.is_disabled,
self.flavor.ephemeral,
self.flavor.description,
self.flavor.disk,
self.flavor.id,
self.flavor.name,
self.flavor.is_public,
format_columns.DictColumn(self.flavor.extra_specs),
self.flavor.ram,
self.flavor.rxtx_factor,
self.flavor.swap,
self.flavor.vcpus,
)
self.data_private = (
self.flavor.is_disabled,
self.flavor.ephemeral,
self.flavor.description,
self.flavor.disk,
self.flavor.id,
self.flavor.name,
False,
format_columns.DictColumn(self.flavor.extra_specs),
self.flavor.ram,
self.flavor.rxtx_factor,
self.flavor.swap,
self.flavor.vcpus,
)
self.projects_mock.get.return_value = self.project
self.compute_client.create_flavor.return_value = self.flavor
self.cmd = flavor.CreateFlavor(self.app, None)
def test_flavor_create_default_options(self):
@@ -233,7 +235,7 @@ class TestFlavorCreate(TestFlavor):
('vcpus', self.flavor.vcpus),
('rxtx_factor', self.flavor.rxtx_factor),
('public', False),
('description', 'description'),
('description', self.flavor.description),
('project', self.project.id),
('properties', {'key1': 'value1', 'key2': 'value2'}),
('name', self.flavor.name),
@@ -328,7 +330,7 @@ class TestFlavorCreate(TestFlavor):
str(self.flavor.vcpus),
'--rxtx-factor',
str(self.flavor.rxtx_factor),
'--private',
'--public',
'--description',
'fake description',
self.flavor.name,
@@ -341,7 +343,7 @@ class TestFlavorCreate(TestFlavor):
('swap', self.flavor.swap),
('vcpus', self.flavor.vcpus),
('rxtx_factor', self.flavor.rxtx_factor),
('public', False),
('public', True),
('description', 'fake description'),
('name', self.flavor.name),
]
@@ -358,14 +360,14 @@ class TestFlavorCreate(TestFlavor):
'ephemeral': self.flavor.ephemeral,
'swap': self.flavor.swap,
'rxtx_factor': self.flavor.rxtx_factor,
'is_public': self.flavor.is_public,
'is_public': True,
'description': 'fake description',
}
self.compute_client.create_flavor.assert_called_once_with(**args)
self.assertEqual(self.columns, columns)
self.assertCountEqual(self.data_private, data)
self.assertCountEqual(self.data, data)
def test_flavor_create_with_description_pre_v255(self):
self.set_compute_api_version('2.54')
@@ -395,11 +397,13 @@ class TestFlavorCreate(TestFlavor):
class TestFlavorDelete(TestFlavor):
flavors = compute_fakes.create_flavors(count=2)
def setUp(self):
super().setUp()
self.flavors = list(
sdk_fakes.generate_fake_resources(_flavor.Flavor, 2)
)
self.compute_client.delete_flavor.return_value = None
self.cmd = flavor.DeleteFlavor(self.app, None)
@@ -474,51 +478,50 @@ class TestFlavorDelete(TestFlavor):
class TestFlavorList(TestFlavor):
_flavor = compute_fakes.create_one_flavor()
columns = (
'ID',
'Name',
'RAM',
'Disk',
'Ephemeral',
'VCPUs',
'Is Public',
)
columns_long = columns + ('Swap', 'RXTX Factor', 'Properties')
data = (
(
_flavor.id,
_flavor.name,
_flavor.ram,
_flavor.disk,
_flavor.ephemeral,
_flavor.vcpus,
_flavor.is_public,
),
)
data_long = (
data[0]
+ (
_flavor.swap,
_flavor.rxtx_factor,
format_columns.DictColumn(_flavor.extra_specs),
),
)
def setUp(self):
super().setUp()
self.api_mock = mock.Mock()
self.api_mock.side_effect = [
[self._flavor],
[],
]
self._flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, extra_specs={'property': 'value'}
)
self.compute_client.flavors = self.api_mock
self.columns = (
'ID',
'Name',
'RAM',
'Disk',
'Ephemeral',
'VCPUs',
'Is Public',
)
self.columns_long = self.columns + (
'Swap',
'RXTX Factor',
'Properties',
)
self.data = (
(
self._flavor.id,
self._flavor.name,
self._flavor.ram,
self._flavor.disk,
self._flavor.ephemeral,
self._flavor.vcpus,
self._flavor.is_public,
),
)
self.data_long = (
self.data[0]
+ (
self._flavor.swap,
self._flavor.rxtx_factor,
format_columns.DictColumn(self._flavor.extra_specs),
),
)
self.compute_client.flavors.side_effect = [[self._flavor], []]
# Get the command object to test
self.cmd = flavor.ListFlavor(self.app, None)
def test_flavor_list_no_options(self):
@@ -653,7 +656,9 @@ class TestFlavorList(TestFlavor):
def test_flavor_list_long_no_extra_specs(self):
# use flavor with no extra specs for this test
flavor = compute_fakes.create_one_flavor(attrs={"extra_specs": {}})
flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, extra_specs={}
)
self.data = (
(
flavor.id,
@@ -673,12 +678,8 @@ class TestFlavorList(TestFlavor):
format_columns.DictColumn(flavor.extra_specs),
),
)
self.api_mock.side_effect = [
[flavor],
[],
]
self.compute_client.flavors = self.api_mock
self.compute_client.flavors.side_effect = [[flavor], []]
self.compute_client.fetch_flavor_extra_specs = mock.Mock(
return_value=None
)
@@ -744,17 +745,15 @@ class TestFlavorList(TestFlavor):
class TestFlavorSet(TestFlavor):
# Return value of self.compute_client.find_flavor().
flavor = compute_fakes.create_one_flavor(
attrs={'os-flavor-access:is_public': False}
)
project = identity_fakes.FakeProject.create_one_project()
def setUp(self):
super().setUp()
self.flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, is_public=False, extra_specs={'property': 'value'}
)
self.project = sdk_fakes.generate_fake_resource(_project.Project)
self.compute_client.find_flavor.return_value = self.flavor
# Return a project
self.projects_mock.get.return_value = self.project
self.cmd = flavor.SetFlavor(self.app, None)
@@ -960,46 +959,42 @@ class TestFlavorSet(TestFlavor):
class TestFlavorShow(TestFlavor):
# Return value of self.compute_client.find_flavor().
flavor_access = compute_fakes.create_one_flavor_access()
flavor = compute_fakes.create_one_flavor()
columns = (
'OS-FLV-DISABLED:disabled',
'OS-FLV-EXT-DATA:ephemeral',
'access_project_ids',
'description',
'disk',
'id',
'name',
'os-flavor-access:is_public',
'properties',
'ram',
'rxtx_factor',
'swap',
'vcpus',
)
data = (
flavor.is_disabled,
flavor.ephemeral,
None,
flavor.description,
flavor.disk,
flavor.id,
flavor.name,
flavor.is_public,
format_columns.DictColumn(flavor.extra_specs),
flavor.ram,
flavor.rxtx_factor,
flavor.swap,
flavor.vcpus,
)
def setUp(self):
super().setUp()
# Return value of _find_resource()
self.flavor_access = compute_fakes.create_one_flavor_access()
self.flavor = sdk_fakes.generate_fake_resource(_flavor.Flavor)
self.columns = (
'OS-FLV-DISABLED:disabled',
'OS-FLV-EXT-DATA:ephemeral',
'access_project_ids',
'description',
'disk',
'id',
'name',
'os-flavor-access:is_public',
'properties',
'ram',
'rxtx_factor',
'swap',
'vcpus',
)
self.data = (
self.flavor.is_disabled,
self.flavor.ephemeral,
None,
self.flavor.description,
self.flavor.disk,
self.flavor.id,
self.flavor.name,
self.flavor.is_public,
format_columns.DictColumn(self.flavor.extra_specs),
self.flavor.ram,
self.flavor.rxtx_factor,
self.flavor.swap,
self.flavor.vcpus,
)
self.compute_client.find_flavor.return_value = self.flavor
self.compute_client.get_flavor_access.return_value = [
self.flavor_access
@@ -1035,10 +1030,8 @@ class TestFlavorShow(TestFlavor):
self.assertCountEqual(self.data, data)
def test_private_flavor_show(self):
private_flavor = compute_fakes.create_one_flavor(
attrs={
'os-flavor-access:is_public': False,
}
private_flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, is_public=False
)
self.compute_client.find_flavor.return_value = private_flavor
@@ -1077,23 +1070,18 @@ class TestFlavorShow(TestFlavor):
class TestFlavorUnset(TestFlavor):
# Return value of self.compute_client.find_flavor().
flavor = compute_fakes.create_one_flavor(
attrs={'os-flavor-access:is_public': False}
)
project = identity_fakes.FakeProject.create_one_project()
def setUp(self):
super().setUp()
self.compute_client.find_flavor.return_value = self.flavor
# Return a project
self.projects_mock.get.return_value = self.project
self.cmd = flavor.UnsetFlavor(self.app, None)
self.mock_shortcut = (
self.compute_client.delete_flavor_extra_specs_property
self.flavor = sdk_fakes.generate_fake_resource(
_flavor.Flavor, is_public=False
)
self.project = sdk_fakes.generate_fake_resource(_project.Project)
self.compute_client.find_flavor.return_value = self.flavor
self.projects_mock.get.return_value = self.project
self.cmd = flavor.UnsetFlavor(self.app, None)
def test_flavor_unset_property(self):
arglist = ['--property', 'property', 'baremetal']
@@ -1107,7 +1095,9 @@ class TestFlavorUnset(TestFlavor):
self.compute_client.find_flavor.assert_called_with(
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
)
self.mock_shortcut.assert_called_with(self.flavor.id, 'property')
self.compute_client.delete_flavor_extra_specs_property.assert_called_with(
self.flavor.id, 'property'
)
self.compute_client.flavor_remove_tenant_access.assert_not_called()
self.assertIsNone(result)
@@ -1126,21 +1116,16 @@ class TestFlavorUnset(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.compute_client.find_flavor.assert_called_with(
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
)
calls = [
mock.call(self.flavor.id, 'property1'),
mock.call(self.flavor.id, 'property2'),
]
self.mock_shortcut.assert_has_calls(calls)
# A bit tricky way to ensure we do not unset other properties
calls.append(mock.call(self.flavor.id, 'property'))
self.assertRaises(
AssertionError, self.mock_shortcut.assert_has_calls, calls
self.compute_client.delete_flavor_extra_specs_property.assert_has_calls(
[
mock.call(self.flavor.id, 'property1'),
mock.call(self.flavor.id, 'property2'),
]
)
self.compute_client.flavor_remove_tenant_access.assert_not_called()
def test_flavor_unset_project(self):