python-heatclient/heatclient/tests/unit/osc/v1/test_snapshot.py

187 lines
6.9 KiB
Python

# 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 unittest import mock
from osc_lib import exceptions as exc
import six
from heatclient import exc as heat_exc
from heatclient.osc.v1 import snapshot
from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes
class TestStack(orchestration_fakes.TestOrchestrationv1):
def setUp(self):
super(TestStack, self).setUp()
self.mock_client = self.app.client_manager.orchestration
self.stack_client = self.app.client_manager.orchestration.stacks
class TestListSnapshot(TestStack):
def setUp(self):
super(TestListSnapshot, self).setUp()
self.cmd = snapshot.ListSnapshot(self.app, None)
self.stack_client.snapshot_list.return_value = {'snapshots': []}
def test_snapshot_list(self):
arglist = ['my_stack']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
self.stack_client.snapshot_list.assert_called_with(
stack_id='my_stack')
def test_snapshot_list_error(self):
self.stack_client.snapshot_list.side_effect = heat_exc.HTTPNotFound()
arglist = ['my_stack']
parsed_args = self.check_parser(self.cmd, arglist, [])
error = self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)
self.assertEqual('Stack not found: my_stack',
str(error))
class TestSnapshotShow(TestStack):
def setUp(self):
super(TestSnapshotShow, self).setUp()
self.cmd = snapshot.ShowSnapshot(self.app, None)
def test_snapshot_show(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
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')
def test_snapshot_not_found(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot_show.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)
class TestRestoreSnapshot(TestStack):
def setUp(self):
super(TestRestoreSnapshot, self).setUp()
self.cmd = snapshot.RestoreSnapshot(self.app, None)
def test_snapshot_restore(self):
arglist = ['my_stack', 'my_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
self.stack_client.restore.assert_called_with(
snapshot_id='my_snapshot', stack_id='my_stack')
def test_snapshot_restore_error(self):
self.stack_client.restore.side_effect = heat_exc.HTTPNotFound()
arglist = ['my_stack', 'my_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
error = self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)
self.assertEqual('Stack my_stack or snapshot my_snapshot not found.',
str(error))
class TestSnapshotCreate(TestStack):
get_response = {
"status": "IN_PROGRESS",
"name": "test_snapshot",
"status_reason": None,
"creation_time": "2015-11-09T04:35:38.534130",
"data": None,
"id": "108604fe-6d13-41b7-aa3a-79b6cf60c4ff"
}
def setUp(self):
super(TestSnapshotCreate, self).setUp()
self.cmd = snapshot.CreateSnapshot(self.app, None)
def test_snapshot_create(self):
arglist = ['my_stack', '--name', 'test_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
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')
def test_snapshot_create_no_name(self):
arglist = ['my_stack']
parsed_args = self.check_parser(self.cmd, arglist, [])
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)
def test_snapshot_create_error(self):
arglist = ['my_stack', '--name', 'test_snapshot']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.stack_client.snapshot.side_effect = heat_exc.HTTPNotFound
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)
class TestSnapshotDelete(TestStack):
def setUp(self):
super(TestSnapshotDelete, self).setUp()
self.cmd = snapshot.DeleteSnapshot(self.app, None)
def test_snapshot_delete(self):
arglist = ['my_stack', 'snapshot_id']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
self.stack_client.snapshot_delete.assert_called_with(
'my_stack', 'snapshot_id')
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.side_effect = heat_exc.HTTPNotFound()
self.assertRaises(
exc.CommandError,
self.cmd.take_action,
parsed_args)
@mock.patch('sys.stdin', spec=six.StringIO)
def test_snapshot_delete_prompt(self, mock_stdin):
arglist = ['my_stack', 'snapshot_id']
mock_stdin.isatty.return_value = True
mock_stdin.readline.return_value = 'y'
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
mock_stdin.readline.assert_called_with()
self.stack_client.snapshot_delete.assert_called_with('my_stack',
'snapshot_id')
@mock.patch('sys.stdin', spec=six.StringIO)
def test_snapshot_delete_prompt_no(self, mock_stdin):
arglist = ['my_stack', 'snapshot_id']
mock_stdin.isatty.return_value = True
mock_stdin.readline.return_value = 'n'
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
mock_stdin.readline.assert_called_with()
self.stack_client.snapshot_delete.assert_not_called()