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:

committed by
Stephen Finucane

parent
d90e18b08c
commit
a312e9cdad
@@ -16,12 +16,13 @@ from unittest import mock
|
|||||||
|
|
||||||
from openstack.compute.v2 import flavor as _flavor
|
from openstack.compute.v2 import flavor as _flavor
|
||||||
from openstack import exceptions as sdk_exceptions
|
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.cli import format_columns
|
||||||
from osc_lib import exceptions
|
from osc_lib import exceptions
|
||||||
|
|
||||||
from openstackclient.compute.v2 import flavor
|
from openstackclient.compute.v2 import flavor
|
||||||
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
|
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
|
from openstackclient.tests.unit import utils as tests_utils
|
||||||
|
|
||||||
|
|
||||||
@@ -34,59 +35,60 @@ class TestFlavor(compute_fakes.TestComputev2):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorCreate(TestFlavor):
|
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):
|
def setUp(self):
|
||||||
super().setUp()
|
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.projects_mock.get.return_value = self.project
|
||||||
self.compute_client.create_flavor.return_value = self.flavor
|
self.compute_client.create_flavor.return_value = self.flavor
|
||||||
|
|
||||||
self.cmd = flavor.CreateFlavor(self.app, None)
|
self.cmd = flavor.CreateFlavor(self.app, None)
|
||||||
|
|
||||||
def test_flavor_create_default_options(self):
|
def test_flavor_create_default_options(self):
|
||||||
@@ -233,7 +235,7 @@ class TestFlavorCreate(TestFlavor):
|
|||||||
('vcpus', self.flavor.vcpus),
|
('vcpus', self.flavor.vcpus),
|
||||||
('rxtx_factor', self.flavor.rxtx_factor),
|
('rxtx_factor', self.flavor.rxtx_factor),
|
||||||
('public', False),
|
('public', False),
|
||||||
('description', 'description'),
|
('description', self.flavor.description),
|
||||||
('project', self.project.id),
|
('project', self.project.id),
|
||||||
('properties', {'key1': 'value1', 'key2': 'value2'}),
|
('properties', {'key1': 'value1', 'key2': 'value2'}),
|
||||||
('name', self.flavor.name),
|
('name', self.flavor.name),
|
||||||
@@ -328,7 +330,7 @@ class TestFlavorCreate(TestFlavor):
|
|||||||
str(self.flavor.vcpus),
|
str(self.flavor.vcpus),
|
||||||
'--rxtx-factor',
|
'--rxtx-factor',
|
||||||
str(self.flavor.rxtx_factor),
|
str(self.flavor.rxtx_factor),
|
||||||
'--private',
|
'--public',
|
||||||
'--description',
|
'--description',
|
||||||
'fake description',
|
'fake description',
|
||||||
self.flavor.name,
|
self.flavor.name,
|
||||||
@@ -341,7 +343,7 @@ class TestFlavorCreate(TestFlavor):
|
|||||||
('swap', self.flavor.swap),
|
('swap', self.flavor.swap),
|
||||||
('vcpus', self.flavor.vcpus),
|
('vcpus', self.flavor.vcpus),
|
||||||
('rxtx_factor', self.flavor.rxtx_factor),
|
('rxtx_factor', self.flavor.rxtx_factor),
|
||||||
('public', False),
|
('public', True),
|
||||||
('description', 'fake description'),
|
('description', 'fake description'),
|
||||||
('name', self.flavor.name),
|
('name', self.flavor.name),
|
||||||
]
|
]
|
||||||
@@ -358,14 +360,14 @@ class TestFlavorCreate(TestFlavor):
|
|||||||
'ephemeral': self.flavor.ephemeral,
|
'ephemeral': self.flavor.ephemeral,
|
||||||
'swap': self.flavor.swap,
|
'swap': self.flavor.swap,
|
||||||
'rxtx_factor': self.flavor.rxtx_factor,
|
'rxtx_factor': self.flavor.rxtx_factor,
|
||||||
'is_public': self.flavor.is_public,
|
'is_public': True,
|
||||||
'description': 'fake description',
|
'description': 'fake description',
|
||||||
}
|
}
|
||||||
|
|
||||||
self.compute_client.create_flavor.assert_called_once_with(**args)
|
self.compute_client.create_flavor.assert_called_once_with(**args)
|
||||||
|
|
||||||
self.assertEqual(self.columns, columns)
|
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):
|
def test_flavor_create_with_description_pre_v255(self):
|
||||||
self.set_compute_api_version('2.54')
|
self.set_compute_api_version('2.54')
|
||||||
@@ -395,11 +397,13 @@ class TestFlavorCreate(TestFlavor):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorDelete(TestFlavor):
|
class TestFlavorDelete(TestFlavor):
|
||||||
flavors = compute_fakes.create_flavors(count=2)
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
|
self.flavors = list(
|
||||||
|
sdk_fakes.generate_fake_resources(_flavor.Flavor, 2)
|
||||||
|
)
|
||||||
|
|
||||||
self.compute_client.delete_flavor.return_value = None
|
self.compute_client.delete_flavor.return_value = None
|
||||||
|
|
||||||
self.cmd = flavor.DeleteFlavor(self.app, None)
|
self.cmd = flavor.DeleteFlavor(self.app, None)
|
||||||
@@ -474,51 +478,50 @@ class TestFlavorDelete(TestFlavor):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorList(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):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
self.api_mock = mock.Mock()
|
self._flavor = sdk_fakes.generate_fake_resource(
|
||||||
self.api_mock.side_effect = [
|
_flavor.Flavor, extra_specs={'property': 'value'}
|
||||||
[self._flavor],
|
)
|
||||||
[],
|
|
||||||
]
|
|
||||||
|
|
||||||
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)
|
self.cmd = flavor.ListFlavor(self.app, None)
|
||||||
|
|
||||||
def test_flavor_list_no_options(self):
|
def test_flavor_list_no_options(self):
|
||||||
@@ -653,7 +656,9 @@ class TestFlavorList(TestFlavor):
|
|||||||
|
|
||||||
def test_flavor_list_long_no_extra_specs(self):
|
def test_flavor_list_long_no_extra_specs(self):
|
||||||
# use flavor with no extra specs for this test
|
# 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 = (
|
self.data = (
|
||||||
(
|
(
|
||||||
flavor.id,
|
flavor.id,
|
||||||
@@ -673,12 +678,8 @@ class TestFlavorList(TestFlavor):
|
|||||||
format_columns.DictColumn(flavor.extra_specs),
|
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(
|
self.compute_client.fetch_flavor_extra_specs = mock.Mock(
|
||||||
return_value=None
|
return_value=None
|
||||||
)
|
)
|
||||||
@@ -744,17 +745,15 @@ class TestFlavorList(TestFlavor):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorSet(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):
|
def setUp(self):
|
||||||
super().setUp()
|
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
|
self.compute_client.find_flavor.return_value = self.flavor
|
||||||
# Return a project
|
|
||||||
self.projects_mock.get.return_value = self.project
|
self.projects_mock.get.return_value = self.project
|
||||||
self.cmd = flavor.SetFlavor(self.app, None)
|
self.cmd = flavor.SetFlavor(self.app, None)
|
||||||
|
|
||||||
@@ -960,46 +959,42 @@ class TestFlavorSet(TestFlavor):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorShow(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):
|
def setUp(self):
|
||||||
super().setUp()
|
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.find_flavor.return_value = self.flavor
|
||||||
self.compute_client.get_flavor_access.return_value = [
|
self.compute_client.get_flavor_access.return_value = [
|
||||||
self.flavor_access
|
self.flavor_access
|
||||||
@@ -1035,10 +1030,8 @@ class TestFlavorShow(TestFlavor):
|
|||||||
self.assertCountEqual(self.data, data)
|
self.assertCountEqual(self.data, data)
|
||||||
|
|
||||||
def test_private_flavor_show(self):
|
def test_private_flavor_show(self):
|
||||||
private_flavor = compute_fakes.create_one_flavor(
|
private_flavor = sdk_fakes.generate_fake_resource(
|
||||||
attrs={
|
_flavor.Flavor, is_public=False
|
||||||
'os-flavor-access:is_public': False,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
self.compute_client.find_flavor.return_value = private_flavor
|
self.compute_client.find_flavor.return_value = private_flavor
|
||||||
|
|
||||||
@@ -1077,23 +1070,18 @@ class TestFlavorShow(TestFlavor):
|
|||||||
|
|
||||||
|
|
||||||
class TestFlavorUnset(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):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
self.compute_client.find_flavor.return_value = self.flavor
|
self.flavor = sdk_fakes.generate_fake_resource(
|
||||||
# Return a project
|
_flavor.Flavor, is_public=False
|
||||||
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.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):
|
def test_flavor_unset_property(self):
|
||||||
arglist = ['--property', 'property', 'baremetal']
|
arglist = ['--property', 'property', 'baremetal']
|
||||||
@@ -1107,7 +1095,9 @@ class TestFlavorUnset(TestFlavor):
|
|||||||
self.compute_client.find_flavor.assert_called_with(
|
self.compute_client.find_flavor.assert_called_with(
|
||||||
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
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.compute_client.flavor_remove_tenant_access.assert_not_called()
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
@@ -1126,21 +1116,16 @@ class TestFlavorUnset(TestFlavor):
|
|||||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.compute_client.find_flavor.assert_called_with(
|
self.compute_client.find_flavor.assert_called_with(
|
||||||
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
parsed_args.flavor, get_extra_specs=True, ignore_missing=False
|
||||||
)
|
)
|
||||||
calls = [
|
self.compute_client.delete_flavor_extra_specs_property.assert_has_calls(
|
||||||
mock.call(self.flavor.id, 'property1'),
|
[
|
||||||
mock.call(self.flavor.id, 'property2'),
|
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.flavor_remove_tenant_access.assert_not_called()
|
self.compute_client.flavor_remove_tenant_access.assert_not_called()
|
||||||
|
|
||||||
def test_flavor_unset_project(self):
|
def test_flavor_unset_project(self):
|
||||||
|
Reference in New Issue
Block a user