Clean up osc fakes and mocks

The original fakes included a lot of unneeded pasted code from
openstackclient. This change replaces the client with a single
MagicMock, and deletes unused fakes classes.

Since the base client is a magic mock, a significant amount of mock
object creation has been replaced with the magic equivalent.

This change actually revealed a faulty test,
test_deployment_config_delete_failed should be asserting that deleting
the derived config is best-effort and does not raise an error.

Change-Id: I11be97603b2d42ea70dde7d936e11d15e7f5709e
This commit is contained in:
Steve Baker
2016-02-17 16:48:52 +13:00
parent bcbbbc9e2c
commit 7299dd2fde
12 changed files with 107 additions and 387 deletions

View File

@@ -14,153 +14,11 @@
#
import json
import sys
from oslo_utils import reflection
import requests
import six
AUTH_TOKEN = "foobar"
AUTH_URL = "http://0.0.0.0"
USERNAME = "itchy"
PASSWORD = "scratchy"
TEST_RESPONSE_DICT = {
"access": {
"metadata": {
"is_admin": 0,
"roles": [
"1234",
]
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": AUTH_URL + "/v2.0",
"id": "1234",
"internalURL": AUTH_URL + "/v2.0",
"publicURL": AUTH_URL + "/v2.0",
"region": "RegionOne"
}
],
"endpoints_links": [],
"name": "keystone",
"type": "identity"
}
],
"token": {
"expires": "2035-01-01T00:00:01Z",
"id": AUTH_TOKEN,
"issued_at": "2013-01-01T00:00:01.692048",
"tenant": {
"description": None,
"enabled": True,
"id": "1234",
"name": "testtenant"
}
},
"user": {
"id": "5678",
"name": USERNAME,
"roles": [
{
"name": "testrole"
},
],
"roles_links": [],
"username": USERNAME
}
}
}
TEST_RESPONSE_DICT_V3 = {
"token": {
"audit_ids": [
"a"
],
"catalog": [
],
"expires_at": "2034-09-29T18:27:15.978064Z",
"extras": {},
"issued_at": "2014-09-29T17:27:15.978097Z",
"methods": [
"password"
],
"project": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "bbb",
"name": "project"
},
"roles": [
],
"user": {
"domain": {
"id": "default",
"name": "Default"
},
"id": "aaa",
"name": USERNAME
}
}
}
TEST_VERSIONS = {
"versions": {
"values": [
{
"id": "v3.0",
"links": [
{
"href": AUTH_URL,
"rel": "self"
}
],
"media-types": [
{
"base": "application/json",
"type": "application/vnd.openstack.identity-v3+json"
},
{
"base": "application/xml",
"type": "application/vnd.openstack.identity-v3+xml"
}
],
"status": "stable",
"updated": "2013-03-06T00:00:00Z"
},
{
"id": "v2.0",
"links": [
{
"href": AUTH_URL,
"rel": "self"
},
{
"href": "http://docs.openstack.org/",
"rel": "describedby",
"type": "text/html"
}
],
"media-types": [
{
"base": "application/json",
"type": "application/vnd.openstack.identity-v2.0+json"
},
{
"base": "application/xml",
"type": "application/vnd.openstack.identity-v2.0+xml"
}
],
"status": "stable",
"updated": "2014-04-17T00:00:00Z"
}
]
}
}
class FakeStdout(object):
def __init__(self):
self.content = []
@@ -175,58 +33,6 @@ class FakeStdout(object):
return result
class FakeApp(object):
def __init__(self, _stdout):
self.stdout = _stdout
self.client_manager = None
self.stdin = sys.stdin
self.stdout = _stdout or sys.stdout
self.stderr = sys.stderr
class FakeClient(object):
def __init__(self, **kwargs):
self.endpoint = kwargs['endpoint']
self.token = kwargs['token']
class FakeClientManager(object):
def __init__(self):
self.compute = None
self.identity = None
self.image = None
self.object_store = None
self.volume = None
self.network = None
self.session = None
self.auth_ref = None
class FakeModule(object):
def __init__(self, name, version):
self.name = name
self.__version__ = version
class FakeResource(object):
def __init__(self, manager, info, loaded=False):
self.manager = manager
self._info = info
self._add_details(info)
self._loaded = loaded
def _add_details(self, info):
for (k, v) in six.iteritems(info):
setattr(self, k, v)
def __repr__(self):
reprkeys = sorted(k for k in self.__dict__.keys() if k[0] != '_' and
k != 'manager')
info = ", ".join("%s=%s" % (k, getattr(self, k)) for k in reprkeys)
class_name = reflection.get_class_name(self, fully_qualified=False)
return "<%s %s>" % (class_name, info)
class FakeResponse(requests.Response):
def __init__(self, headers={}, status_code=200, data=None, encoding=None):
super(FakeResponse, self).__init__()

View File

@@ -17,6 +17,7 @@
import os
import fixtures
import mock
import sys
import testtools
@@ -76,8 +77,10 @@ class TestCommand(TestCase):
super(TestCommand, self).setUp()
# Build up a fake app
self.fake_stdout = fakes.FakeStdout()
self.app = fakes.FakeApp(self.fake_stdout)
self.app.client_manager = fakes.FakeClientManager()
self.app = mock.MagicMock()
self.app.stdout = self.fake_stdout
self.app.stdin = sys.stdin
self.app.stderr = sys.stderr
def check_parser(self, cmd, args, verify_args):
cmd_parser = cmd.get_parser('check_parser')

View File

@@ -15,33 +15,11 @@
import mock
from heatclient.tests.unit.osc import fakes
from heatclient.tests.unit.osc import utils
class FakeOrchestrationv1Client(object):
def __init__(self, **kwargs):
self.http_client = mock.Mock()
self.http_client.auth_token = kwargs['token']
self.http_client.management_url = kwargs['endpoint']
self.stacks = mock.Mock()
self.stacks.list = mock.Mock(return_value=[])
self.resources = fakes.FakeResource(None, {})
self.resource_types = fakes.FakeResource(None, {})
self.events = fakes.FakeResource(None, {})
self.actions = fakes.FakeResource(None, {})
self.build_info = fakes.FakeResource(None, {})
self.services = fakes.FakeResource(None, {})
self.software_deployments = fakes.FakeResource(None, {})
self.software_configs = fakes.FakeResource(None, {})
self.template_versions = fakes.FakeResource(None, {})
class TestOrchestrationv1(utils.TestCommand):
def setUp(self):
super(TestOrchestrationv1, self).setUp()
self.app.client_manager.orchestration = FakeOrchestrationv1Client(
endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN,
)
self.app.client_manager.orchestration = mock.MagicMock()

View File

@@ -61,10 +61,7 @@ class TestEventShow(TestEvent):
def test_event_show(self):
arglist = ['--format', self.format, 'my_stack', 'my_resource', '1234']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.get = mock.MagicMock()
self.resource_client.get = mock.MagicMock()
self.event_client.get = mock.MagicMock(
return_value=events.Event(None, self.response))
self.event_client.get.return_value = events.Event(None, self.response)
self.cmd.take_action(parsed_args)
@@ -83,23 +80,17 @@ class TestEventShow(TestEvent):
def test_event_show_stack_not_found(self):
error = 'Stack not found'
self.stack_client.get = mock.MagicMock(
side_effect=exc.HTTPNotFound(error))
self.stack_client.get.side_effect = exc.HTTPNotFound(error)
self._test_not_found(error)
def test_event_show_resource_not_found(self):
error = 'Resource not found'
self.stack_client.get = mock.MagicMock()
self.resource_client.get = mock.MagicMock(
side_effect=exc.HTTPNotFound(error))
self.stack_client.get.side_effect = exc.HTTPNotFound(error)
self._test_not_found(error)
def test_event_show_event_not_found(self):
error = 'Event not found'
self.stack_client.get = mock.MagicMock()
self.resource_client.get = mock.MagicMock()
self.event_client.get = mock.MagicMock(
side_effect=exc.HTTPNotFound(error))
self.stack_client.get.side_effect = exc.HTTPNotFound(error)
self._test_not_found(error)
@@ -142,8 +133,8 @@ class TestEventList(TestEvent):
super(TestEventList, self).setUp()
self.cmd = event.ListEvent(self.app, None)
self.event = self.MockEvent()
self.event_client.list = mock.MagicMock(return_value=[self.event])
self.resource_client.list = mock.MagicMock(return_value={})
self.event_client.list.return_value = [self.event]
self.resource_client.list.return_value = {}
def test_event_list_defaults(self):
arglist = ['my_stack', '--format', 'table']

View File

@@ -51,8 +51,8 @@ class TestStackResourceShow(TestResource):
def setUp(self):
super(TestStackResourceShow, self).setUp()
self.cmd = resource.ResourceShow(self.app, None)
self.resource_client.get = mock.MagicMock(
return_value=v1_resources.Resource(None, self.response))
self.resource_client.get.return_value = v1_resources.Resource(
None, self.response)
def test_resource_show(self):
arglist = ['my_stack', 'my_resource']
@@ -119,8 +119,8 @@ class TestStackResourceList(TestResource):
def setUp(self):
super(TestStackResourceList, self).setUp()
self.cmd = resource.ResourceList(self.app, None)
self.resource_client.list = mock.MagicMock(
return_value=[v1_resources.Resource(None, self.response)])
self.resource_client.list.return_value = [
v1_resources.Resource(None, self.response)]
def test_resource_list(self):
arglist = ['my_stack']
@@ -220,7 +220,7 @@ class TestResourceMetadata(TestResource):
def setUp(self):
super(TestResourceMetadata, self).setUp()
self.cmd = resource.ResourceMetadata(self.app, None)
self.resource_client.metadata = mock.Mock(return_value={})
self.resource_client.metadata.return_value = {}
def test_resource_metadata(self):
arglist = ['my_stack', 'my_resource']
@@ -243,8 +243,7 @@ class TestResourceMetadata(TestResource):
def test_resource_metadata_error(self):
arglist = ['my_stack', 'my_resource']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.resource_client.metadata = mock.Mock(
side_effect=heat_exc.HTTPNotFound)
self.resource_client.metadata.side_effect = heat_exc.HTTPNotFound
error = self.assertRaises(exc.CommandError,
self.cmd.take_action,
parsed_args)
@@ -257,7 +256,6 @@ class TestResourceSignal(TestResource):
def setUp(self):
super(TestResourceSignal, self).setUp()
self.cmd = resource.ResourceSignal(self.app, None)
self.resource_client.signal = mock.Mock()
def test_resource_signal(self):
arglist = ['my_stack', 'my_resource']
@@ -271,8 +269,7 @@ class TestResourceSignal(TestResource):
def test_resource_signal_error(self):
arglist = ['my_stack', 'my_resource']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.resource_client.signal = mock.Mock(
side_effect=heat_exc.HTTPNotFound)
self.resource_client.signal.side_effect = heat_exc.HTTPNotFound
error = self.assertRaises(exc.CommandError,
self.cmd.take_action,
parsed_args)

View File

@@ -11,8 +11,6 @@
# under the License.
#
import mock
from openstackclient.common import exceptions as exc
from heatclient import exc as heat_exc
@@ -32,10 +30,8 @@ class TestResourceTypeShow(TestResourceType):
def setUp(self):
super(TestResourceTypeShow, self).setUp()
self.cmd = resource_type.ResourceTypeShow(self.app, None)
self.mock_client.resource_types.get = mock.Mock(
return_value={})
self.mock_client.resource_types.generate_template = mock.Mock(
return_value={})
self.mock_client.resource_types.get.return_value = {}
self.mock_client.resource_types.generate_template.return_value = {}
def test_resourcetype_show(self):
arglist = ['OS::Heat::None']
@@ -55,16 +51,15 @@ class TestResourceTypeShow(TestResourceType):
def test_resourcetype_show_error_get(self):
arglist = ['OS::Heat::None']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.resource_types.get = mock.Mock(
side_effect=heat_exc.HTTPNotFound)
self.mock_client.resource_types.get.side_effect = heat_exc.HTTPNotFound
self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
def test_resourcetype_show_error_template(self):
arglist = ['OS::Heat::None',
'--template-type', 'hot']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.resource_types.generate_template = mock.Mock(
side_effect=heat_exc.HTTPNotFound)
self.mock_client.resource_types.generate_template.side_effect = \
heat_exc.HTTPNotFound
self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
def test_resourcetype_show_template_hot(self):
@@ -119,8 +114,7 @@ class TestTypeList(TestResourceType):
def setUp(self):
super(TestTypeList, self).setUp()
self.cmd = resource_type.ResourceTypeList(self.app, None)
self.mock_client.resource_types.list = mock.Mock(
return_value=self.list_response)
self.mock_client.resource_types.list.return_value = self.list_response
def test_resourcetype_list(self):
arglist = []

View File

@@ -11,8 +11,6 @@
# under the License.
#
import mock
from heatclient.osc.v1 import service as osc_service
from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes
@@ -54,8 +52,7 @@ class TestServiceList(orchestration_fakes.TestOrchestrationv1):
super(TestServiceList, self).setUp()
self.cmd = osc_service.ListService(self.app, None)
self.mock_client = self.app.client_manager.orchestration
self.mock_client.services.list = mock.Mock(
return_value=self.response)
self.mock_client.services.list.return_value = self.response
def test_service_list(self):
arglist = []

View File

@@ -11,8 +11,6 @@
# under the License.
#
import mock
from openstackclient.common import exceptions as exc
from heatclient import exc as heat_exc
@@ -31,9 +29,7 @@ class TestListSnapshot(TestStack):
def setUp(self):
super(TestListSnapshot, self).setUp()
self.cmd = snapshot.ListSnapshot(self.app, None)
self.stack_client.snapshot_list = mock.Mock(
return_value={'snapshots': []}
)
self.stack_client.snapshot_list.return_value = {'snapshots': []}
def test_snapshot_list(self):
arglist = ['my_stack']
@@ -62,8 +58,7 @@ class TestSnapshotShow(TestStack):
def test_snapshot_show(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot_show = mock.Mock(
return_value={})
self.stack_client.snapshot_show.return_value = {}
self.cmd.take_action(parsed_args)
self.stack_client.snapshot_show.assert_called_with(
'my_stack', 'snapshot_id')
@@ -71,8 +66,7 @@ class TestSnapshotShow(TestStack):
def test_snapshot_not_found(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot_show = mock.Mock(
side_effect=heat_exc.HTTPNotFound())
self.stack_client.snapshot_show.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
@@ -83,7 +77,6 @@ class TestRestoreSnapshot(TestStack):
def setUp(self):
super(TestRestoreSnapshot, self).setUp()
self.cmd = snapshot.RestoreSnapshot(self.app, None)
self.stack_client.restore = mock.Mock()
def test_snapshot_restore(self):
arglist = ['my_stack', 'my_snapshot']
@@ -121,8 +114,7 @@ class TestSnapshotCreate(TestStack):
def test_snapshot_create(self):
arglist = ['my_stack', '--name', 'test_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot = mock.Mock(
return_value=self.get_response)
self.stack_client.snapshot.return_value = self.get_response
self.cmd.take_action(parsed_args)
self.stack_client.snapshot.assert_called_with(
'my_stack', 'test_snapshot')
@@ -130,8 +122,7 @@ class TestSnapshotCreate(TestStack):
def test_snapshot_create_no_name(self):
arglist = ['my_stack']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot = mock.Mock(
return_value=self.get_response)
self.stack_client.snapshot.return_value = self.get_response
self.cmd.take_action(parsed_args)
self.stack_client.snapshot.assert_called_with(
'my_stack', None)
@@ -139,8 +130,7 @@ class TestSnapshotCreate(TestStack):
def test_snapshot_create_error(self):
arglist = ['my_stack', '--name', 'test_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot = mock.Mock(
side_effect=heat_exc.HTTPNotFound)
self.stack_client.snapshot.side_effect = heat_exc.HTTPNotFound
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
@@ -155,7 +145,6 @@ class TestSnapshotDelete(TestStack):
def test_snapshot_delete(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot_delete = mock.Mock()
self.cmd.take_action(parsed_args)
self.stack_client.snapshot_delete.assert_called_with(
'my_stack', 'snapshot_id')
@@ -163,8 +152,7 @@ class TestSnapshotDelete(TestStack):
def test_snapshot_delete_not_found(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot_delete = mock.Mock(
side_effect=heat_exc.HTTPNotFound())
self.stack_client.snapshot_delete.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,

View File

@@ -33,8 +33,7 @@ class TestDeleteConfig(TestConfig):
def setUp(self):
super(TestDeleteConfig, self).setUp()
self.cmd = software_config.DeleteConfig(self.app, None)
self.mock_delete = mock.Mock()
self.mock_client.software_configs.delete = self.mock_delete
self.mock_delete = self.mock_client.software_configs.delete
def test_config_delete(self):
arglist = ['id_123']
@@ -71,8 +70,8 @@ class TestListConfig(TestConfig):
def setUp(self):
super(TestListConfig, self).setUp()
self.cmd = software_config.ListConfig(self.app, None)
self.mock_client.software_configs.list = mock.Mock(
return_value=[software_configs.SoftwareConfig(None, {})])
self.mock_client.software_configs.list.return_value = [
software_configs.SoftwareConfig(None, {})]
def test_config_list(self):
arglist = []
@@ -99,9 +98,8 @@ class TestCreateConfig(TestConfig):
def setUp(self):
super(TestCreateConfig, self).setUp()
self.cmd = software_config.CreateConfig(self.app, None)
self.mock_client.stacks.validate = mock.Mock()
self.mock_client.software_configs.create = mock.Mock(
return_value=software_configs.SoftwareConfig(None, {}))
self.mock_client.software_configs.create.return_value = \
software_configs.SoftwareConfig(None, {})
def test_config_create(self):
properties = {
@@ -239,9 +237,8 @@ class TestConfigShow(TestConfig):
def setUp(self):
super(TestConfigShow, self).setUp()
self.cmd = software_config.ShowConfig(self.app, None)
self.mock_client.software_configs.get = mock.Mock(
return_value=software_configs.SoftwareConfig(None,
self.response))
self.mock_client.software_configs.get.return_value = \
software_configs.SoftwareConfig(None, self.response)
def test_config_show(self):
arglist = ['96dfee3f-27b7-42ae-a03e-966226871ae6']
@@ -266,8 +263,8 @@ class TestConfigShow(TestConfig):
def test_config_show_not_found(self):
arglist = ['96dfee3f-27b7-42ae-a03e-966226871ae6']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.mock_client.software_configs.get = mock.Mock(
side_effect=heat_exc.HTTPNotFound())
self.mock_client.software_configs.get.side_effect = \
heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,

View File

@@ -110,12 +110,12 @@ class TestDeploymentCreate(TestDeployment):
def setUp(self):
super(TestDeploymentCreate, self).setUp()
self.cmd = software_deployment.CreateDeployment(self.app, None)
self.config_client.create = mock.MagicMock(return_value=(
software_configs.SoftwareConfig(None, self.config)))
self.config_client.get = mock.MagicMock(return_value=(
software_configs.SoftwareConfig(None, self.config)))
self.sd_client.create = mock.MagicMock(return_value=(
software_deployments.SoftwareDeployment(None, self.deployment)))
self.config_client.create.return_value = \
software_configs.SoftwareConfig(None, self.config)
self.config_client.get.return_value = \
software_configs.SoftwareConfig(None, self.config)
self.sd_client.create.return_value = \
software_deployments.SoftwareDeployment(None, self.deployment)
@mock.patch('heatclient.common.deployment_utils.build_signal_id',
return_value='signal_id')
@@ -226,8 +226,6 @@ class TestDeploymentDelete(TestDeployment):
def test_deployment_delete_success(self):
arglist = ['test_deployment']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock()
self.sd_client.delete = mock.Mock()
self.cmd.take_action(parsed_args)
self.sd_client.delete.assert_called_with(
deployment_id='test_deployment')
@@ -235,8 +233,6 @@ class TestDeploymentDelete(TestDeployment):
def test_deployment_delete_multiple(self):
arglist = ['test_deployment', 'test_deployment2']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock()
self.sd_client.delete = mock.Mock()
self.cmd.take_action(parsed_args)
self.sd_client.delete.assert_has_calls(
[mock.call(deployment_id='test_deployment'),
@@ -245,7 +241,6 @@ class TestDeploymentDelete(TestDeployment):
def test_deployment_delete_not_found(self):
arglist = ['test_deployment', 'test_deployment2']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.delete = mock.Mock()
self.sd_client.delete.side_effect = heat_exc.HTTPNotFound()
error = self.assertRaises(
exc.CommandError, self.cmd.take_action, parsed_args)
@@ -254,12 +249,8 @@ class TestDeploymentDelete(TestDeployment):
def test_deployment_config_delete_failed(self):
arglist = ['test_deployment']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.config_client.delete = mock.Mock()
self.config_client.delete.side_effect = heat_exc.HTTPNotFound()
error = self.assertRaises(
exc.CommandError, self.cmd.take_action, parsed_args)
self.assertEqual("Unable to delete 1 of the 1 deployments.",
str(error))
self.assertIsNone(self.cmd.take_action(parsed_args))
class TestDeploymentList(TestDeployment):
@@ -350,9 +341,9 @@ class TestDeploymentShow(TestDeployment):
'updated_time', 'status', 'status_reason',
'input_values', 'action']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock(
return_value=software_deployments.SoftwareDeployment(
None, self.get_response))
self.sd_client.get.return_value = \
software_deployments.SoftwareDeployment(
None, self.get_response)
columns, data = self.cmd.take_action(parsed_args)
self.sd_client.get.assert_called_with(**{
'deployment_id': 'my_deployment',
@@ -365,9 +356,9 @@ class TestDeploymentShow(TestDeployment):
'updated_time', 'status', 'status_reason',
'input_values', 'action', 'output_values']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock(
return_value=software_deployments.SoftwareDeployment(
None, self.get_response))
self.sd_client.get.return_value = \
software_deployments.SoftwareDeployment(
None, self.get_response)
columns, data = self.cmd.take_action(parsed_args)
self.sd_client.get.assert_called_once_with(**{
'deployment_id': 'my_deployment',
@@ -377,7 +368,6 @@ class TestDeploymentShow(TestDeployment):
def test_deployment_not_found(self):
arglist = ['my_deployment']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock()
self.sd_client.get.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
@@ -390,7 +380,7 @@ class TestDeploymentMetadataShow(TestDeployment):
def setUp(self):
super(TestDeploymentMetadataShow, self).setUp()
self.cmd = software_deployment.ShowMetadataDeployment(self.app, None)
self.sd_client.metadata = mock.Mock(return_value={})
self.sd_client.metadata.return_value = {}
def test_deployment_show_metadata(self):
arglist = ['ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5']
@@ -422,9 +412,9 @@ class TestDeploymentOutputShow(TestDeployment):
def test_deployment_output_show(self):
arglist = ['85c3a507-351b-4b28-a7d8-531c8d53f4e6', '--all', '--long']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock(
return_value=software_deployments.SoftwareDeployment(
None, self.get_response))
self.sd_client.get.return_value = \
software_deployments.SoftwareDeployment(
None, self.get_response)
self.cmd.take_action(parsed_args)
self.sd_client.get.assert_called_with(**{
'deployment_id': '85c3a507-351b-4b28-a7d8-531c8d53f4e6'
@@ -433,7 +423,6 @@ class TestDeploymentOutputShow(TestDeployment):
def test_deployment_output_show_invalid(self):
arglist = ['85c3a507-351b-4b28-a7d8-531c8d53f4e6']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock()
error = self.assertRaises(
exc.CommandError,
self.cmd.take_action,
@@ -444,7 +433,6 @@ class TestDeploymentOutputShow(TestDeployment):
def test_deployment_output_show_not_found(self):
arglist = ['85c3a507-351b-4b28-a7d8-531c8d53f4e6', '--all']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.sd_client.get = mock.Mock()
self.sd_client.get.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,

View File

@@ -56,12 +56,12 @@ class TestStackCreate(TestStack):
def setUp(self):
super(TestStackCreate, self).setUp()
self.cmd = stack.CreateStack(self.app, None)
self.stack_client.create = mock.MagicMock(
return_value={'stack': {'id': '1234'}})
self.stack_client.get = mock.MagicMock(
return_value={'stack_status': 'create_complete'})
self.stack_client.preview = mock.MagicMock(
return_value=stacks.Stack(None, {'stack': {'id', '1234'}}))
self.stack_client.create.return_value = {'stack': {'id': '1234'}}
self.stack_client.get.return_value = {
'stack_status': 'create_complete'}
self.stack_client.preview.return_value = stacks.Stack(
None, {'stack': {'id', '1234'}})
stack._authenticated_fetcher = mock.MagicMock()
def test_stack_create_defaults(self):
arglist = ['my_stack', '-t', self.template_path]
@@ -175,16 +175,15 @@ class TestStackUpdate(TestStack):
def setUp(self):
super(TestStackUpdate, self).setUp()
self.cmd = stack.UpdateStack(self.app, None)
self.stack_client.update = mock.MagicMock(
return_value={'stack': {'id': '1234'}})
self.stack_client.preview_update = mock.MagicMock(
return_value={'resource_changes': {'added': [],
'deleted': [],
'replaced': [],
'unchanged': [],
'updated': []}})
self.stack_client.get = mock.MagicMock(
return_value={'stack_status': 'create_complete'})
self.stack_client.update.return_value = {'stack': {'id': '1234'}}
self.stack_client.preview_update.return_value = {
'resource_changes': {'added': [],
'deleted': [],
'replaced': [],
'unchanged': [],
'updated': []}}
self.stack_client.get.return_value = {
'stack_status': 'create_complete'}
def test_stack_update_defaults(self):
arglist = ['my_stack', '-t', self.template_path]
@@ -384,8 +383,8 @@ class TestStackShow(TestStack):
def setUp(self):
super(TestStackShow, self).setUp()
self.cmd = stack.ShowStack(self.app, None)
self.stack_client.get = mock.Mock(
return_value=stacks.Stack(None, self.get_response))
self.stack_client.get.return_value = stacks.Stack(
None, self.get_response)
def test_stack_show(self):
arglist = ['--format', self.format, 'my_stack']
@@ -434,8 +433,7 @@ class TestStackList(TestStack):
def setUp(self):
super(TestStackList, self).setUp()
self.cmd = stack.ListStack(self.app, None)
self.stack_client.list = mock.MagicMock(
return_value=[stacks.Stack(None, self.data)])
self.stack_client.list.return_value = [stacks.Stack(None, self.data)]
utils.get_dict_properties = mock.MagicMock(return_value='')
def test_stack_list_defaults(self):
@@ -546,9 +544,7 @@ class TestStackDelete(TestStack):
def setUp(self):
super(TestStackDelete, self).setUp()
self.cmd = stack.DeleteStack(self.app, None)
self.stack_client.delete = mock.MagicMock()
self.stack_client.get = mock.MagicMock(
side_effect=heat_exc.HTTPNotFound)
self.stack_client.get.side_effect = heat_exc.HTTPNotFound
def test_stack_delete(self):
arglist = ['stack1', 'stack2', 'stack3']
@@ -661,8 +657,7 @@ class TestStackAdopt(TestStack):
def setUp(self):
super(TestStackAdopt, self).setUp()
self.cmd = stack.AdoptStack(self.app, None)
self.stack_client.create = mock.MagicMock(
return_value={'stack': {'id': '1234'}})
self.stack_client.create.return_value = {'stack': {'id': '1234'}}
def test_stack_adopt_defaults(self):
arglist = ['my_stack', '--adopt-file', self.adopt_file]
@@ -691,8 +686,8 @@ class TestStackAdopt(TestStack):
'Stack my_stack ADOPT_COMPLETE'))
def test_stack_adopt_wait(self, mock_poll):
arglist = ['my_stack', '--adopt-file', self.adopt_file, '--wait']
self.stack_client.get = mock.MagicMock(return_value=(
stacks.Stack(None, {'stack_status': 'ADOPT_COMPLETE'})))
self.stack_client.get.return_value = \
stacks.Stack(None, {'stack_status': 'ADOPT_COMPLETE'})
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
@@ -705,8 +700,8 @@ class TestStackAdopt(TestStack):
'Stack my_stack ADOPT_FAILED'))
def test_stack_adopt_wait_fail(self, mock_poll):
arglist = ['my_stack', '--adopt-file', self.adopt_file, '--wait']
self.stack_client.get = mock.MagicMock(return_value=(
stacks.Stack(None, {'stack_status': 'ADOPT_FAILED'})))
self.stack_client.get.return_value = \
stacks.Stack(None, {'stack_status': 'ADOPT_FAILED'})
parsed_args = self.check_parser(self.cmd, arglist, [])
self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
@@ -722,7 +717,7 @@ class TestStackAbandon(TestStack):
def setUp(self):
super(TestStackAbandon, self).setUp()
self.cmd = stack.AbandonStack(self.app, None)
self.stack_client.abandon = mock.MagicMock(return_value=self.response)
self.stack_client.abandon.return_value = self.response
def test_stack_abandon(self):
arglist = ['my_stack']
@@ -779,8 +774,7 @@ class TestStackOutputShow(TestStack):
def setUp(self):
super(TestStackOutputShow, self).setUp()
self.cmd = stack.OutputShowStack(self.app, None)
self.stack_client.get = mock.MagicMock(
return_value=stacks.Stack(None, self.response))
self.stack_client.get.return_value = stacks.Stack(None, self.response)
def test_stack_output_show_no_output(self):
arglist = ['my_stack']
@@ -811,8 +805,8 @@ class TestStackOutputShow(TestStack):
def test_stack_output_show_output(self):
arglist = ['my_stack', 'output1']
self.stack_client.output_show = mock.MagicMock(
return_value={'output': self.outputs[0]})
self.stack_client.output_show.return_value = {
'output': self.outputs[0]}
parsed_args = self.check_parser(self.cmd, arglist, [])
columns, outputs = self.cmd.take_action(parsed_args)
@@ -832,8 +826,8 @@ class TestStackOutputShow(TestStack):
def test_stack_output_show_output_error(self):
arglist = ['my_stack', 'output2']
self.stack_client.output_show = mock.MagicMock(
return_value={'output': self.outputs[1]})
self.stack_client.output_show.return_value = {
'output': self.outputs[1]}
parsed_args = self.check_parser(self.cmd, arglist, [])
error = self.assertRaises(exc.CommandError,
@@ -922,9 +916,9 @@ class TestStackTemplateShow(TestStack):
def test_stack_template_show_full_template(self):
arglist = ['my_stack']
self.stack_client.template = mock.MagicMock(
return_value=yaml.load(inline_templates.FULL_TEMPLATE,
Loader=template_format.yaml_loader))
self.stack_client.template.return_value = yaml.load(
inline_templates.FULL_TEMPLATE,
Loader=template_format.yaml_loader)
parsed_args = self.check_parser(self.cmd, arglist, [])
columns, outputs = self.cmd.take_action(parsed_args)
@@ -934,9 +928,9 @@ class TestStackTemplateShow(TestStack):
def test_stack_template_show_short_template(self):
arglist = ['my_stack']
self.stack_client.template = mock.MagicMock(
return_value=yaml.load(inline_templates.SHORT_TEMPLATE,
Loader=template_format.yaml_loader))
self.stack_client.template.return_value = yaml.load(
inline_templates.SHORT_TEMPLATE,
Loader=template_format.yaml_loader)
parsed_args = self.check_parser(self.cmd, arglist, [])
columns, outputs = self.cmd.take_action(parsed_args)
@@ -946,8 +940,7 @@ class TestStackTemplateShow(TestStack):
def test_stack_template_show_not_found(self):
arglist = ['my_stack']
self.stack_client.template = mock.MagicMock(
side_effect=heat_exc.HTTPNotFound)
self.stack_client.template.side_effect = heat_exc.HTTPNotFound
parsed_args = self.check_parser(self.cmd, arglist, [])
self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
@@ -969,9 +962,8 @@ class _TestStackCheckBase(object):
def _setUp(self, cmd, action, action_name=None):
self.cmd = cmd
self.action = action
self.mock_client.stacks.get = mock.Mock(
return_value=self.stack)
self.action_name = action_name
self.mock_client.stacks.get.return_value = self.stack
def _test_stack_action(self, get_call_count=1):
arglist = ['my_stack']
@@ -1041,7 +1033,6 @@ class TestStackSuspend(_TestStackCheckBase, TestStack):
def setUp(self):
super(TestStackSuspend, self).setUp()
self.mock_client.actions.suspend = mock.Mock()
self._setUp(
stack.SuspendStack(self.app, None),
self.mock_client.actions.suspend,
@@ -1068,7 +1059,6 @@ class TestStackResume(_TestStackCheckBase, TestStack):
def setUp(self):
super(TestStackResume, self).setUp()
self.mock_client.actions.resume = mock.Mock()
self._setUp(
stack.ResumeStack(self.app, None),
self.mock_client.actions.resume,
@@ -1103,14 +1093,13 @@ class TestStackCancel(_TestStackCheckBase, TestStack):
def setUp(self):
super(TestStackCancel, self).setUp()
self.mock_client.actions.cancel_update = mock.Mock()
self._setUp(
stack.CancelStack(self.app, None),
self.mock_client.actions.cancel_update,
'ROLLBACK'
)
self.mock_client.stacks.get = mock.Mock(
return_value=self.stack_update_in_progress)
self.mock_client.stacks.get.return_value = \
self.stack_update_in_progress
def test_stack_cancel(self):
self._test_stack_action(2)
@@ -1128,8 +1117,7 @@ class TestStackCancel(_TestStackCheckBase, TestStack):
self._test_stack_action_exception()
def test_stack_cancel_unsupported_state(self):
self.mock_client.stacks.get = mock.Mock(
return_value=self.stack)
self.mock_client.stacks.get.return_value = self.stack
error = self.assertRaises(exc.CommandError,
self._test_stack_action,
2)
@@ -1142,7 +1130,6 @@ class TestStackCheck(_TestStackCheckBase, TestStack):
def setUp(self):
super(TestStackCheck, self).setUp()
self.mock_client.actions.check = mock.Mock()
self._setUp(
stack.CheckStack(self.app, None),
self.mock_client.actions.check,
@@ -1219,12 +1206,9 @@ class TestStackHookPoll(TestStack):
def setUp(self):
super(TestStackHookPoll, self).setUp()
self.cmd = stack.StackHookPoll(self.app, None)
self.mock_client.stacks.get = mock.Mock(
return_value=self.stack)
self.mock_client.events.list = mock.Mock(
return_value=[self.event0, self.event1])
self.mock_client.resources.list = mock.Mock(
return_value=[self.resource])
self.mock_client.stacks.get.return_value = self.stack
self.mock_client.events.list.return_value = [self.event0, self.event1]
self.mock_client.resources.list.return_value = [self.resource]
def test_hook_poll(self):
expected_columns = ['Resource Name'] + self.columns
@@ -1267,11 +1251,8 @@ class TestStackHookClear(TestStack):
def setUp(self):
super(TestStackHookClear, self).setUp()
self.cmd = stack.StackHookClear(self.app, None)
self.mock_client.stacks.get = mock.Mock(
return_value=self.stack)
self.mock_client.resources.signal = mock.Mock()
self.mock_client.resources.list = mock.Mock(
return_value=[self.resource])
self.mock_client.stacks.get.return_value = self.stack
self.mock_client.resources.list.return_value = [self.resource]
def test_hook_clear(self):
arglist = ['my_stack', 'resource']

View File

@@ -38,7 +38,7 @@ class TestTemplateVersionList(TestTemplate):
super(TestTemplateVersionList, self).setUp()
tv1 = template_versions.TemplateVersion(None, self.defaults[0])
tv2 = template_versions.TemplateVersion(None, self.defaults[1])
self.template_versions.list = mock.MagicMock(return_value=[tv1, tv2])
self.template_versions.list.return_value = [tv1, tv2]
self.cmd = template.VersionList(self.app, None)
def test_version_list(self):
@@ -61,7 +61,7 @@ class TestTemplateFunctionList(TestTemplate):
super(TestTemplateFunctionList, self).setUp()
tv1 = template_versions.TemplateVersion(None, self.defaults[0])
tv2 = template_versions.TemplateVersion(None, self.defaults[1])
self.template_versions.get = mock.MagicMock(return_value=[tv1, tv2])
self.template_versions.get.return_value = [tv1, tv2]
self.cmd = template.FunctionList(self.app, None)
def test_function_list(self):